學習筆記,詳細內容請參閱http://www.zsythink.net/archives/1199/。
防火牆分類:網絡 /主機 硬件/軟件。
防火牆相當於一個關口,所有的網絡數據包都要通過這個關口。防火牆對通過的數據包進行檢查,根據數據包的特徵,如:源地址是什麼,目的地址是什麼,端口是什麼,所用的傳輸協議(tcp,udp,icmp),應用協議(http,ftp,smtp)等等,進行不同的處理,如:放行,拋棄,拒絕,轉發,修改包內容等等。這也就是防火牆所應用的規則:根據匹配條件,執行相應動作。
實際實現防火牆功能中,在每個關口數據包都要經過不止一條規則的檢查,因爲這些規則是按順序鏈接成一個規則鏈,所以關口在防火牆中被稱爲“鏈”(chain)。根據數據包傳輸路徑的不同提供了5種鏈: PREROUTING,INPUTING, FORWARD, ,OUTPUT,POSTROUTING。
防火牆規則的功能分爲了4類,存儲的規則也按照功能的分類分別存儲在4個相應的表中:
raw表: 關閉nat表中啓用的連接追蹤機制。內核模塊:iptables_raw。
mangle表:拆解報文過濾,修改內容,重新封裝。內核模塊:iptables_mangle。
nat表:網絡地址轉換。iptables_nat。
filter表:過濾數據包。內核模塊 iptables_filter。
鏈上的規則存儲在不同的表中,但各表中的優先級不同:raw->mangle->nat->filter. 在一個鏈上執行規則時,按照上述規則的優先級先執行raw表中的規則,最後執行filter表中的規則。
不同鏈上的規則可以存儲在哪些表中:
PREROUTING: raw表,mangle表,nat表
INPUT:mangle表,filter表(centos7 還有nat表)
FORWARD:mangle表,filter表
OUTPUT:raw表,mangle表,nat表,filter表
POSTROUTIN:mangle表,nat表
一個數據包通過防火牆的流程場景如下圖所示:
場景一:網絡->PREROUTING->INPUT->主機.
規則處理順序:PREROUTING.raw->PREROUTING.mangle->PREROUTING.nat->INPUT.mangle->INPUT.filter.
場景二:網絡->PREROUTING->FORWARD->POSTROUTING->網絡.
規則處理順序:
PREROUTING.raw->PREROUTING.mangle->PREROUTING.nat->FORWARD.mangle->FORWARD.filter->POSTROUTING.mangle->POSTROUTING.nat
場景三:主機->OUTPUT->POSTROUTING->網絡.
規則處理順序:
OUTPUT.raw->OUTPUT.mangle->OUTPUT.nat->OUTPUT.filter->POSTROUTING.mangle->POSTROUTING.nat
由上可以發現 一次數據包的傳輸會被不同的鏈處理,因而mangle表和nat表可能會被多次訪問。