專利名稱:一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于通信技術(shù)領(lǐng)域,具體設(shè)計內(nèi)核態(tài)數(shù)據(jù)數(shù)據(jù)包采集與過濾,會話還原,用戶態(tài)與內(nèi)核態(tài)的通信,透明模式的實現(xiàn)等??梢愿鶕?jù)會話完整內(nèi)容進行過濾,阻止非法的數(shù)據(jù)包通過。
背景技術(shù):
互聯(lián)網(wǎng)滿足了人們幾千年來苦苦追求的“快”和“沒有限制”的突破時空的至高境界,實現(xiàn)人們的自由之夢,他契合了人的原始本性,達到的“自由”程度超越了以前人們的想象?;ヂ?lián)網(wǎng)的開放、讓人們前所未有地享受到不受約束獲得各種信息發(fā)布言論的自由,但同時也帶來了許多信息安全問題。
有數(shù)據(jù)顯示,近幾年青少年花在看電視的時間已經(jīng)少于上網(wǎng)的時間,網(wǎng)絡(luò)正成為青少年認識的世界、獲得知識、休閑娛樂的一種工具。網(wǎng)絡(luò)中的信息內(nèi)容五花八門,大多未經(jīng)過嚴(yán)格的把關(guān)和篩選,雖然能滿足部分教育、信息及休閑上的需要,但亦存在大量讓家長、社會頭痛的,易對青少年產(chǎn)生負面影響的淫穢色情、暴力恐怖、反政府以及種族歧視等網(wǎng)站。
第二類安全問題是病毒感染和垃圾郵件的威脅。隱藏在網(wǎng)絡(luò)中的有害代碼通過病毒、蠕蟲、木馬程序等對計算機進行攻擊,這些病毒不斷在增長,而且發(fā)展速度相當(dāng)之快,破壞性愈來愈大。智能化、人性化、隱蔽化、多樣化也在逐漸成為新世紀(jì)電腦病毒的發(fā)展趨勢。大量的垃圾郵件也嚴(yán)重影響了用戶對互聯(lián)網(wǎng)的正常使用,大量垃圾郵件降低了網(wǎng)絡(luò)運行效率占用網(wǎng)絡(luò)帶寬,造成郵件服務(wù)器擁塞,進而降低整個網(wǎng)絡(luò)的運行效率,給同在一臺服務(wù)器上的其他用戶帶來影響。
另外一類信息安全問題就是對機密信息的威脅。現(xiàn)在利用網(wǎng)絡(luò)竊取或泄露公司機密的案例屢見不鮮。這種行為給企業(yè)帶來了巨大的危害。企業(yè)的最新成果,核心競爭力可能在一瞬間不復(fù)存在,從而造成巨大的經(jīng)濟損失。有的企業(yè)為了避免這種現(xiàn)象,甚至禁止員工上互聯(lián)網(wǎng),這無疑給工作帶來了很大的不便。
內(nèi)容過濾是網(wǎng)絡(luò)安全的新課題,它的任務(wù)是從動態(tài)信息源中過濾掉在一段時期內(nèi)比較固定的非需求信息。通過在網(wǎng)絡(luò)中加入內(nèi)容分析過濾功能,對內(nèi)能夠幫助受保護網(wǎng)絡(luò)消除通過網(wǎng)絡(luò)對機密信息造成的泄漏,對外可以過濾掉網(wǎng)絡(luò)中的不健康內(nèi)容及垃圾信息。既可阻止不良信息對人們的侵害,適應(yīng)社會對意識形態(tài)方面的要求,同時,通過規(guī)范用戶的上網(wǎng)行為,提高工作效率,合理利用網(wǎng)絡(luò)資源,減少病毒對網(wǎng)絡(luò)的侵害,這就是內(nèi)容過濾技術(shù)的根本內(nèi)涵。
目前,在網(wǎng)絡(luò)邊界的過濾包括基于網(wǎng)絡(luò)層的包過濾技術(shù)和基于應(yīng)用層的代理技術(shù)。
基于網(wǎng)絡(luò)層的包過濾技術(shù),據(jù)分組包頭源地址,目的地址和端口號、協(xié)議類型等標(biāo)志確定是否允許數(shù)據(jù)包通過。只有滿足過濾邏輯的數(shù)據(jù)包才被轉(zhuǎn)發(fā)到相應(yīng)的目的地出口端,其余數(shù)據(jù)包則被從數(shù)據(jù)流中丟棄。但是這種方式無法理解應(yīng)用層信息,而大多數(shù)內(nèi)容過濾都是針對應(yīng)用層進行的,所以很難進行內(nèi)容過濾。此外該方式進行內(nèi)容過濾時,是進行單包過濾,由于缺少上下文關(guān)聯(lián)信息,影響準(zhǔn)確度。
基于應(yīng)用層的代理技術(shù),也叫應(yīng)用網(wǎng)關(guān),它作用在應(yīng)用層,其特點是完全″阻隔″了網(wǎng)絡(luò)通信流,通過對每種應(yīng)用服務(wù)編制專門的代理程序,實現(xiàn)監(jiān)視和控制應(yīng)用層通信流的作用。應(yīng)用層代理能夠理解各種應(yīng)用協(xié)議,能方便的進行內(nèi)容過濾,但是對用戶不透明,必須為每種應(yīng)用分別編寫不同的代理程序。而且速度較慢,對網(wǎng)絡(luò)性能較大。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,可以提高數(shù)據(jù)采集的效率,對非法的數(shù)據(jù)包進行實時的阻斷,以透明的方式工作,高效的在網(wǎng)絡(luò)層過濾應(yīng)用層信息。
一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,用一個內(nèi)容過濾網(wǎng)關(guān)透明的串聯(lián)在網(wǎng)絡(luò)邊界,以無IP方式,在網(wǎng)絡(luò)層來過濾所有出入局域網(wǎng)的數(shù)據(jù),所訴內(nèi)容過濾網(wǎng)關(guān)運行Linux kernel 2.4操作系統(tǒng),安裝雙網(wǎng)卡,每塊網(wǎng)卡都設(shè)置為混雜模式,使用brctl配置兩塊網(wǎng)卡為網(wǎng)橋來實現(xiàn)透明串聯(lián)在網(wǎng)絡(luò)邊界上。
本發(fā)明的特征在于依次含有以下步驟步驟1,初始化在所述內(nèi)容過濾網(wǎng)關(guān)中設(shè)有數(shù)據(jù)包捕獲模塊,數(shù)據(jù)包處理模塊,以及數(shù)據(jù)包轉(zhuǎn)發(fā)模塊,這些模塊工作在Linux系統(tǒng)的內(nèi)核態(tài),還設(shè)有內(nèi)容分析模塊,工作在用戶態(tài);在所述這些模塊中數(shù)據(jù)包捕獲模塊,注冊了設(shè)定的過濾函數(shù),對于那些需要轉(zhuǎn)發(fā)的數(shù)據(jù)包,送往數(shù)據(jù)包轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā),對于需要進行內(nèi)容過濾的數(shù)據(jù)包,則送往數(shù)據(jù)包處理模塊;數(shù)據(jù)包處理模塊,對數(shù)據(jù)包捕獲模塊發(fā)來的需要進行內(nèi)容分析的TCP數(shù)據(jù)包,首先按序號順序在緩沖區(qū)中緩存,當(dāng)捕獲到一條連接的所有數(shù)據(jù)包時,還原出該連接的應(yīng)用層數(shù)據(jù)內(nèi)容,交給工作在用戶態(tài)的內(nèi)容分析模塊進行分析,合法就交給數(shù)據(jù)包轉(zhuǎn)發(fā)模塊依次轉(zhuǎn)發(fā)該連接的所有數(shù)據(jù)包,不合法就阻斷該連接,其處理步驟依次如下處理步驟(1)為每個數(shù)據(jù)包建立一個索引節(jié)點結(jié)構(gòu),結(jié)構(gòu)包括三項該包的套接字緩沖區(qū)指針、該包的序號、指向下一個數(shù)據(jù)包索引節(jié)點結(jié)構(gòu)的指針,為一條連接的第一個數(shù)據(jù)包建立索引節(jié)點頭結(jié)構(gòu),作為該條TCP連接的標(biāo)志,該結(jié)構(gòu)包括該包的套接字緩沖區(qū)指針、該包的序號、源IP地址,目的IP地址,源端口,目的端口、指向下一個數(shù)據(jù)包索引節(jié)點結(jié)構(gòu)的指針,再構(gòu)造一個數(shù)據(jù)包索引數(shù)組,數(shù)組中每一項存儲一個指向索引節(jié)點頭結(jié)構(gòu)的指針,這樣所有數(shù)據(jù)包的索引由一個二維鏈表來維護,橫向存儲同一個TCP連接的數(shù)據(jù)包索引,縱向存儲不同連接的數(shù)據(jù)包索引,設(shè)定所屬數(shù)據(jù)包索引數(shù)組每一項初始化為0,把數(shù)據(jù)包索引插入二維鏈表中;處理步驟(2)當(dāng)TCP數(shù)據(jù)包到來時,判斷數(shù)據(jù)包的數(shù)據(jù)長度是否為0,若為0,檢查數(shù)據(jù)包的Fin標(biāo)志位是否為1,F(xiàn)in標(biāo)志位是TCP連接結(jié)束標(biāo)志,若不為1,就將該包轉(zhuǎn)發(fā);若為1,則表明該數(shù)據(jù)包所屬TCP連接已經(jīng)結(jié)束,對該連接進行內(nèi)容還原;若數(shù)據(jù)包的數(shù)據(jù)長度不為0,則需要將該數(shù)據(jù)包的索引節(jié)點插入二維鏈表中;處理步驟(3)判斷數(shù)據(jù)包索引數(shù)組第一個元素是否為0,如果為0,則為該數(shù)據(jù)包創(chuàng)建索引節(jié)點頭結(jié)構(gòu),作為第一條連接的第一個數(shù)據(jù)包插入二維鏈表;如果不為0,判斷該數(shù)據(jù)包是否屬于該連接,根據(jù)源IP地址,目的IP地址,源端口,目的端口這四項唯一確定一條連接,如果不屬于該連接,則依次和數(shù)組其他元素比較,直到找到所屬連接或找到一項數(shù)組元素為空,如果數(shù)組元素為空,則為該數(shù)據(jù)包創(chuàng)建索引節(jié)點頭結(jié)構(gòu),作為新的一條連接的第一個數(shù)據(jù)包插入二維鏈表,如果找到了所屬連接,判斷是否為第一個數(shù)據(jù)包,如果是,創(chuàng)建索引節(jié)點頭結(jié)構(gòu),插入該連接第一個位置;如果不是,創(chuàng)建索引節(jié)點結(jié)構(gòu)按TCP序號插入正確位置,并保存該連接的頭指針,最后判斷該數(shù)據(jù)包Fin標(biāo)志位是否為1,如果不為1,利用網(wǎng)絡(luò)過濾器Netfilter框架標(biāo)準(zhǔn)返回值NF_STOLEN,告訴操作系統(tǒng)協(xié)議棧不再對該數(shù)據(jù)包進行處理;如果為1,對該數(shù)據(jù)包所屬連接進行內(nèi)容還原;處理步驟(4)判斷是否已經(jīng)得到待內(nèi)容還原連接的頭指針,如果沒有,在數(shù)組中找到該連接;如果已經(jīng)得到,就依次取出該連接每個數(shù)據(jù)包的應(yīng)用層數(shù)據(jù),放入共享緩沖區(qū)中;內(nèi)容分析過濾模塊,管理員指定關(guān)鍵詞,及每個關(guān)鍵詞的權(quán)重,并設(shè)定所有連接共同服從的最大權(quán)重,在收到數(shù)據(jù)包處理模塊發(fā)來的內(nèi)容分析請求后,從所述共享緩沖區(qū)中,讀出該條連接的應(yīng)用層數(shù)據(jù),通過QS-DFSA算法,即反向有限自動機計算步長字符串匹配算法統(tǒng)計每個設(shè)定關(guān)鍵詞的出現(xiàn)次數(shù),計算每個關(guān)鍵詞權(quán)重和出現(xiàn)次數(shù)的乘積,再相加求和,得到該連接的權(quán)重,再將該連接的權(quán)重與管理員設(shè)定的所有連接共同服從的過濾最大權(quán)重相比較,超過最大權(quán)重就認為不合法,否則就是合法;步驟2,依次按以下步驟進行數(shù)據(jù)包內(nèi)容過濾步驟2.1數(shù)據(jù)包捕獲模塊在收到網(wǎng)絡(luò)發(fā)來的TCP數(shù)據(jù)包以后,根據(jù)源IP地址,目的IP地址,源端口,目的端口,協(xié)議類型,對于需要轉(zhuǎn)發(fā)的數(shù)據(jù)包,則發(fā)送到數(shù)據(jù)包轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā);對需要進行內(nèi)容過濾的數(shù)據(jù)包,發(fā)送到數(shù)據(jù)包處理模塊處理;步驟2.2數(shù)據(jù)包處理模塊在收到需要進行內(nèi)容過濾的TCP數(shù)據(jù)包后,按所述數(shù)據(jù)包處理步驟進行處理,當(dāng)一條連接結(jié)束后就還原出該條連接的數(shù)據(jù),放入共享緩沖區(qū)中,并通知內(nèi)容分析模塊去共享緩沖區(qū)讀數(shù)據(jù);步驟2.3內(nèi)容分析模塊在收到數(shù)據(jù)包處理模塊通知后,從共享緩沖區(qū)中讀數(shù)據(jù)進行分析,并將結(jié)果返回給數(shù)據(jù)包處理模塊;步驟2.4數(shù)據(jù)包處理模塊阻斷非法連接;對于合法連接交給數(shù)據(jù)包轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā)。
所述數(shù)據(jù)包處理模塊通過用戶空間和內(nèi)核空間共享內(nèi)存的方法,將經(jīng)過TCP會話還原得到的原始內(nèi)容傳遞給用戶態(tài)的內(nèi)容過濾模塊。
所述數(shù)據(jù)包處理模塊,在進行TCP會話還原時,將該連接中含有數(shù)據(jù)的數(shù)據(jù)包按TCP序號依次緩存在網(wǎng)關(guān)中,并代替接收端發(fā)送確認包給發(fā)送端。
當(dāng)所述數(shù)據(jù)轉(zhuǎn)發(fā)模塊按TCP序號依次轉(zhuǎn)發(fā)數(shù)據(jù)包時,同時代替發(fā)送端接收確認包。
應(yīng)用層代理,是在用戶空間進行的過濾。數(shù)據(jù)包被網(wǎng)卡捕獲后,要流過操作系統(tǒng)網(wǎng)絡(luò)協(xié)議棧中的每一層,最后到達應(yīng)用層在進行過濾。還有一些用戶空間常用的數(shù)據(jù)包捕獲技術(shù),他們是從數(shù)據(jù)鏈路層直接捕獲的數(shù)據(jù)包例如利用SOCKET原始套接字,Libpcap等,但是都是采用系統(tǒng)調(diào)用的方式來實現(xiàn)的。數(shù)據(jù)包在從內(nèi)核態(tài)向用戶態(tài)傳送的時候,是用單個報文驅(qū)動機制,即應(yīng)用層每進行一次系統(tǒng)調(diào)用,只從內(nèi)核讀出一個數(shù)據(jù)包。這種方法與操作系統(tǒng)內(nèi)核分離,存在很大弊端。系統(tǒng)調(diào)用是非常消耗系統(tǒng)資源的,每次系統(tǒng)調(diào)用都會帶來一次上下文切換,對Cache的命中率有很大影響。隨著網(wǎng)絡(luò)流量的增大,網(wǎng)絡(luò)中數(shù)據(jù)包的增加,系統(tǒng)調(diào)用就會很頻繁,嚴(yán)重影響系統(tǒng)性能。再加上每捕獲一個數(shù)據(jù)包都要有一次從內(nèi)核態(tài)到用戶態(tài)的內(nèi)存拷貝,使得網(wǎng)絡(luò)數(shù)據(jù)采集成為整個內(nèi)容過濾系統(tǒng)的瓶頸。
通過比較可以發(fā)現(xiàn),本發(fā)明的方案與技術(shù)具有以下特點透明的工作方式,使網(wǎng)絡(luò)更容易維護,是防火墻不容易被攻擊。
優(yōu)化網(wǎng)絡(luò)路徑。在內(nèi)核空間進行包過濾就沒有必要遍歷整個網(wǎng)絡(luò)協(xié)議棧,Netfilter是在網(wǎng)絡(luò)層捕獲的數(shù)據(jù)包,在這里就可以決定數(shù)據(jù)包的命運,一些數(shù)據(jù)包就沒有必要在流向上層。
減少用戶空間與內(nèi)核空間的切換。例如SOCKET原始套接字,從數(shù)據(jù)鏈路層捕獲了所有數(shù)據(jù)包,將他們都送到用戶空間進行判斷。而在內(nèi)核空間進行的過濾,是在內(nèi)核態(tài)下過濾,僅僅向用戶空間傳送用戶想要得到的數(shù)據(jù)。
對TCP會話進行還原,避免逐包過濾方式中因為會話信息不完整而大大降低的過濾的準(zhǔn)確性。
會話還原時,系統(tǒng)代理接收,發(fā)送確認,解決了緩存數(shù)據(jù)對通信的影響,維護了透明性。
利用緩沖機制進一步減少用戶空間與內(nèi)核空間的切換。在內(nèi)核態(tài)下開辟緩沖區(qū),批量的向用戶空間傳送數(shù)據(jù)。
利用共享內(nèi)存技術(shù),減少數(shù)據(jù)拷貝與空間切換。
圖1是本發(fā)明一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)的網(wǎng)絡(luò)接入圖;圖2是本發(fā)明一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)的總體框架;圖3是本發(fā)明中TCP會話還原使用的數(shù)據(jù)結(jié)構(gòu);圖4是本發(fā)明中數(shù)據(jù)處理流程圖;
圖5是內(nèi)容分析模塊工作流程圖;圖6是本發(fā)明一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)的工作流程圖。
具體實施例方式
下面結(jié)合附圖對本發(fā)明做進一步的詳細描述。
本發(fā)明,一種基于網(wǎng)絡(luò)過濾器框架的內(nèi)容過濾網(wǎng)關(guān),目的是要在網(wǎng)絡(luò)邊界實現(xiàn)實時的內(nèi)容過濾,在網(wǎng)絡(luò)層過濾應(yīng)用層信息。本發(fā)明的核心是如圖1,所訴網(wǎng)關(guān)(2),安裝雙網(wǎng)卡,兩塊網(wǎng)卡都設(shè)置為混雜模式,使用brctl配置兩塊網(wǎng)卡為網(wǎng)橋。網(wǎng)關(guān)一塊網(wǎng)卡連接路由器(1),這是網(wǎng)絡(luò)通向internet的唯一出口;另一塊網(wǎng)卡連接交換機(3),這樣系統(tǒng)就以透明的方式串在網(wǎng)絡(luò)中進行過濾。這樣網(wǎng)絡(luò)結(jié)構(gòu)和網(wǎng)絡(luò)上的設(shè)備不需要進行任何改動,便可以把內(nèi)容過濾系統(tǒng)接入網(wǎng)絡(luò)中;當(dāng)內(nèi)容過濾系統(tǒng)出現(xiàn)故障,也可以直接從網(wǎng)絡(luò)中移出,進行處理,不影響網(wǎng)絡(luò)正常工作。本發(fā)明核心還包括對TCP連接進行會話還原,通過共享內(nèi)存將還原出的原始數(shù)據(jù)從內(nèi)核空間交給用戶空間。
如圖2,所述網(wǎng)關(guān)中數(shù)據(jù)包捕獲模塊,數(shù)據(jù)包處理模塊,數(shù)據(jù)包轉(zhuǎn)發(fā)模塊,工作在內(nèi)核態(tài);內(nèi)容過濾模塊和用戶管理單元工作在用戶態(tài)。圖中括號中的數(shù)字表示按照時間先后的執(zhí)行順序。
基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)透明的串聯(lián)在網(wǎng)絡(luò)的出口上,像一根導(dǎo)線一樣過濾所有流過他的數(shù)據(jù)。所以數(shù)據(jù)包捕獲模塊,在網(wǎng)絡(luò)過濾器Netfilter框架的5個hook點中,僅僅選擇第一個hook點,也就是在NF_IP_PRE_ROUTING,注冊過濾函數(shù),過濾所有流入的數(shù)據(jù)包。根據(jù)用戶指定的源端口號,目的端口號,源IP地址,目的IP地址,協(xié)議類型信息,對不需要進行內(nèi)容過濾的數(shù)據(jù)包直接進行轉(zhuǎn)發(fā),需要的就將該數(shù)據(jù)包的sk_buff描述符指針和TCP頭指針傳遞給處理函數(shù)。
在數(shù)據(jù)包處理模塊中進行TCP會話還原。對于要進行內(nèi)容分析的數(shù)據(jù)包,緩存在網(wǎng)關(guān)中,采用二維鏈表數(shù)據(jù)結(jié)構(gòu)來保存,橫向保存同一個連接的數(shù)據(jù)包,縱向保存不同連接。根據(jù)源IP地址,目的IP地址,源端口號,目的端口號這四個標(biāo)志唯一確定一條連接。數(shù)據(jù)結(jié)構(gòu)如圖3。套接字緩沖區(qū)不提倡復(fù)制,僅僅在內(nèi)核中傳遞控制權(quán)。所以對緩沖的數(shù)據(jù)包,在處理里的時候也不進行復(fù)制,為每一個數(shù)據(jù)包創(chuàng)建一個索引節(jié)點結(jié)構(gòu),指向它的緩沖區(qū)。在對索引節(jié)點進行處理。另外定義一個索引節(jié)點頭,指向每個會話的第一個數(shù)據(jù)包的索引節(jié)點結(jié)構(gòu)。
數(shù)據(jù)包的處理流程如圖4。例如數(shù)據(jù)包的主要結(jié)構(gòu)如下源IP地址172.21.15.231源端口號9817目的IP地址202.112.78.101目的端口號80序號2901378913Syn標(biāo)志為0Fin標(biāo)志為1IP首部長度5TCP首部長度5當(dāng)數(shù)據(jù)包到來時,首先緩存TCP包。然后判斷數(shù)據(jù)包是否包含數(shù)據(jù),sk_buff中l(wèi)en字段減去IP頭長和TCP頭長,即len-4*5-4*5就是應(yīng)用層數(shù)據(jù)長度,如果為零就代表無數(shù)據(jù)。如果有那么就要將數(shù)據(jù)包緩存,將它的索引節(jié)點插入鏈表。如果沒有,不進行緩存。不管是否有數(shù)據(jù)都要檢查FIN標(biāo)志位,F(xiàn)IN標(biāo)志位為1,代表連接結(jié)束,進行數(shù)據(jù)還原。沒有檢查SYN標(biāo)志位,三次握手過程中的連接包和確認包都不包含數(shù)據(jù),也就是應(yīng)用層長度為0,都已經(jīng)被轉(zhuǎn)發(fā)。
同一時刻緩存的數(shù)據(jù)包是屬于多條連接,必須區(qū)別對待。每條連接結(jié)束時,釋放該條連接的空間。
首先判斷指針數(shù)組是否為空,如果為空就將這個節(jié)點作為第一個連接的頭節(jié)點。如果指針數(shù)組不為空,就要和頭節(jié)點比較源端口號,目的端口號,源IP地址,目的IP地址是否和該包相同,來判斷是否是同一條連接。如果是,首先和頭節(jié)點比較序號,如果是在頭節(jié)點序號小于2901378913,那么這個數(shù)據(jù)包就是新的頭節(jié)點,如果大于的話,就將它按序號插入有序鏈表中。如果不是同一連接就依次向下比較,直到找到,或者發(fā)現(xiàn)下一個位子為空,就將它作為頭節(jié)點重新建立一條連接。完成插入索引節(jié)點退出時,記住這條連接的頭節(jié)點。
該包FIN標(biāo)志位為1,證明會話內(nèi)容已經(jīng)傳送完畢。這時依次取出所有緩存的數(shù)據(jù)包的數(shù)據(jù)內(nèi)容,將其拷貝到共享內(nèi)存區(qū),sk_buff結(jié)構(gòu)仍然保留,等待用戶空間的判斷結(jié)果,合法的轉(zhuǎn)發(fā),非法的丟棄。
由于這個帶有FIN標(biāo)志位的數(shù)據(jù)包是剛進行插入隊列的,將頭指針返回,假設(shè)保存在P中,那么便可以直接進行還原。如果沒有,必須依次和每個連接的頭節(jié)點比較,確定連接后進行還原。最后通知協(xié)議棧,忘記這些數(shù)據(jù)包。
如圖5,內(nèi)容分析模塊管理員指定關(guān)鍵詞,及每個關(guān)鍵詞權(quán)重,并設(shè)置最大權(quán)重。在收到數(shù)據(jù)包處理模塊發(fā)來的內(nèi)容分析請求后,從共享緩沖區(qū)中,讀出該條連接的應(yīng)用層數(shù)據(jù)。通過多關(guān)鍵詞匹配算法統(tǒng)計每個設(shè)定關(guān)鍵詞的出現(xiàn)頻率,計算關(guān)鍵詞權(quán)重頻率的乘積加和,將權(quán)重與管理員設(shè)定的過濾最大權(quán)重相比較,比如關(guān)鍵詞集合為{臺獨,伊拉克戰(zhàn)爭},如果管理員希望過濾國內(nèi)的政治性問題時,應(yīng)該為“臺獨”賦予更大的權(quán)重,“臺獨”設(shè)定權(quán)重為5,“伊拉克戰(zhàn)爭”設(shè)定權(quán)重為1。出現(xiàn)一次“臺獨”關(guān)鍵詞,整個內(nèi)容的權(quán)重增加5,“伊拉克戰(zhàn)爭”出現(xiàn)一次,整個內(nèi)容權(quán)重增加1。假設(shè)內(nèi)容權(quán)重超過了最大權(quán)重15,則該連接非法。
所有需要進行內(nèi)容分析的數(shù)據(jù)包,在沒有確定是否合法的時候都必須保留在內(nèi)容過濾防火墻中。對于一條TCP連接,當(dāng)服務(wù)器發(fā)送一個數(shù)據(jù)包給客戶端,客戶端收到后要發(fā)送一個確認包給服務(wù)器,如果服務(wù)器沒有收到這個確認包,那么服務(wù)器要重傳這個包。當(dāng)客戶端向服務(wù)器端發(fā)送數(shù)據(jù)的時候也是如此。如果我們捕獲了一條連接中的一個數(shù)據(jù)包,接收端沒有收到,也不會確認,當(dāng)超時之后發(fā)送端就要重傳,長時間如此,連接就會斷掉,這樣就破壞了透明性。為了不影響正常的網(wǎng)絡(luò)通信。如圖6,網(wǎng)關(guān)代替接收端發(fā)送確認,這樣,發(fā)送端就會繼續(xù)發(fā)送下一個包,當(dāng)收到足夠進行內(nèi)容過濾的數(shù)據(jù)時,將數(shù)據(jù)交給過濾算法分析,證實合法的數(shù)據(jù)包,在一次發(fā)送給接收端,同時阻斷接收端的確認包,因為發(fā)送端已經(jīng)收到過了。當(dāng)我們進行分析的時候,這條連接是仍然保持著的,因為TCP的保活計時器的默認時間是足夠長的。
選擇共享內(nèi)存方式實現(xiàn)用戶空間和內(nèi)核空間的數(shù)據(jù)交互。選擇send_sign(pid,sig)例程,內(nèi)核知道用戶進程的進程號,就可以由內(nèi)核發(fā)送信號通知內(nèi)容分析模塊數(shù)據(jù)已經(jīng)在共享的內(nèi)存中。內(nèi)存映射的過程是在內(nèi)核態(tài)下申請一個內(nèi)核緩存,通過proc文件系統(tǒng)將該緩存的地址傳給用戶進程;用戶進程通過讀proc文件系統(tǒng)取得緩存地址,利用mmap對該緩存進行地址映射,從而可以從其中讀取數(shù)據(jù)。
總之,一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,以透明的方式在網(wǎng)絡(luò)出口實現(xiàn)了對會話內(nèi)容的實時過濾與監(jiān)控,在網(wǎng)絡(luò)層過濾應(yīng)用層信息,對非法的數(shù)據(jù)包和連接馬上進行阻斷。對會話的還原提高了內(nèi)容過濾的準(zhǔn)確性。利用網(wǎng)絡(luò)過濾器Netfilter框架,結(jié)合內(nèi)存映射的數(shù)據(jù)采集技術(shù),不但避免了系統(tǒng)調(diào)用,減少了用戶態(tài)和核心態(tài)之間的切換,而且用戶態(tài)程序直接對共享內(nèi)存操作,減少了數(shù)據(jù)在內(nèi)核空間和用戶空間的拷貝次數(shù),使性能得到顯著提高。透明的工作方式也強有力的避免了惡意攻擊。
權(quán)利要求
1.一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,其特征在于,該方法用一個內(nèi)容過濾網(wǎng)關(guān)透明的串聯(lián)在網(wǎng)絡(luò)邊界,以無IP方式,在網(wǎng)絡(luò)層來過濾所有出入局域網(wǎng)的數(shù)據(jù),所述內(nèi)容過濾網(wǎng)關(guān)運行Linux kernel 2.4操作系統(tǒng),安裝雙網(wǎng)卡,每塊網(wǎng)卡都設(shè)置為混雜模式,使用brctl配置兩塊網(wǎng)卡為網(wǎng)橋來實現(xiàn)透明串聯(lián)在網(wǎng)絡(luò)邊界上,所述內(nèi)容過濾網(wǎng)關(guān)依次按以下步驟來實現(xiàn)內(nèi)容過濾步驟1,初始化在所述內(nèi)容過濾網(wǎng)關(guān)中設(shè)有數(shù)據(jù)包捕獲模塊,數(shù)據(jù)包處理模塊,以及數(shù)據(jù)包轉(zhuǎn)發(fā)模塊,這些模塊工作在Linux系統(tǒng)的內(nèi)核態(tài),還設(shè)有內(nèi)容分析模塊,工作在用戶態(tài);在所述這些模塊中數(shù)據(jù)包捕獲模塊,注冊了設(shè)定的過濾函數(shù),對于那些需要轉(zhuǎn)發(fā)的數(shù)據(jù)包,送往數(shù)據(jù)包轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā),對于需要進行內(nèi)容過濾的數(shù)據(jù)包,則送往數(shù)據(jù)包處理模塊;數(shù)據(jù)包處理模塊,對數(shù)據(jù)包捕獲模塊發(fā)來的需要進行內(nèi)容分析的TCP數(shù)據(jù)包,首先按序號順序在緩沖區(qū)中緩存,當(dāng)捕獲到一條連接的所有數(shù)據(jù)包時,還原出該連接的應(yīng)用層數(shù)據(jù)內(nèi)容,交給工作在用戶態(tài)的內(nèi)容分析模塊進行分析,合法就交給數(shù)據(jù)包轉(zhuǎn)發(fā)模塊依次轉(zhuǎn)發(fā)該連接的所有數(shù)據(jù)包,不合法就阻斷該連接,其處理步驟依次如下處理步驟(1)為每個數(shù)據(jù)包建立一個索引節(jié)點結(jié)構(gòu),結(jié)構(gòu)包括三項該包的套接字緩沖區(qū)指針、該包的序號、指向下一個數(shù)據(jù)包索引節(jié)點結(jié)構(gòu)的指針,為一條連接的第一個數(shù)據(jù)包建立索引節(jié)點頭結(jié)構(gòu),作為該條TCP連接的標(biāo)志,該結(jié)構(gòu)包括該包的套接字緩沖區(qū)指針、該包的序號、源IP地址,目的IP地址,源端口,目的端口、指向下一個數(shù)據(jù)包索引節(jié)點結(jié)構(gòu)的指針,再構(gòu)造一個數(shù)據(jù)包索引數(shù)組,數(shù)組中每一項存儲一個指向索引節(jié)點頭結(jié)構(gòu)的指針,這樣所有數(shù)據(jù)包的索引由一個二維鏈表來維護,橫向存儲同一個TCP連接的數(shù)據(jù)包索引,縱向存儲不同連接的數(shù)據(jù)包索引,設(shè)定所屬數(shù)據(jù)包索引數(shù)組每一項初始化為0,把數(shù)據(jù)包索引插入二維鏈表中;處理步驟(2)當(dāng)TCP數(shù)據(jù)包到來時,判斷數(shù)據(jù)包的數(shù)據(jù)長度是否為0,若為0,檢查數(shù)據(jù)包的Fin標(biāo)志位是否為1,F(xiàn)in標(biāo)志位是TCP連接結(jié)束標(biāo)志,若不為1,就將該包轉(zhuǎn)發(fā);若為1,則表明該數(shù)據(jù)包所屬TCP連接已經(jīng)結(jié)束,對該連接進行內(nèi)容還原;若數(shù)據(jù)包的數(shù)據(jù)長度不為0,則需要將該數(shù)據(jù)包的索引節(jié)點插入二維鏈表中;處理步驟(3)判斷數(shù)據(jù)包索引數(shù)組第一個元素是否為0,如果為0,則為該數(shù)據(jù)包創(chuàng)建索引節(jié)點頭結(jié)構(gòu),作為第一條連接的第一個數(shù)據(jù)包插入二維鏈表;如果不為0,判斷該數(shù)據(jù)包是否屬于該連接,根據(jù)源IP地址,目的IP地址,源端口,目的端口這四項唯一確定一條連接,如果不屬于該連接,則依次和數(shù)組其他元素比較,直到找到所屬連接或找到一項數(shù)組元素為空,如果數(shù)組元素為空,則為該數(shù)據(jù)包創(chuàng)建索引節(jié)點頭結(jié)構(gòu),作為新的一條連接的第一個數(shù)據(jù)包插入二維鏈表,如果找到了所屬連接,判斷是否為第一個數(shù)據(jù)包,如果是,創(chuàng)建索引節(jié)點頭結(jié)構(gòu),插入該連接第一個位置;如果不是,創(chuàng)建索引節(jié)點結(jié)構(gòu)按TCP序號插入正確位置,并保存該連接的頭指針,最后判斷該數(shù)據(jù)包Fin標(biāo)志位是否為1,如果不為1,利用網(wǎng)絡(luò)過濾器Netfilter框架標(biāo)準(zhǔn)返回值NF_STOLEN,告訴操作系統(tǒng)協(xié)議棧不再對該數(shù)據(jù)包進行處理;如果為1,對該數(shù)據(jù)包所屬連接進行內(nèi)容還原;處理步驟(4)判斷是否已經(jīng)得到待內(nèi)容還原連接的頭指針,如果沒有,在數(shù)組中找到該連接;如果已經(jīng)得到,就依次取出該連接每個數(shù)據(jù)包的應(yīng)用層數(shù)據(jù),放入共享緩沖區(qū)中;內(nèi)容分析過濾模塊,管理員指定關(guān)鍵詞,及每個關(guān)鍵詞的權(quán)重,并設(shè)定所有連接共同服從的最大權(quán)重,在收到數(shù)據(jù)包處理模塊發(fā)來的內(nèi)容分析請求后,從所述共享緩沖區(qū)中,讀出該條連接的應(yīng)用層數(shù)據(jù),通過QS-DFSA算法,即反向有限自動機計算步長字符串匹配算法統(tǒng)計每個設(shè)定關(guān)鍵詞的出現(xiàn)次數(shù),計算每個關(guān)鍵詞權(quán)重和出現(xiàn)次數(shù)的乘積,再相加求和,得到該連接的權(quán)重,再將該連接的權(quán)重與管理員設(shè)定的所有連接共同服從的過濾最大權(quán)重相比較,超過最大權(quán)重就認為不合法,否則就是合法;步驟2,依次按以下步驟進行數(shù)據(jù)包內(nèi)容過濾步驟2.1數(shù)據(jù)包捕獲模塊在收到網(wǎng)絡(luò)發(fā)來的TCP數(shù)據(jù)包以后,根據(jù)源IP地址,目的IP地址,源端口,目的端口,協(xié)議類型,對于需要轉(zhuǎn)發(fā)的數(shù)據(jù)包,則發(fā)送到數(shù)據(jù)包轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā);對需要進行內(nèi)容過濾的數(shù)據(jù)包,發(fā)送到數(shù)據(jù)包處理模塊處理;步驟2.2數(shù)據(jù)包處理模塊在收到需要進行內(nèi)容過濾的TCP數(shù)據(jù)包后,按所述數(shù)據(jù)包處理步驟進行處理,當(dāng)一條連接結(jié)束后就還原出該條連接的數(shù)據(jù),放入共享緩沖區(qū)中,并通知內(nèi)容分析模塊去共享緩沖區(qū)讀數(shù)據(jù);步驟2.3內(nèi)容分析模塊在收到數(shù)據(jù)包處理模塊通知后,從共享緩沖區(qū)中讀數(shù)據(jù)進行分析,并將結(jié)果返回給數(shù)據(jù)包處理模塊;步驟2.4數(shù)據(jù)包處理模塊阻斷非法連接;對于合法連接交給數(shù)據(jù)包轉(zhuǎn)發(fā)模塊轉(zhuǎn)發(fā)。
2.根據(jù)權(quán)利要求1所述的一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,其特征在于,所述數(shù)據(jù)包處理模塊通過用戶空間和內(nèi)核空間共享內(nèi)存的方法,將經(jīng)過TCP會話還原得到的原始內(nèi)容傳遞給用戶態(tài)的內(nèi)容過濾模塊。
3.根據(jù)權(quán)利要求1所述的一種基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,其特征在于,所述數(shù)據(jù)包處理模塊,在進行TCP會話還原時,將該連接中含有數(shù)據(jù)的數(shù)據(jù)包按TCP序號依次緩存在網(wǎng)關(guān)中,并代替接收端發(fā)送確認包給發(fā)送端;當(dāng)所述數(shù)據(jù)包轉(zhuǎn)發(fā)模塊按TCP序號依次轉(zhuǎn)發(fā)數(shù)據(jù)包時,同時代替發(fā)送端接收確認包。
全文摘要
基于網(wǎng)絡(luò)過濾器的內(nèi)容過濾網(wǎng)關(guān)實現(xiàn)方法,屬于網(wǎng)絡(luò)通信安全技術(shù)領(lǐng)域,其特征在于,基于Linux系統(tǒng)平臺,實現(xiàn)了網(wǎng)絡(luò)內(nèi)容分析與實時監(jiān)控。實現(xiàn)了在網(wǎng)絡(luò)層過濾應(yīng)用層信息的目的,利用網(wǎng)絡(luò)過濾器Netfilter框架,在內(nèi)核態(tài)下進行數(shù)據(jù)包采集與過濾,優(yōu)化了數(shù)據(jù)包網(wǎng)絡(luò)路徑,提高了數(shù)據(jù)采集效率。對TCP連接進行會話還原,并且利用用戶空間與內(nèi)核空間共享內(nèi)存技術(shù),將會話內(nèi)容從內(nèi)核態(tài)交給用戶態(tài)的內(nèi)容過濾模塊。避免了系統(tǒng)調(diào)用帶來的開銷,減少了數(shù)據(jù)的拷貝次數(shù)。對經(jīng)過判斷后合法的數(shù)據(jù)包進行轉(zhuǎn)發(fā),非法的阻斷。網(wǎng)關(guān)以透明的方式工作,網(wǎng)關(guān)做了必要的處理,不會因為緩存數(shù)據(jù)而失去透明性。該網(wǎng)關(guān)能有效的完成網(wǎng)絡(luò)內(nèi)容分析與實時監(jiān)控。
文檔編號H04L12/56GK101068229SQ20071010033
公開日2007年11月7日 申請日期2007年6月8日 優(yōu)先權(quán)日2007年6月8日
發(fā)明者張建標(biāo), 孫鴻斌, 艾蓉, 張正國 申請人:北京工業(yè)大學(xué)