利用iptables+ipset封禁大量ip

2018-03-25T17:00:00

由于提供的共享frp服务端有被人利用转发酸酸乳导致被墙,因此有必要对frp服务端设置只允许国内ip连接,这里以此为例

1、先安装ipset

apt-get install ipset

yum install ipset

2、创建ipset的 chinaip IP集

ipset create chinaip hash:net maxelem 65536

3、添加国内ip到ipset的chinaip IP集(获取国内ip)

ipset flush chinaip
for ip in $(cat './chinaip.txt'); do
  ipset add chinaip $ip
done

4、显示chinaip列表

ipset list chinaip

5、iptables限制,只允许ipset的 chinaip IP集内IP连接到7000端口(7000端口为frps的通讯端口,限制以后则frpc无法连接frps),以下命令最好手动加到/etc/sysconfig/iptables(去掉命令前的iptables后直接复制进去即可),因为博主执行后iptables文件里面并没有

iptables -A INPUT -m set --match-set chinaip src -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -m set --match-set chinaip src -p udp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 7000 -j REJECT
iptables -A INPUT -p udp --dport 7000 -j REJECT

6、重启iptables

service iptables restart

6、自动化
利用宝塔的计划任务每天下载并更新中国ip,并添加进防火墙规则
脚本内容

rm -rf ./chinaip.txt
wget -c http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}' | tee chinaip.txt
ipset flush chinaip
for ip in $(cat './chinaip.txt'); do
  ipset add chinaip $ip
done

如图:

存在问题(不知道是不是系统问题,可能其他人没问题)
重启以后内核无法加载ipset模块,但是ipset的确还在,不需要重新安装,只需要重新创建ip集,如下

ipset create chinaip hash:net maxelem 65536

ipset flush chinaip
    for ip in $(cat './chinaip.txt'); do
      ipset add chinaip $ip
    done

service iptables restart

具体问题如下:重启系统以后发现防火墙规则全部不起作用(应该是防火墙没启动),然后service iptables restart重启防火墙提示: Applying firewall rules: iptables-restore v1.4.7: Kernel module ip_set is not loaded in.可能是内核问题

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »