iptable + ipset 封禁大量ip(指定区域)

690
|
2019-11-02 17:47:00

背景:最近公司项目需要禁止指定省市的ip访问

(ip段是从某网站爬的,加起来大约15万ip段)

系统centos 7.2

1.安装iptables (centos7 默认安装)

2.安装ipset

yum install ipset

注:如果提示找不到资源包请先执行 yum update

3.创建黑名单

这里使用的是hash:net 因为涉及到了ip段 最多储存1000000条

ipset create black hash:net hashsize 4096 maxelem 1000000 

将要封禁的ip或IP段添加到黑名单

ipset add black 27.38.238.0/24
ipset add black 27.42.238.22

4.创建iptables规则

iptables -I INPUT -d *.*.*.* -m set --match-set black src -p tcp -m multiport --dport 80,443 -j DROP

注解 -d 后面的 *.*.*.* 为服务器的ip,如果是单ip服务器则不需要(这台服务器为多ip多域名的,业务要求封禁单个域名,其他不受影响) -m multiport 匹配多个端口,也就是后面的80,443

ipset 保存在内存中,重启之后就没有了,所以需要保存为文件,重启之后恢复

#保存
ipset save black -f /root/black.txt
#恢复
ipset restore -f /root/balck.txt

可以将恢复命令加入到开机自启 /etc/rc.loacl 中,该文件需要有执行权限

其他

#检测ip是否在黑名单
ipset test black 23.224.23.6
#查看iptables已有的策略
iptables -L -n