六、IPSet
iptables在進行包過濾的時候,對每個數(shù)據(jù)包都過濾一遍iptables中的規(guī)則。假設我們有如下三條規(guī)則:
-s 1.1.1.1 -p tcp accpet
-s 2.2.2.2 -p tcp accpet
-s 3.3.3.3 -p tcp accpet
那么當一個數(shù)據(jù)包源地址是3.3.3.3的時候,它首先去匹配第一條規(guī)則,不匹配再匹配第二條,最后在第三條匹配中了。想一想如果我有類似的100條規(guī)則呢?內(nèi)核最差的情況是不是對一個數(shù)據(jù)包需要做100個規(guī)則匹配,這是相當沒有效率的事情。在上述的例子中,其動作都是一樣的能不能把這三條規(guī)則總結(jié)成一條規(guī)則呢 ?有那就是IPSet,它將多條iptable規(guī)則富集到一個ip set里,這個ip set使用hash或者圖來組織,在netfilter過濾的時候,采用hash或者圖方式規(guī)則運算進行查找,比原來的iptable一個順序的規(guī)則查找方法運算速度提升很多,特別是規(guī)則條目很多的時候。
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