1.概述
在分析LINUX2.4.x網絡安全的實現之前先簡單介紹一下它里面包含的幾個重要概念:netfilter、iptables、match、target、nf_sockopt_ops、網絡安全功能點的實現。詳細解釋會在后面的分析中講到。
首先是netfilter,它定義了協議棧中的檢查點和在檢查點上引用的數據結構,以及在檢查點上對這些結構引用的過程。iptables定義了實現網絡安全功能的規則的組織以及對規則的操作。一個規則中包含零個或多個match和一個target,規則組織沿用了LINUX2.2.x中的chain,rule的概念,但是增加了table的概念,這三者的關系是:table是實現某項功能所有規則的總和,chain是在某個檢查點上所引用規則的集合,rule是一個單獨的規則。match在規則中用于匹配數據包中的各項參數,每個match匹配特定的參數,所以一個規則中可以有多個match,這包括系統已定義的match,也包括通過內核模塊另外添加的match。target在規則中決定如何處理匹配到的數據包,因此在target中實現了具體的網絡安全功能。nf_sockopt_ops是在系統調用get/setssockopt中引用的數據結構,實現用戶空間對規則的添加、刪除、修改、查詢等動作。以上的結構在使用之前必須先注冊到系統中才能被引用。
LINUX2.4.x網絡安全實現了包過濾,地址轉換(包含了LINUX2.2.x中的地址偽裝和透明代理功能并有其他擴展功能),連接跟蹤(這是實現地址轉換的基礎,在它里面實現了對連接狀態的記錄和監控,與狀態檢測類似),Mangle(這是LINUX2.4.x新增的一個功能,它對數據包進行檢查但不做禁止、丟棄或允許的判斷)。實現這些功能點需要分別注冊netfilter,iptables,match,target,nf_sockopt_ops的數據結構。如果實現其他新的功能,只需定義相應的結構并將它注冊到系統中,并且通過用戶空間的配置工具(這個配置工具也須支持新的結構)把它加入到規則中就可以了。這些結構在規則中自動被引用。
2.netfilter
netfilter定義了協議棧中的檢查點和檢查點上引用的數據結構以及對這些數據結構引用的過程。首先看看在檢查點上引用的數據結構,如圖所示:
圖2.1 nf_hoo_ops數據結構的組織
圖中ns_hook_ops就是在檢查點上引用的結構。每個協議棧預先定義的8個鏈表數組用于保存這些結構,這些鏈表與協議棧中的檢查點一一對應。在實際的應用中,這8個鏈表并不一定都被使用,比如在IPV4中,只定義了5個檢查點,分別對應前5個鏈表。nf_hook_ops結構如下:
struct nf_hook_ops { struct list_head list; nf_hookfn hook;/* 函數指針 */ int pf; /*結構對應的協議棧號 */ int hooknum; /*結構對應的檢查點號*/ int priority; /*結構的優先值 */ }; |
共3頁: 1 [2] [3] 下一頁 | ||
|