簡單解析Linux系統(tǒng)防火墻框架 |
發(fā)布時間: 2012/6/15 15:13:40 |
Linux系統(tǒng)中的Netfilter提供了一個抽象、通用化的框架,該框架定義的一個子功能的實現就是包過濾子系統(tǒng),框架包含以下五部分: 1. 為每種網絡協議(IPv4、IPv6等)定義一套鉤子函數(IPv4定義了5個鉤子函數), 這些鉤子函數在數據報流過協議棧的幾個關鍵點被調用。在這幾個點中,協議棧將把數據報及鉤子函數標號作為參數調用Netfilter框架。 2. 內核的任何模塊可以對每種協議的一個或多個鉤子進行注冊,實現掛接,這樣當某個數據包被傳遞給Netfilter框架時,內核能檢測是否有任何模塊對該協議和鉤子函數進行了注冊。若注冊了,則調用該模塊的注冊時使用的回調函數,這樣這些模塊就有機會檢查(可能還會修改)該數據包、丟棄該數據包及指示Netfilter將該數據包傳入用戶空間的隊列。 3 .那些排隊的數據包是被傳遞給用戶空間的異步地進行處理。一個用戶進程能檢查數據包,修改數據包,甚至可以重新將該數據包通過離開內核的同一個鉤子函數中注入到內核中。 4. 任何在IP層要被拋棄的IP數據包在真正拋棄之前都要進行檢查。例如允許模塊檢查IP-Spoofed包(被路由拋棄)。 5.IP層的五個HOOK點的位置如下所示: (1)NF_IP_PRE_ROUTING:剛剛進入網絡層的數據包通過此點(剛剛進行完版本號,校驗 和等檢測),源地址轉換在此點進行;IP_Input.c中IP_Rcv調用; (2)NF_IP_LOCAL_IN:經路由查找后,送往本機的通過此檢查點,INPUT包過濾在此點進行,IP_local_deliver中調用; (3)NF_IP_FORWARD:要轉發(fā)的包通過此檢測點,FORWORD包過濾在此點進行; (4)NF_IP_POST_ROUTING:所有馬上便要通過網絡設備出去的包通過此檢測點,內置的目的地址轉換功能(包括地址偽裝)在此點進行; (5)NF_IP_LOCAL_OUT:本機進程發(fā)出的包通過此檢測點,OUTPUT包過濾在此點進行。 這些點是已經在內核中定義好的,內核模塊能夠注冊在這些HOOK點進行的處理,可使用nf_register_hook函數指定。在數據報經過這些鉤子函數時被調用,從而模塊可以修改這些數據報,并向Netfilter返回如下值: NF_ACCEPT 繼續(xù)正常傳輸數據報 NF_DROP 丟棄該數據報,不再傳輸 NF_STOLEN 模塊接管該數據報,不要繼續(xù)傳輸該數據報 NF_QUEUE 對該數據報進行排隊(通常用于將數據報給用戶空間的進程進行處理) NF_REPEAT 再次調用該鉤子函數 一個基于Netfilter框架的、稱為IPtables的數據報選 本文出自:億恩科技【mszdt.com】 |