攻防戰-ip黑白名單防火墻frdev的原理與實現
作者:佚名 來源:本站 時間:2018-01-01 點擊:84次
·實現方案選擇:
硬件實現或者軟件實現?
在面對諸如大量畸形包這樣的攻擊時,硬件實現將會是非常好的選擇,這是因為在進行此類型的封包過濾時,系統需要記憶的狀態很少(對于FPGA、ASIC諸多硬件實現方案來講,記憶元件的成本決不可忽視,寄存器與靜態RAM都非常昂貴,所以當需要記憶的信息很少時,純硬件方案的速度優勢使得其完勝軟件方案)。
但是,當狀態機需要處理龐大的記憶信息時,我們就需要選擇廉價的存儲器——動態隨機存儲器(如SDRAM中的DDR3)來作為系統狀態機的存儲介質,以降低系統的成本和復雜度。這時,軟件實現更勝一籌。盡管純硬件實現的速度會比軟件的方式高出很多,但我們也從第一篇文章《DDoS攻防戰 (一) : 概述》中lvs性能的測試結果中看到,軟件實現的、作為服務器前端均衡調度器的lvs,性能理想并且能勝任實際生產環境中的、龐大的用戶請求處理,可見,如果設計合理,軟件實現的性能無需過多擔憂。
最終,我們決定采用軟件的方法來實現所需的ip黑白名單模塊。
·最終系統鳥瞰:
筆者花費大約二十天的時間,使用C語言實現了這一模塊,其中,內核空間的核心代碼約2300行,用戶空間管理工具的代碼總行數約為700行。下為系統的鳥瞰:
·用戶空間管理工具fripadm,通過ioctl與工作于內核態的frdev模塊進行通信
·frdev維護兩個double_hash_table的實例,并提供了一個掛在NF_INET_PRE_ROUTING的鉤子函數,其通過操作這兩個double_hash_table的實例以分別實現ip黑名單、白名單的功能
·frdev通過內核中設備驅動的ioctl機制,向用戶空間提供這兩個double_hash_table實例的操作函數,而我們的用戶空間管理工具fripadm正是基于此而實現的
struct fr_ip_hash_array的功能: 精確ip查詢; 模糊ip查詢; 自定義hash表的長度; 自定義hash function,其輸入散列隨機數為rnd; 維護精確ip的哈希表; 維護模糊ip的鏈表; 維護精確ip與模糊ip的諸統計信息;
·為什么使用雙哈希表緩沖?
請考慮如下場景:
情況1:來自應用層的DDoS攻擊常常是瞬間涌入大量非法ip請求,例如數萬個非法ip,所以,對于防火墻黑白名單功能的要求至少有如下:能在很短的時間內更新大量數據項,且不能造成系統服務停頓。
分析:如果只使用一個全局的哈希表,當在短時間內進行大量的數據項增刪時,例如,成千上萬個,此時,即使采用多把讀寫鎖分割哈希表的策略,對共享資源的競爭也依然將嚴重影響系統響應速度,嚴重時系統可能會停頓或者更糟,對于生產環境中的高負載服務器,這是無法容忍的。
- 上一篇: 對于ajax請求數據的安全性問題討論
- 下一篇: 對于Web安全的那些事(XSS防攻擊)