譚 寧
[摘要]選擇把內(nèi)核級的NDIS中間層過濾和用戶級SPI接口包過濾結(jié)和形成混合式過濾系統(tǒng),在實現(xiàn)對TCP、UDP、ICMP等多種網(wǎng)絡(luò)協(xié)議進行過濾的同時,也實現(xiàn)報文內(nèi)容過濾,且兼顧功能和效率,并對用戶層進行設(shè)計。
[關(guān)鍵詞]混合式 過濾系統(tǒng) 工作原理 用戶層
中圖分類號:TP3文獻標(biāo)識碼:A文章編號:1671-7597(2009)0510048-01
Windows下的個人防火墻都是基于對數(shù)據(jù)報的攔截技術(shù)之上??偟膩碚f可分為用戶級和內(nèi)核級數(shù)據(jù)報攔截兩類。其中內(nèi)核級主要是TDI過濾驅(qū)動程序,NDIS中間層過濾驅(qū)動程序,NDIS過濾鉤子驅(qū)動程序等,它們都是利用網(wǎng)絡(luò)驅(qū)動來實現(xiàn)的;而用戶級的過濾包括SPI接口,Windows2000包過濾接口等。本文選擇了把內(nèi)核級的NDIS中間層過濾和用戶級SPI接口包過濾結(jié)和形成混合式過濾系統(tǒng),在實現(xiàn)對TCP、UDP、ICMP等多種網(wǎng)絡(luò)協(xié)議進行過濾的同時,也實現(xiàn)報文內(nèi)容過濾,且兼顧了功能和效率。
一、混合式防火墻工作原理
根據(jù)網(wǎng)絡(luò)的分層,系統(tǒng)的設(shè)計可以按照不同的層次來進行設(shè)計。由于在SPI層不能過濾所有的數(shù)據(jù)包,只能過濾通過Socket進行網(wǎng)絡(luò)通信的數(shù)據(jù)包,比如ICMP這種沒有端口的包,它只到了網(wǎng)絡(luò)層,并沒有到傳輸層,就沒有辦法在SPI層過濾。而所有的數(shù)據(jù)通信都必須經(jīng)過NDIS層,所以NDIS層防火墻系統(tǒng)可以捕獲所有的數(shù)據(jù)包。SPI層過濾數(shù)據(jù)包有以下幾個優(yōu)點:
1.跨平臺,不用進行代碼的修改;
2.效率高,由于工作在應(yīng)用層,所以CPU占用率低;
3.實現(xiàn)起來方便。
數(shù)據(jù)包的傳送可以通過兩種方式:一種是流經(jīng)SPI層的,比如TCP包,UDP包等;數(shù)據(jù)流出的順序是,經(jīng)過SPI,然后通過傳輸層,網(wǎng)絡(luò)層達到物理層;還有一種是直接通過NDIS進行通信的,數(shù)據(jù)將只達到網(wǎng)絡(luò)層而不經(jīng)過傳輸層,比如ICMP包。
首先是當(dāng)應(yīng)用程序發(fā)起一個Socket連接請求時,網(wǎng)絡(luò)數(shù)據(jù)包將流經(jīng)傳輸層,網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層的情況。
二、用戶層SPI設(shè)計
本層設(shè)計的目的主要是用來過濾通過Socket發(fā)送與接收的數(shù)據(jù)包,并提供與應(yīng)用程序的接口。
SPI層一共分為三個模塊,與應(yīng)用程序的接口,與NDIS的接口和fiiter模塊,其中filter模塊是SPI層的核心模塊,也是本系統(tǒng)的核心模塊,用來完成SPI層的主要功能,過濾Socket數(shù)據(jù)包。前后兩個接口是用來保證數(shù)據(jù)包流程的通暢。
(一)與應(yīng)用程序接口
當(dāng)應(yīng)用程序發(fā)送了一個流經(jīng)SPI層的數(shù)據(jù)包時,與應(yīng)用程序的接口將獲取這個數(shù)據(jù)包并將其傳送給filter模塊。這個接口主要的功能是實現(xiàn)控管規(guī)則數(shù)據(jù)和封包數(shù)據(jù)的共享。
應(yīng)用程序與SPI過濾層主要通過三個模塊進行交互??毓芤?guī)則處理模塊是用來對控管規(guī)則進行添加或者刪除的模塊。在這里用戶通過對控管規(guī)則的操作可以很容易添加或者實現(xiàn)一個過濾。封包緩沖區(qū)處理模塊主要的功能是應(yīng)用程序從與應(yīng)用程序接口的地方得到封包緩沖區(qū)的消息。應(yīng)用程序可以從這里知道數(shù)據(jù)封包在內(nèi)存中的位置。工作模式是用戶用來通知SPI層是放行所有,拒絕所有或者是過濾。
(二)filter模塊
filter模塊是本系統(tǒng)的核心模塊,它是一個驅(qū)動過濾模塊,只有在需要的時候才被加載。filter模塊是放在傳輸層的上面,不論數(shù)據(jù)流入還是流出都需要首先經(jīng)過filter模塊的過濾。filter模塊是在傳輸層完成了封包處理之后來進行過濾的,其實不管filter模塊是放在傳輸層之上還是之下,都不會對系統(tǒng)的效率產(chǎn)生影響,放在傳輸層之上的話,那么filter模塊將在傳輸層解包之后,進行過濾,這樣比filter模塊放在傳輸層之下要慢一些。但是對于流出的數(shù)據(jù)包,filter模塊將比放在傳輸層下面要快一些,而且filter模塊對應(yīng)用程序的接口也要求系統(tǒng)設(shè)計的時候把filter過濾模塊放在傳輸層之上。
根據(jù)filter模塊完成的功能,可以對其進行模塊劃分和設(shè)計。為了提高數(shù)據(jù)包的處理速度,并降低系統(tǒng)資源的占用,只有當(dāng)發(fā)生Socket連接的時候才會把filter模塊放到數(shù)據(jù)流的鏈條當(dāng)中。當(dāng)filter模塊被加載的時候,入口模塊將會被調(diào)用,它不但完成filter模塊的入口,而且完成SPI的入口。這是因為本層將采用的技術(shù)是SPIHOOK,所以需要把SPI一些重要功能進行重寫。對SPI的入口的重寫就放到入口模塊當(dāng)中。對SPI功能模塊的操作是在SPI驗證模塊中完成,而協(xié)議解析模塊將在這層對數(shù)據(jù)包進行解析,判斷屬于哪一種數(shù)據(jù)包,以便對其采取不同的處理。
根據(jù)filter模塊的劃分,對其流程進行分析將可以更好的對整個模塊進行設(shè)計,特別是接口部分的設(shè)計。只有當(dāng)通信發(fā)生Socket請求的時候,本模塊才被加載。通過入口模塊進入filter模塊的處理流程,在filter的處理流程當(dāng)中,通過一些函數(shù)的調(diào)用得到系統(tǒng)SPI服務(wù)函數(shù)的地址,然后用自己定義的SPI函數(shù)庫對其中幾個比較重要的函數(shù)進行替換,從而實現(xiàn)對Socket數(shù)據(jù)包的捕獲和過濾。如果Socket請求對服務(wù)質(zhì)量很高,也就是系統(tǒng)支持QOS,那么數(shù)據(jù)包將直接被放行,而不需要替換系統(tǒng)的SPI,也不用對數(shù)據(jù)包比對過濾,這是提高系統(tǒng)響應(yīng)速度和數(shù)據(jù)包處理速度的設(shè)計。
在filter模塊工作流程當(dāng)中,最重要的步驟就是對SPI進行操作,對SPI操作的最終目的是為了得到SPI服務(wù)函數(shù)的地址,也就是被本系統(tǒng)替換的功能的地址。其核心是得到入口地址,即系統(tǒng)默認SPI的入口模塊地址,通過它系統(tǒng)就可以獲得所需要的信息。這樣就完成了SPI層的整體設(shè)計。
三、網(wǎng)絡(luò)中間層驅(qū)動IMD設(shè)計
在NDIS層,系統(tǒng)需要對上設(shè)計兩個接口,一個是與應(yīng)用程序的接口,一個與SPI層的接口。在NDIS層里最核心的模塊是packet模塊,在packet模塊里將進行數(shù)據(jù)包NDIS層的過濾。由于本系統(tǒng)采用的是HOOK技術(shù),因此NDIS層的與底層接口在本系統(tǒng)中并不用設(shè)計,而是直接調(diào)用系統(tǒng)的底層接口模塊。
接口模塊包括兩個,一個是與SPI層的接口模塊,另一個是與應(yīng)用程序的接口模塊。根據(jù)packet實現(xiàn)的功能和整體模塊的設(shè)計。它的功能主要是用來過濾filter模塊不能過濾的數(shù)據(jù)包,比如ICMP之類的直接通過NDIS進行通信的數(shù)據(jù)包。
在獲取數(shù)據(jù)包后需要對數(shù)據(jù)包進行解析,用來判斷是不是需要在NDIS層進行處理,如果需要那么就在本層進行處理。最后需要和應(yīng)用程序打交道,需要隱藏底層的實現(xiàn)細節(jié),所以要創(chuàng)建一個上層可見的設(shè)備(與應(yīng)用程序通信使用的設(shè)備模塊)。
參考文獻:
[1]朱鵬,基于狀態(tài)包過濾的防火墻技術(shù)[J].微計算機信息,2005.3.
[2]黃力,混合型防火墻的研究與設(shè)計[J].微計算機信息,2006.9.
[3]劉四清、龔建萍,計算機網(wǎng)絡(luò)技術(shù)基礎(chǔ)教程[M].清華大學(xué)出版社,2008.
作者簡介:
譚寧,男,漢,淄博職業(yè)學(xué)院信息工程系,副教授,研究方向:計算機網(wǎng)絡(luò)。