本系列文章主要講述Linux防火墻的基本原理和基礎使用方法:
1.什么是防火墻:
當我們把計算機連入互聯網與其他計算機進行通信時,這無疑也將自己的信息暴露了,那就意味著可能會有一些心懷不軌的人會利用這些信息來攻擊自己的主機,尤其是作為一臺服務器向互聯網用戶提供服務時,就迫切需要一種隔離和保護機制,來隔離外部網絡,達到保護自我的目的。而這種隔離機制就叫做防火墻。那顯而易見,既然要達到隔離機制,那就要工作在邊緣地帶,根據其所處的位置,我們可以將其分為網絡防火墻(工作在網絡入口位置)和主機防火墻(工作于主機之上)。
2.Linux之上的防火墻:
在Linux之上,為了達到隔離機制,同樣需要防火墻,Linux之上的實現方式是工作于內核空間的netfilter,以及工作于用戶空間提供給用戶定義防火墻策略的iptables,那他們基本的工作原理是什么呢?
對一個數據包的基本處理過程是:
主機通過物理網卡接收數據包,通過解分裝數據包,查看數據包的ip首部信息判斷是否是發送給本機的,如果是則數據包從內核空間轉交給監聽在某個對應端口號上的應用程序,從而完成通信。
當本機要向某主機發送數據時,從tcp/ip協議棧的上層通過層層分裝之后,通過向內核發起系統調用,從而將數據包交給物理網卡,由物理網卡向外發送數據包。
當解分裝數據包查看ip首部信息后,發現該數據包是要通過本機進行轉發,那么本機通過查看路由表,從而進行對數據包的轉發。
正是基于對數據包的處理機制,Linux防火墻正是在這些數據包必經之處對其進行檢查,然后根據用戶定義的規則進行相應的處理。linux上通過五個鉤子函數prerouting,iuput,output,forward,postrouting對應五條定義規則的鏈prerouting,input,output,forward,postrouting從而實現對數據包進行處理,之所以叫做鉤子函數是因為當一個數據包到達時,這幾個函數像鉤子一樣將其勾住,從上而下對其進行檢查,從而決定對數據包的處理動作。如下圖所示,在linux內核之中,對數據包的處理要經過prerouting,路由選擇,從而判斷數據是進入本機,或者是通過本機轉發,對于本機發送的數據則是從用戶空間進入內核空間,經過postrouting之后流出本機。而linux之中的防火墻netfilter不僅提供fileter(數據包過濾)功能,還有其他三個功能,分別是raw(與連接追蹤機制有關),mangle(修改數據包的首部信息),nat(地址轉換),這四個功能對應四個表。于是總結來說就是:linux的netfilter功能提供四個表對應四個功能,通過往每個功能上的鏈來指定規則,從而達到對數據包實現不同的處理。
(該圖取自互聯網)
根據上圖我們可以清晰的看到:
數據報文的流向:
. 流入本機:PREROUTING –> INPUT
. 由本機流出:OUTPUT –> POSTROUTING
. 轉發:PREROUTING –> FORWARD –> POSTROUTING
路由功能發生的時刻:
. 報文進入本機后:判斷目標主機是本機或其他主機
. 報文離開本機之前:判斷經由哪個接口送往下一站
每個表上所能對應的鏈,需要強調的是每個位置能實現的表(功能)在圖中從上而下代表處理的優先級是遞減的,總結為:
. raw:prerouting,output
. mangle:prerouting,forward,postrouting,input,output
. nat:prerouting,postrouting,output
. filter:input,output,forward
以上就是netfilter的基本工作原理,而要想通過netfilter來實現安全策略,重點就是選擇數據包經過的不同位置上基于端口號,目的地址,源地址等來實現過濾以保證主機的安全。
原創文章,作者:zhangbao,如若轉載,請注明出處:http://www.www58058.com/54775