六、IPSet
iptables在进行包过滤的时候,对每个数据包都过滤一遍iptables中的规则。假设我们有如下三条规则:
-s 1.1.1.1 -p tcp accpet
-s 2.2.2.2 -p tcp accpet
-s 3.3.3.3 -p tcp accpet
那么当一个数据包源地址是3.3.3.3的时候,它首先去匹配第一条规则,不匹配再匹配第二条,最后在第三条匹配中了。想一想如果我有类似的100条规则呢?内核最差的情况是不是对一个数据包需要做100个规则匹配,这是相当没有效率的事情。在上述的例子中,其动作都是一样的能不能把这三条规则总结成一条规则呢 ?有那就是IPSet,它将多条iptable规则富集到一个ip set里,这个ip set使用hash或者图来组织,在netfilter过滤的时候,采用hash或者图方式规则运算进行查找,比原来的iptable一个顺序的规则查找方法运算速度提升很多,特别是规则条目很多的时候。
1、IPSet支持的匹配集
1.1 bitmap
支持bitmap:ip bimap:ip,mac和bitmap:port
支持hash:ip,hash:net ,hash:ip,port,net hash:ip,port,ip hash:net,port hash:net,if
支持list
2、使用例子:
针对上例,我们使用如下方法设置ipset
IPSet -N zxy_set hash:ip hashsize 256 maxelem 1024
IPSet add zxy_set 1.1.1.1
IPSet add zxy_set 2.2.2.2
IPSet add zxy_set 3.3.3.3
Iptable -I INPUT -m set --match-set zxy_set src -p tcp -j Accept