一:前言
防火墻用于實現Linux下訪問控制的功能的,它分為硬件的或者軟件的防火墻兩種。無論是在哪個網絡中,防火墻工作的地方一定是在網絡的邊緣。而我們的任務就是需要去定義到底防火墻如何工作,這就是防火墻的策略,規則,以達到讓它對出入網絡的IP、數據進行檢測。
目前市面上比較常見的有3、4層的防火墻,叫網絡層的防火墻,還有7層的防火墻,其實是代理層的網關。
對于TCP/IP的七層模型來講,我們知道第三層是網絡層,三層的防火墻會在這層對源地址和目標地址進行檢測。但是對于七層的防火墻,不管你源端口或者目標端口,源地址或者目標地址是什么,都將對你所有的東西進行檢查。所以,七層防火墻更加安全,但是這卻帶來了效率更低。所以市面上通常的防火墻方案,都是兩者結合的。而又由于我們都需要從防火墻所控制的這個口來訪問,所以防火墻的工作效率就成了用戶能夠訪問數據多少的一個最重要的控制,配置的不好甚至有可能成為流量的瓶頸。
二:iptables 工作原理
iptables的結構:iptables -> Tables -> Chains -> Rules. 簡單地講,tables由chains組成,而chains又由rules組成。如下圖所示。
五個規則鏈。
1.PREROUTING (路由前)
2.INPUT (數據包流入口)
3.FORWARD (轉發管卡)
4.OUTPUT(數據包出口)
5.POSTROUTING(路由后)
這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。
iptables具有Filter, NAT, Mangle, Raw四種內建表:
1. Filter表
Filter表示iptables的默認表,因此如果你沒有自定義表,那么就默認使用filter表,它具有以下三種內建鏈:
INPUT鏈 – 處理來自外部的數據。
OUTPUT鏈 – 處理向外發送的數據。
FORWARD鏈 – 將數據轉發到本機的其他網卡設備上。
2. NAT表
NAT表有三種內建鏈:
PREROUTING鏈 – 處理剛到達本機并在路由轉發前的數據包。它會轉換數據包中的目標IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING鏈 – 處理即將離開本機的數據包。它會轉換數據包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT鏈 – 處理本機產生的數據包。
3. Mangle表
Mangle表用于指定如何處理數據包。它能改變TCP頭中的QoS位。Mangle表具有5個內建鏈:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
4. Raw表
Raw表用于處理異常,它具有2個內建鏈:
PREROUTING chain
OUTPUT chain
iptables還支持自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。在一個關卡設定,指定當有數據的時候專門去找某個特定的鏈來處理,當那個鏈處理完之后,再返回。接著在特定的鏈中繼續檢查。
注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。
牢記以下三點式理解iptables規則的關鍵:
Rules包括一個條件和一個目標(target)
如果滿足條件,就執行目標(target)中的規則或者特定值。
如果不滿足條件,就判斷下一條Rules。
在target里指定的特殊值:
ACCEPT – 允許防火墻接收數據包
DROP – 防火墻丟棄包
QUEUE – 防火墻將數據包移交到用戶空間
RETURN – 防火墻停止執行當前鏈中的后續Rules,并返回到調用鏈(the calling chain)中。
下一篇:防火墻壓力山大,你要挺住