[摘 要] 防火墻在網絡中占有重要的地位。用戶安全意識的提高和網絡攻擊手段的發展使得傳統的功能簡單的個人防火墻已經無法滿足現在的需求。首先,用戶對個人防火墻的功能需求增強,個人防火墻需要提供不同層次的安全保護。其次,用戶對個人防火墻效率的需求增強。在防火墻功能擴展的情況下,效率問題顯得非常突出。因此,在實際應用中個人防火墻在實現安全的基礎上,不僅要保持高效和低耗,還要實現不同層次的保護功能。在對防火墻的性能和效率進行分析和改進的基礎上,設計并實現了一個基于 Windows平臺的個人防火墻。個人防火墻在實現過程中應用了效率和性能改進的策略,取得了非常好的效果。
[關鍵詞] 網絡安全; 個人防火墻; 驅動程序; 網絡驅動接口規范; 系統服務
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2010 . 17 . 028
[中圖分類號]TP393.08 [文獻標識碼]A [文章編號]1673 - 0194(2010)17- 0068- 02
1防火墻系統的需求分析
隨著網絡的發展和普及,上網的人群越來越多,同時網絡入侵的方式種類也是越來越多,層出不窮。因此,個人用戶對本機安全的需求是非常突出和必要的,而個人防火墻作為網絡安全最基本、最經濟、最有效的手段,其地位也是非常重要的。防火墻的實現方式有硬件和軟件兩種,作為個人用戶而言,硬件防火墻固然很好,但其昂貴的價格限制了其在個人防火墻領域的應用。因此,目前而言,個人防火墻的主要實現方式還是采用軟件實現的方式。無論個人防火墻功能多么完善,性能效率多么高效,這些都不能帶給用戶直接的感受。用戶能直接感受到的就是個人防火墻的使用過程,如防火墻的安裝部署,防火墻的界面部分,或者說個人防火墻表示層能和用戶直接交互的部分。因此,個人防火墻的部署和操作的方便也是需求重點之一。
2系統性能分析
很多時候防火墻系統的執行效率并不高,導致CPU使用率高,整個計算機變慢。下面就通過分析防火墻系統來總結影響防火墻效率的一些重要因素。
防火墻的基本功能就是包過濾功能,當防火墻拿到數據包后,就會把數據包同規則表進行比較,以決定通過或者丟棄。當用戶指定了很多過濾規則的時候,防火墻通常是把數據包按一定的順序一條一條地同規則表進行比較。當規則表條目很少的時候,可能效率影響不大,但當規則表條目很多時,這樣的順序比較就會占用較多的時間。當網絡帶寬很大的情況下,如果是TCP傳輸,就會導致效率下降,如果是UDP傳輸,就會導致丟包的情況發生。
當防火墻的驅動層執行各項功能時,會不斷有數據傳遞給中間服務層,如包過濾處理結果等等;同時中間服務層也會主動通信驅動層,如修改規則表等。通常這種上層同驅動層的通信主要方式是通過IOCTOL實現的,這種方式實現起來簡單,但每次通信的時候都需要占用一定的內存資源和CPU資源。當網絡帶寬大,數據流量大的情況下,IOCTOL通信是非常繁忙的,因此如何改善驅動層同上層的通信,將直接影響防火墻的性能。
3系統性能改進方法
針對系統的性能瓶頸,本文主要采用以下方法來改進系統的性能:
3.1 優化規則表
防火墻系統對數據包實現過濾功能的核心部分就是規則表。規則表構建的好壞直接影響數據包過濾功能的性能以及效率的好壞。防火墻系統一般允許用戶自己添加防火墻規則,當用戶添加的規則很少的情況下,可能帶來的影響并不大,而在用戶添加了很多規則之后,可能在這些規則中會出現很多前后矛盾的規則,很多多余的規則,如果規則表構建得不好,還會出現規則表不完整的情況,也就是會出現數據包無法找到規則表中的規則相匹配的情況。所以創建正確的規則表是防火墻系統中一個非常重要的部分。
很多情況下防火墻的設計者只是特別重視規則表匹配的效率問題。在效率的問題上,設計有們一般分成兩個方向:一個方向是采用某種數據結構以便更快地進行規則表匹配,另一個方向是采用某種自定義的語言來實現快速匹配。但這些高效率的實現只有建立在一個完整、緊湊、和諧的規則表基礎之上才能得以實現的。
3.2 通信方式
防火墻系統主要的通信集中在驅動層和中間服務層之間,以及用戶態的進程之間的數據交互。這些通信非常繁忙。
驅動層與中間服務層的主要的通信方式有IO,事件以及共享內存。上層通過Create File打開驅動后,通過Device IO Control方式對驅動層進行讀寫操作,這是一種比較基本的簡便的通信方式。但是這種方式會占用較多的CPU資源。每次進行IO ct1通信分配緩存,都會相當消耗資源。另外一種方式是通過設置共享內存,用事件(Event)通知對方,然后另一方通過啟動一線程Wait For Single Object收到Event通知后,就到共享內存處讀取數據。這種方式明顯比上面的 IO ct1方式節省資源,可以避免性能下降。但是共享內存方式的實現比IO ct1復雜。
為了提高防火墻系統的性能和通信效率,驅動層與中間服務層主要采用緩存事件配合IO的方式,節省CPU資源,提高計算機性能。
在用戶態的進程之間的主要通信方式有消息機制、共享數據方式、內存映射文件方式等,但一切都是基于內存映射文件方式機制。通過創建文件內核對象,把文件內核對象映射到不同的進程空間,達到進程間的共享數據,保證了進程之間數據交換的效率,確保最低的系統開銷。
因此,在用戶態的進程之間的主要通信方式采用內存映射的方式,保證高效率和低系統開銷。
3.3 讀寫
因為防火墻要經常讀寫文件,比如規則表、策略表以及Log信息,因此,頻繁地打開文件、讀寫文件、關閉文件將占用大量的內存空間和CPU時間,對防火墻的效率和性能的影響很大。如果采用內存映射方式,不僅保證了進程間的數據交換的效率和性能,同時也保證了IO文件讀寫的效率。
3.4 驅動層內過濾
通常過濾的方式有兩種:在驅動層過濾和在應用層過濾。
在應用層過濾實現起來比較簡單,很多防火墻如此實現,每次驅動層拿到數據包后,通過IO或者事件的方式將數據包送到共享緩存中,然后事件通知應用層處理,應用層收到通知后,就到共享緩存處讀取數據包進行處理,然后將處理后的結果傳回共享緩沖區,同時以事件或者IO方式通知驅動層,驅動層收到通知后,讀取共享緩存區。在應用層里可應用的函數非常豐富,因此負載的實現做起來比較簡單,但這種方式要耗費很多CPU資源。
驅動層過濾就是一次性將規則表傳入驅動層,然后直接在驅動層過濾。但驅動層可以使用的函數非常少,因此不像應用層處理那么方便,但卻減少了通信,減少了每次通信帶來的系統開銷。
因為規則表并不需要很復雜的處理,所以我們采用驅動層過濾的方式,降低通信開銷。
4結論
隨著網絡的發展,個人防火墻越來越受到重視,地位也越來越重要,用戶對個人防火墻的要求也越來越高,因此個人防火墻要在豐富的功能實現基礎上兼具良好的性能和效率。
本文首先對現在的網絡體系結構和Windows系統的網絡架構進行了介紹和對比。然后對在Windows平臺下各層次的防火墻開發的相關技術進行介紹和分析,定位了5個系統性能和效率瓶頸:(1)規則表的匹配低效;(2)驅動層同中間層的繁忙通信;(3)進程間的繁忙數據交換;(4)文件讀寫的低效;(5)策略表的低效查找。
針對這些瓶頸,我們給出了解決瓶頸的7點改進策略:(1)優化規則表;(2)規則表細分;(3)共享內存和事件的通信方式;(4)內存映射;(5)直接驅動層計算;(6)二分查找;(7)使用索引表。
最后,本研究工作采用上述改進策略構造了一個單機防火墻系統,實現了對本地系統的網絡數據包、文件系統以及進程線程的監控功能。
主要參考文獻
[1] 謝希仁.計算機網絡[M].第4版.北京:電子工業出版社,2003.
[2] 陳琪,屈光,高傳善.Windows單機版防火墻包過濾多種方案比較與實現[J]. 計算機應用與軟件,2005, 22(5):114-116.
[3] 史洪,高豐.基于 Winsock 協議棧的數據封包截獲技術[J].高性能計算技術,2005(1):41-43.
[4] 陸萍,徐汀榮.基于過濾鉤子技術的XShield防火墻的研究與實現[J].現代電子技術,2005,28(8):20-21,24.
[5] 陳保香.基于Winsock的中間動態連接庫探討[J].微計算機應用, 2000(3):143.