问题背景
某些场景下,我们需要大批量增加ip白名单或者黑名单,常用方法使用iptables添加单ip或者整个网段需要配置大量的规则,会耗费人力并且不好维护,针对这种情况,可以使用ipset结合iptables解决
ipset配置
创建集合
# 这里maxelem的值是可以调整的,决定了可以存多少条目
# hash:ip是集合类型中的一种,还有hash:net等,因为有时候给的是不连续地址,如果填hash:net需要提供整网段会提示格式不符,也没有找到比较简单的办法,但使用hash:ip的过程中也遇到一个问题,如果写一个连续地址,会自动转换每个ip作为一个条目,感觉是非常浪费条目的
ipset create -exist mysets hash:ip family inet hashsize 1024 maxelem 1000000 timeout 0
应用ipset规则
#把ipset规则添加到防火墙中,可以做白名单或者黑名单
iptables -I INPUT -p tcp -m multiport --dports 80,443,22 -m set --match-set mysets src -j ACCEPT