Total Pageviews

Sunday, 10 January 2021

使用ipset工具对iptables设置黑/白名单

 ipset是iptables的扩展,它允许你创建/匹配整个地址集合的规则。而不像普通的iptables链只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即使集合比较大也可以进行高效的查找,除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网络拥塞,ipset也具备一些新防火墙设计方法,并简化了配置。官网:http://ipset.netfilter.org/


1、ipset安装

$ sudo yum install ipset


2、创建ipset

$ sudo ipset create xxx hash:net


其他的存储类型:

hash:ip 表示存储IP段或IP地址

hash:ip,port 表示存储的是ip地址和端口,如果没有注明协议,默认就是TCP协议,例如:

    $ sudo ipset blacklist 12.34.56.78,80

    $ sudo ipset blacklist 12.34.56.78,udp:53


ipset默认可以存储65536个元素,可以通过maxelem 修改可以存储的最大元素数量:

$ sudo ipset create blacklist hash:net maxelem 100000


查看已经创建的ipset:

$ ipset list


3、将指定IP加入名单:

$ sudo ipset blacklist 12.34.56.78


将指定IP段加入名单:

$ sudo ipset blacklist 12.34.56.78/24


4、从名单中去除一个IP

$ sudo ipset del blacklist 12.34.56.78


5、创建iptables规则

(1)使ipset列表中的ip的nat流量均被转发到1080端口

$ sudo iptables -t nat -A PREROUTING -p tcp -m set --match-set blacklist dst -j REDIRECT --to-port 1080


(2)使ipset列表中的ip的本机发出的流量均被转发到1080端口

$ sudo iptables -t nat -A OUTPUT -p tcp -m set --match-set blacklist dst -j REDIRECT --to-port 1080


6、将ipset规则保存到文件

$ sudo ipset save blacklist -f blacklist.txt


7、从文件中导入ipset规则

$ sudo ipset restore -f blacklist.txt


8、删除ipset规则列表

$ sudo ipset destroy blacklist


9、其他

ipset 支持 timeout 参数,这就意味着,如果一个集合是作为黑名单使用,通过 timeout 参数,就可以到期自动从黑名单里删除内容。


$ sudo ipset add blacklist 2.2.2.2 timeout 60


ipset的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动,新加入ipset的ip也生效。

参考

https://www.cnblogs.com/vijayfly/p/7205559.html

http://blog.chinaunix.net/uid-25518484-id-5697721.html

No comments:

Post a Comment