孫愛愛
(武漢郵電科學(xué)研究院,武漢 430074)
防火墻的功能是限制非法流量,保護(hù)內(nèi)網(wǎng)??匆粋€(gè)防火墻是否成功,應(yīng)該從它是不是瓶頸來考慮,所以避免防火墻成為瓶頸就需要通過提高它的性能來解決。iptables主要通過各個(gè)表中的有序規(guī)則鏈對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾和篩選,從而有效抵制網(wǎng)絡(luò)入侵與攻擊[1]。本文先對iptables的四個(gè)表五個(gè)鏈以及對經(jīng)過iptables的數(shù)據(jù)包的流程作簡要的分析,然后提出幾種簡單的方法來提高防火墻的性能。
netfilter/iptables IP信息包過濾系統(tǒng)是由netfilter與iptables兩個(gè)組件構(gòu)成的。netfilter組件屬于內(nèi)核的一部分,包含了實(shí)現(xiàn)內(nèi)核過濾和處理信息包的規(guī)則集。iptables組件是一種被稱作用戶空間的工具。它使處理信息包的過濾表中的規(guī)則變得容易。
iptables包含四個(gè)表,五個(gè)鏈。表和鏈實(shí)際上是netfilter的兩個(gè)維度。四個(gè)表的處理優(yōu)先級從高到低依次是 raw、mangle、nat、filter。五條鏈分別是 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
Filter表,是默認(rèn)的表,它包括INPUT鏈、OUTPUT鏈以及FORWARD鏈。Nat表主要是做網(wǎng)絡(luò)地址轉(zhuǎn)換,它有三種內(nèi)建鏈,PREROUTING鏈通常用于DNAT;POSTROUTING會(huì)通過SNAT和MASQUERADE兩種方式轉(zhuǎn)換源IP地址;OUTPUT是處理本機(jī)產(chǎn)生的數(shù)據(jù)包。Mangle表由這包含了這五條鏈,可以對特定的數(shù)據(jù)包進(jìn)行修改或者給數(shù)據(jù)包附上一些額外的數(shù)據(jù),以達(dá)到路由控制和流量控制等。Raw表用于處理異常,優(yōu)先級最高,包括PREROUTING鏈和OUTPUT鏈。
由圖1可以看出,經(jīng)過iptables的數(shù)據(jù)包的基本步驟如圖1:
數(shù)據(jù)包到達(dá)網(wǎng)絡(luò)接口,比如eth0,首先進(jìn)入raw表的PREROUTING鏈,該鏈的作用是趕在連接跟蹤之前處理數(shù)據(jù),如果進(jìn)行了連接跟蹤,則在此處理;經(jīng)過IP校驗(yàn)后,首先經(jīng)過mangle表中的PREROUTING鏈,在此可以修改數(shù)據(jù)包,接著進(jìn)入nat表的PREROUTING鏈,在此可以做DNAT,但不要做過濾;再經(jīng)過一次路由查找,決定該數(shù)據(jù)包是給本地主機(jī)還是要轉(zhuǎn)發(fā)。若是給本地的主機(jī),則進(jìn)入mangle表的INPUT鏈,這里是在路由之后,交給本地主機(jī)之前,可以對數(shù)據(jù)包進(jìn)行一些相應(yīng)的修改,接著進(jìn)入Filter表的INPUT鏈,在這里可以對流入的所有數(shù)據(jù)包進(jìn)行過濾,無論數(shù)據(jù)包來自哪個(gè)網(wǎng)絡(luò)接口,經(jīng)過這些處理后再傳遞給上層協(xié)議。如果數(shù)據(jù)包需要轉(zhuǎn)發(fā),則發(fā)給mangle表的FORWARD鏈的和Filter表的FORWARD鏈對該數(shù)據(jù)包進(jìn)行相應(yīng)的處理;本機(jī)網(wǎng)絡(luò)層以上各層產(chǎn)生的數(shù)據(jù)包在依次通過mangle表、nat表和filter表的OUTPUT鏈后,再通過路由選擇一次;要發(fā)送的數(shù)據(jù)包,都一定要經(jīng)過mangle表的POSTROUTING鏈和nat表的POSTROUTING鏈進(jìn)行處理。
在防火墻中,數(shù)據(jù)包所流經(jīng)的規(guī)則和數(shù)據(jù)鏈?zhǔn)怯善鋪碓础⒛康牡刂返葘傩詻Q定的,只要數(shù)據(jù)包匹配了其中一條規(guī)則,過濾就會(huì)結(jié)束,否則會(huì)通過整個(gè)規(guī)則鏈,再按默認(rèn)的規(guī)則來處理該包。經(jīng)過一次不匹配的規(guī)則至少相當(dāng)于一次比較。由于netfilter/iptables有大量的表和鏈,經(jīng)過的規(guī)則過多,會(huì)顯著影響其性能。讓數(shù)據(jù)包盡可能少的經(jīng)過netfilter/iptables中的表和鏈?zhǔn)莾?yōu)化防火墻的最終要求,理想情況下數(shù)據(jù)包能夠達(dá)到以線速進(jìn)行傳送。
一般過濾一類報(bào)文,會(huì)在默認(rèn)的filter表中過濾,但是這些報(bào)文在到達(dá)filter表的FORWARD鏈之前,由圖1可以看到它會(huì)首先經(jīng)過除filter表之外的其它表的某些鏈的所有規(guī)則,這會(huì)嚴(yán)重影響防火墻的過濾性能[4]。這種情況下,可以將filter表中的某些過濾規(guī)則前移到raw表或mangle表。
iptables -A FORWARD -d 192.168.2.0/24 -j DROP修改為
iptables -t raw -A PREROUTING -d 192.168.2.0/24 -j DROP
對于做了DNAT的報(bào)文,例如:
iptables -t nat -A PREROUTING -p tcp-d 111.173.99.38 --dport 80 -j DNAT --to 192.168.1.20:8080
由于nat表的PREROUTING鏈在filter表的INPUT鏈和FORWARD鏈之前,此時(shí)報(bào)文在filter表過濾時(shí),已經(jīng)做了DNAT。此時(shí),可以考慮將過濾的規(guī)則前移至raw表的PREROUTING鏈,由于nat表的PREROUTING鏈在raw表的PREROUTING鏈之后,因此在將規(guī)則前移到raw表的PREROUTING鏈時(shí),要考慮將規(guī)則中的地址作相應(yīng)的轉(zhuǎn)換,
iptables -A FORWARD -p tcp -s 111.173.99.40 -d 192.168.1.20 --dport 8080 -j DROP 修改為
iptables -t raw -A PREROUTING -p tcp -s 111.173.99.40 -d 111.173.99.38 -dport 80 -j DROP ,這兩者的效果是一樣的,但是由于過濾規(guī)則提到了raw表之前,此時(shí)轉(zhuǎn)發(fā)效率得到了提高。
iptables的規(guī)則匹配是按順序來匹配的,規(guī)則的數(shù)量越多,效率就越低。iptables允許用戶自己定義一些規(guī)則鏈,在匹配集的基礎(chǔ)上,目標(biāo)能夠向外擴(kuò)展或中轉(zhuǎn)到用戶自己定義規(guī)則鏈上。這會(huì)有兩種情況存在,若是在用戶自定義鏈上規(guī)則沒有匹配成功,則在遍歷了用戶自定義規(guī)則后,控制會(huì)被轉(zhuǎn)回到調(diào)用鏈,繼續(xù)在調(diào)用鏈的下一規(guī)則上進(jìn)行相應(yīng)的匹配;若是在自定義規(guī)則鏈上規(guī)則匹配成功了,則會(huì)對數(shù)據(jù)包采取相應(yīng)的行動(dòng),這樣控制就不會(huì)回到調(diào)用鏈了,這樣就大大減少了比較次數(shù)。
很多internet的服務(wù)程序可能用的是TCP協(xié)議,而UDP協(xié)議是一種非常簡單的協(xié)議,它是基于數(shù)據(jù)包收發(fā)的協(xié)議,所以基于該協(xié)議的數(shù)據(jù)包在經(jīng)過TCP協(xié)議的規(guī)則鏈時(shí),是不會(huì)使系統(tǒng)的負(fù)擔(dān)明顯加重[5],所以可以將TCP所有規(guī)則放在UDP規(guī)則之后。
由于ICMP數(shù)據(jù)包是一種發(fā)送頻率是相對較低的數(shù)據(jù)包,它里面只包含了少量的控制和狀態(tài)信息。并且只有Echo-Request ICMP數(shù)據(jù)包為了應(yīng)對某種異常出站行為總是發(fā)送控制消息或者狀態(tài)消息的數(shù)據(jù)包。所以應(yīng)該在防火墻規(guī)則后端放置ICMP協(xié)議。
通過改進(jìn),可以通過移動(dòng)防火墻規(guī)則在iptables表中的位置,或者用戶自定義規(guī)則鏈,或者是根據(jù)一些規(guī)則的特點(diǎn)將它放置在防火墻規(guī)則之前或之后的方法來提高防火墻的性能。
[1] 王相林, 沈清姿. 高效的iptables規(guī)則集管理機(jī)制的研究與實(shí)現(xiàn)[J]. 杭州電子科技大學(xué)學(xué)報(bào), 2011(6):59-62.
[2] 周增國, 李忠明. Linux平臺(tái)下Netfilter/Iptables包過濾防火墻的研究與應(yīng)用[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用 , 2008(1):49-50.
[3] 趙躍華,周萬勝.防火墻過濾規(guī)則動(dòng)態(tài)生成方案設(shè)計(jì)[J]. 計(jì)算機(jī)工程 ,2012, 38(2):135-137,140.
[4] 劉勇,蘇軍.Netfilter/Iptables防火墻的運(yùn)行機(jī)制分析與性能優(yōu)化[J].科技創(chuàng)新論壇, 2012(6):188.
[5] 吳延卯.iptables防火墻性能優(yōu)化研究[J].計(jì)算機(jī)與現(xiàn)代化 ,2012(9):106-108.