WIKI使用導航
站長百科導航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應用
- 美國十大主機
Netfilter
netfilter是由Rusty Russell提出的Linux 2.4內核防火墻框架,該框架既簡潔又靈活,可實現(xiàn)安全策略應用中的許多功能,如數(shù)據(jù)包過濾、數(shù)據(jù)包處理、地址偽裝、透明代理、動態(tài)網(wǎng)絡地址轉換(Network Address Translation,NAT),以及基于用戶及媒體訪問控制(Media Access Control,MAC)地址的過濾和基于狀態(tài)的過濾、包速率限制等。
netfilter框架[ ]
netfilter提供了一個抽象、通用化的框架,作為中間件,為每種網(wǎng)絡協(xié)議(IPV4、IPv6等)定義一套鉤子函數(shù)。Ipv4定義了5個鉤子函數(shù),這些鉤子函數(shù)在數(shù)據(jù)報流過協(xié)議棧的5個關鍵點被調用,也就是說,IPv4協(xié)議棧上定義了5個“允許垂釣點”。在每一個“垂釣點”,都可以讓netfilter放置一個“魚鉤”,把經(jīng)過的網(wǎng)絡包(Packet)釣上來,與相應的規(guī)則鏈進行比較,并根據(jù)審查的結果,決定包的下一步命運,即是被原封不動地放回IPv4協(xié)議棧,繼續(xù)向上層遞交;還是經(jīng)過一些修改,再放回網(wǎng)絡;或者干脆丟棄掉。
netfilter的關鍵技術[ ]
netfilter主要采用連線跟蹤(Connection Tracking)、包過濾(Packet Filtering)、地址轉換、包處理(Packet Mangling)4種關鍵技術。
連線跟蹤[ ]
連線跟蹤是包過濾、地址轉換的基礎,它作為一個獨立的模塊運行。采用連線跟蹤技術在協(xié)議棧低層截取數(shù)據(jù)包,將當前數(shù)據(jù)包及其狀態(tài)信息與歷史數(shù)據(jù)包及其狀態(tài)信息進行比較,從而得到當前數(shù)據(jù)包的控制信息,根據(jù)這些信息決定對網(wǎng)絡數(shù)據(jù)包的操作,達到保護網(wǎng)絡的目的。
當下層網(wǎng)絡接收到初始化連接同步(Synchronize,SYN)包,將被netfilter規(guī)則庫檢查。該數(shù)據(jù)包將在規(guī)則鏈中依次序進行比較。如果該包應被丟棄,發(fā)送一個復位(Reset,RST)包到遠端主機,否則連接接收。這次連接的信息將被保存在連線跟蹤信息表中,并表明該數(shù)據(jù)包所應有的狀態(tài)。這個連線跟蹤信息表位于內核模式下,其后的網(wǎng)絡包就將與此連線跟蹤信息表中的內容進行比較,根據(jù)信息表中的信息來決定該數(shù)據(jù)包的操作。因為數(shù)據(jù)包首先是與連線跟蹤信息表進行比較,只有SYN包才與規(guī)則庫進行比較,數(shù)據(jù)包與連線跟蹤信息表的比較都是在內核模式下進行的,所以速度很快。
包過濾[ ]
包過濾檢查通過的每個數(shù)據(jù)包的頭部,然后決定如何處置它們,可以選擇丟棄,讓包通過,或者更復雜的操作。
地址轉換[ ]
網(wǎng)絡地址轉換源(NAT)分為(Source NAT,SNAT)和目的NAT(Destination NAT, DNAT)2種不同的類型。SNAT是指修改數(shù)據(jù)包的源地址(改變連接的源IP)。SNAT會在數(shù)據(jù)包送出之前的最后一刻做好轉換工作。地址偽裝(Masquerading)是SNAT的一種特殊形式。DNAT 是指修改數(shù)據(jù)包的目標地址(改變連接的目的IP)。DNAT 總是在數(shù)據(jù)包進入以后立即完成轉換。端口轉發(fā)、負載均衡和透明代理都屬于DNAT。
包處理[ ]
利用包處理可以設置或改變數(shù)據(jù)包的服務類型(Type of Service, TOS)字段;改變包的生存期(Time to Live, TTL)字段;在包中設置標志值,利用該標志值可以進行帶寬限制和分類查詢。
netfilter分類[ ]
Netfilter主要通過表、鏈實現(xiàn)規(guī)則,可以這么說,Netfilter是表的容器,表是鏈的容器,鏈是規(guī)則的容器,最終形成對數(shù)據(jù)報處理規(guī)則的實現(xiàn)。
詳細地說,Netfilter/IPTables的體系結構可以分為三個大部分:
- Netfilter的HOOK機制
Netfilter的通用框架不依賴于具體的協(xié)議,而是為每種網(wǎng)絡協(xié)議定義一套HOOK函數(shù)。這些HOOK函數(shù)在數(shù)據(jù)報經(jīng)過協(xié)議棧的幾個關鍵點時被調用,在這幾個點中,協(xié)議棧將數(shù)據(jù)報及HOOK函數(shù)標號作為參數(shù),傳遞給Netfilter框架。
對于它在網(wǎng)絡堆棧中增加的這些HOOK,內核的任何模塊可以對每種協(xié)議的一個或多個HOOK進行注冊,實現(xiàn)掛接。這樣當某個數(shù)據(jù)報被傳遞給Netfilter框架時,內核能檢測到是否有任何模塊對該協(xié)議和HOOK函數(shù)進行了注冊。若注冊了,則調用該模塊的注冊時使用的回調函數(shù),這樣這些模塊就有機會檢查、修改、丟棄該數(shù)據(jù)報及指示Netfilter將該數(shù)據(jù)報傳入用戶空間的隊列。
這樣,HOOK提供了一種方便的機制:在數(shù)據(jù)報通過Linux內核的不同位置上截獲和操作處理數(shù)據(jù)報。
- IPTables基礎模塊
PTables基礎模塊實現(xiàn)了三個表來篩選各種數(shù)據(jù)報,具體地講,Linux2.4內核提供的這三種數(shù)據(jù)報的處理功能是相互間獨立的模塊,都基于Netfilter的HOOK函數(shù)和各種表、鏈實現(xiàn)。這三個表包括:filter表,nat表以及mangle表。
- 具體功能模塊
- 數(shù)據(jù)報過濾模塊
- 連接跟蹤模塊(Conntrack)
- 網(wǎng)絡地址轉換模塊(NAT)
- 數(shù)據(jù)報修改模塊(mangle)
- 其它高級功能模塊