Ubuntu 设置只允许国内的 IP 访问

Introduction 介绍

今年九月份,我自己的服务器让国外的黑客给勒索了,两块硬盘的全部数据都没了。因为这个服务器只是让身处国内的我使用,因此不需要国外的 IP 访问。我需要将国外的 IP 都给屏蔽掉,这里需要使用到 ipset ,这是 iptable 的扩展,允许创建一个IP地址集合的规则,能快速屏蔽某个 IP 段。

Step 1 安装 ipset

sudo apt-get update
sudo apt-get -y install ipset

Step 2 获取国内的 IP 网段

运行下面的命令以获取国内的 IP 网段,保存在 /root/china_ssr.txt

wget -q --timeout=60 -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ssr.txt

Step 3 设置脚本

Step 3.1 新建脚本

cd root/
sudo vim allcn.sh

将下面的脚本完整地保存在 /root/allcn.sh 中。

mmode=$1

#下面语句可以单独执行,不需要每次执行都获取网段表
#wget -q --timeout=60 -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ssr.txt

CNIP="/root/china_ssr.txt"


gen_iplist() {
    
    
        cat <<-EOF
                $(cat ${
      
      CNIP:=/dev/null} 2>/dev/null)
EOF
}

flush_r() {
    
    
iptables  -F ALLCNRULE 2>/dev/null
iptables -D INPUT -p tcp -j ALLCNRULE 2>/dev/null
iptables  -X ALLCNRULE 2>/dev/null
ipset -X allcn 2>/dev/null
}

mstart() {
    
    
ipset create allcn hash:net 2>/dev/null
ipset -! -R <<-EOF
$(gen_iplist | sed -e "s/^/add allcn /")
EOF

iptables -N ALLCNRULE
iptables -I INPUT -p tcp -j ALLCNRULE
iptables -A ALLCNRULE -s 127.0.0.0/8 -j RETURN
iptables -A ALLCNRULE -s 169.254.0.0/16 -j RETURN
iptables -A ALLCNRULE -s 224.0.0.0/4 -j RETURN
iptables -A ALLCNRULE -s 255.255.255.255 -j RETURN
#可在此增加你的公网网段,避免调试ipset时出现自己无法访问的情况

iptables -A ALLCNRULE -m set --match-set allcn  src -j RETURN
iptables -A ALLCNRULE -p tcp -j DROP


}

if [ "$mmode" == "stop" ] ;then
flush_r
exit 0
fi

flush_r
sleep 1
mstart

Step 3.2 设置执行权限

chmod a+x /root/allcn.sh

Step 4 运行

回到根目录,运行下面的指令

/root/allcn.sh

运行之后,国外的 IP 就没有法访问了。

若想恢复国外 IP 的访问,输入下面的指令:

/root/allcn.sh stop

猜你喜欢

转载自blog.csdn.net/qq_17790209/article/details/128026987
今日推荐