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