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