王相林,沈清姿
(杭州電子科技大學(xué)計(jì)算機(jī)學(xué)院,浙江杭州310018)
防火墻是目前網(wǎng)絡(luò)安全領(lǐng)域廣泛使用的設(shè)備,其主要目的就是限制非法流量,以保護(hù)內(nèi)部子網(wǎng)[1,2]。從防火墻部署位置來(lái)看,往往位于網(wǎng)絡(luò)出口,是內(nèi)部網(wǎng)和外部網(wǎng)之間的唯一通道,因此提高防火墻的性能、避免其成為瓶頸,就成為防火墻產(chǎn)品能否成功的一個(gè)關(guān)鍵問(wèn)題。本文由此提出了使用hash表對(duì)防火墻規(guī)則中IP地址的進(jìn)行高效管理,達(dá)到一條規(guī)則能匹配一個(gè)地址集或一個(gè)地址集用于多條規(guī)則,在進(jìn)行一次規(guī)則匹配的同時(shí),能映射多個(gè)IP地址提高數(shù)據(jù)包轉(zhuǎn)發(fā)效率,從而有效的提高防火墻的整體性能。
Netfilter是Linux內(nèi)核中的一個(gè)框架,Iptables是由Netfilter項(xiàng)目開(kāi)發(fā)工作于網(wǎng)絡(luò)層的防火墻,主要面向的是用戶空間,是Linux的一部分。Netfilter本身并不對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾,它只是允許可以過(guò)濾數(shù)據(jù)包的函數(shù)掛接到內(nèi)核中適當(dāng)?shù)奈恢?,而iptables在它之上建立了防火墻功能并提供了全面的狀態(tài)連接跟蹤、數(shù)據(jù)包的應(yīng)用層檢查、速率限制和一個(gè)功能強(qiáng)大的過(guò)濾策略機(jī)制[3],其中強(qiáng)大的的過(guò)濾策略機(jī)制則是通過(guò)iptables中的規(guī)則實(shí)現(xiàn)的。Iptables主要通過(guò)Netfilter中的5個(gè)鉤子點(diǎn)進(jìn)行掛接,使用表進(jìn)行構(gòu)建塊,通過(guò)掛接Netfilter中的鉤子點(diǎn),要求數(shù)據(jù)包經(jīng)過(guò)指定的規(guī)則表以達(dá)到過(guò)濾的目的。Iptables中共有4張表:分別是filter表(過(guò)濾表)、nat表(網(wǎng)絡(luò)地址轉(zhuǎn)換表)、mangle表(數(shù)據(jù)報(bào)處理表)、raw表(連接跟蹤子系統(tǒng)表),每個(gè)表里又有自己的一組內(nèi)置鏈,用戶空間建立的規(guī)則就是通過(guò)內(nèi)置鏈實(shí)現(xiàn)的,只有當(dāng)數(shù)據(jù)包匹配了鏈中的某條規(guī)則,防火墻才會(huì)采用規(guī)則中的動(dòng)作對(duì)數(shù)據(jù)包處理,iptables數(shù)據(jù)包篩選體系如圖1所示。
Iptables規(guī)則主要由一個(gè)Target(動(dòng)作)和0個(gè)或多個(gè)Match(匹配項(xiàng))組成。一旦某個(gè)數(shù)據(jù)包匹配了一條規(guī)則的所有Match,就用這條規(guī)則的Target來(lái)處理它,其中Match包括源/目的地址,進(jìn)/出網(wǎng)絡(luò)接口,協(xié)議等。
圖1 iptables數(shù)據(jù)包篩選體系
Iptables主要通過(guò)內(nèi)置鏈中的規(guī)則對(duì)數(shù)據(jù)包進(jìn)行匹配,以達(dá)到阻止或記錄某些具有威脅的數(shù)據(jù)包進(jìn)入本機(jī)的目的,因此高效的匹配算法對(duì)于防火墻的性能會(huì)有極大地提高。通常,用于衡量一個(gè)算法性能的參數(shù)有主要有查找速度,存儲(chǔ)量,更新速度,是否支持多種類型的數(shù)據(jù),是否有靈活的查找機(jī)制等[4]。Iptables中的查找算法一般是線性查找,即一個(gè)數(shù)據(jù)包進(jìn)入iptables內(nèi)置規(guī)則鏈中,從規(guī)則的第一條開(kāi)始匹配,直到完全匹配到某一條規(guī)則后執(zhí)行規(guī)則中的Target。如果全部的規(guī)則都不匹配,則會(huì)執(zhí)行預(yù)先設(shè)定的Policy(默認(rèn))規(guī)則。
順序查找和動(dòng)態(tài)查找均是建立在關(guān)鍵字比較基礎(chǔ)上,而且算法的查找效率依賴于查找過(guò)程中進(jìn)行比較的次數(shù)[5]。哈希查找算法則不同,它采用直接尋址技術(shù),在查找過(guò)程中,理想情況是不經(jīng)過(guò)任何比較,一次就能得到待查詢的地址,其查找的期望時(shí)間為O(1),所說(shuō)的哈希就是將記錄按照其關(guān)鍵字經(jīng)過(guò)哈希函數(shù)運(yùn)算后的哈希地址存儲(chǔ)到哈希表的過(guò)程[5]。該文將規(guī)則中大量無(wú)序的IP地址存儲(chǔ)在hash表中,并使用再哈希法來(lái)處理沖突,使得定義一條iptables規(guī)則,就能匹配大量的IP源或目的地址,從而能大大提高檢索效率。線性查找和hash表查找的時(shí)間復(fù)雜度比較如表1所示。
表1 線性查找和hash表查找的時(shí)間復(fù)雜度
由上述分析可知,對(duì)于無(wú)序而僅有源或目的地址不同的規(guī)則,數(shù)據(jù)包進(jìn)入后可能要重復(fù)的去匹配先前已經(jīng)匹配過(guò)的Match項(xiàng),所以該文將規(guī)則中的地址存儲(chǔ)在hash表中,使用iptables中set擴(kuò)展模塊調(diào)用使用,從而實(shí)現(xiàn)定義一條簡(jiǎn)單的iptables規(guī)則,就能匹配大量的IP地址,還能實(shí)現(xiàn)多條規(guī)則能公用一個(gè)IP地址集。相比一條規(guī)則一個(gè)地址來(lái)說(shuō),在大量規(guī)則下,防火墻性能可以得到極大提高。
客戶端:
(1)操作系統(tǒng) Ubuntu桌面版,內(nèi)核版本為L(zhǎng)inux2.6.32-21-generic;
(2)硬件平臺(tái) CPU AMD Athlon 2GHZ,1GB內(nèi)存,BCM5788網(wǎng)卡;
(3)攻擊工具 netperf TCP發(fā)包工具客戶端。
服務(wù)器端:
(1)操作系統(tǒng) Ubuntu桌面版,內(nèi)核版本為L(zhǎng)inux2.6.34-debug-version;
醫(yī)護(hù)工作區(qū)主要分為休息室、更衣室與護(hù)士站等,其中,休息室能夠?yàn)獒t(yī)護(hù)人員提供良好的休息環(huán)境,設(shè)計(jì)人員要保證休息室中的環(huán)境優(yōu)美,可以布置鮮花,并為醫(yī)護(hù)人員提供飲料,緩解醫(yī)護(hù)人員的緊張情緒,促進(jìn)醫(yī)護(hù)人員之間的有效溝通。更衣室則能夠保證醫(yī)護(hù)人員的生活氣息得到更好的體現(xiàn),設(shè)計(jì)人員需要在更衣室中合理設(shè)計(jì)衛(wèi)生間。在設(shè)計(jì)護(hù)士站的過(guò)程中,要保持護(hù)士站與候診室距離較近。
(2)硬件平臺(tái) CPU Pentium4,768MB內(nèi)存,intel 82541GI網(wǎng)卡;
(3)攻擊工具 netperf TCP發(fā)包工具服務(wù)器端。
在兩臺(tái)主機(jī)上分別運(yùn)行netperf的客戶端和服務(wù)器端,其中服務(wù)器端配置iptables規(guī)則,客戶端發(fā)送連接請(qǐng)求。
客戶端的命令為:
./netperf-t TCP_RR-H 192.168.150.256-l 60- - -r 32,32
其中:TCP_RR是測(cè)試發(fā)生在同一個(gè)TCP連接中request和response的交易過(guò)程;
-H指定遠(yuǎn)程主機(jī)的IP地址和名稱;
-l指定本次測(cè)試時(shí)間,單位為s;
在客戶端進(jìn)行測(cè)試,規(guī)則數(shù)為5 000條時(shí)其中一次客戶端的測(cè)試數(shù)據(jù)如圖2所示,其中Trans表示單位時(shí)間發(fā)送TCP數(shù)據(jù)的交易量。
圖2 netperf客戶端的測(cè)試數(shù)據(jù)
服務(wù)器端開(kāi)啟防火墻,并向其中添加規(guī)則,本次實(shí)驗(yàn)中每條規(guī)則使用相同的Match選項(xiàng),腳本運(yùn)行后filter表中的規(guī)則如圖3所示。
圖3 filter表中的規(guī)則
使用hash表對(duì)IP地址進(jìn)行管理前后主機(jī)在單位時(shí)間內(nèi)數(shù)據(jù)報(bào)交易量的對(duì)比圖如表2所示。
表2 對(duì)IP地址集中管理前后TCP數(shù)據(jù)報(bào)交易量對(duì)比
因?yàn)槭軒捄碗娔X自身參數(shù)的影響,每次測(cè)量可能會(huì)存在一定的誤差,所以表2中為不同規(guī)則數(shù)的吞吐量是多次測(cè)量的平均值。由表2可以看出,iptables的TCP數(shù)據(jù)報(bào)的交易量在規(guī)則數(shù)達(dá)到2 500左右的時(shí)候急劇下降,在規(guī)則數(shù)到達(dá)10 000條的時(shí)候,iptables的單位時(shí)間內(nèi)數(shù)據(jù)報(bào)的交易量下降了80%左右,而對(duì)IP地址集中管理后,相同時(shí)間內(nèi),TCP數(shù)據(jù)報(bào)的發(fā)送量隨著規(guī)則的增多基本不發(fā)生變化,可見(jiàn),采用hash對(duì)無(wú)規(guī)則的IP地址進(jìn)行管理后,計(jì)算機(jī)的整體的性能得到了很大的提高。
該文針對(duì)Netfilter框架下iptables防火墻在大量無(wú)序規(guī)則性能急劇下降的情況提出了一種高效的規(guī)則管理機(jī)制,即通過(guò)hash表對(duì)IP地址進(jìn)行分類管理,向iptables中添加iphash_id()地址映射模塊,實(shí)現(xiàn)高效的規(guī)則匹配。從實(shí)驗(yàn)數(shù)據(jù)可以看出,改進(jìn)后iptables的性能基本不受規(guī)則數(shù)量大小的影響,基本呈現(xiàn)一條直線,具有很好的穩(wěn)定性。該文下一步研究工作是對(duì)其余的Match部分實(shí)現(xiàn)高效的匹配。
[1] Zalenski R.Firewall technologies[J].Potentials IEEE,2002,21(1):24 -29.
[2] Terry William Ogletree.防火墻原理與實(shí)施[M].北京:電子工業(yè)出版社,2001:5-7.
[3] Michael Rash.Linux防火墻[M].北京:人民郵電出版社,2009:1-3.
[4] Pankaj Gupta,Nick McKeown.Algorithms for Packet Classification[J].Network IEEE,2001,15(2):24 -32.
[5] 彭波.數(shù)據(jù)結(jié)構(gòu)及算法[M].北京:機(jī)械工業(yè)出版社,2008:288-290.
[6] 王相林.IPv6核心技術(shù)[M].北京:科學(xué)出版社,2009:100-200.