一:前言
防火牆用於實現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表,它具有以下三種內建鏈:
2. NAT表NAT表有三種內建鏈:
3. Mangle表Mangle表用於指定如何處理資料包。它能改變TCP頭中的QoS位。Mangle表具有5個內建鏈:
PREROUTING
OUTPUT
FORWARD
INPUT
POSTROUTING
4. Raw表Raw表用於處理異常,它具有2個內建鏈:
PREROUTING chain
OUTPUT chain
iptables還支援自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。在一個關卡設定,指定當有資料的時候專門去找某個特定的鏈來處理,當那個鏈處理完之後,再返回。接著在特定的鏈中繼續檢查。
注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。
牢記以下三點式理解iptables規則的關鍵:
在target裡指定的特殊值:
推薦閱讀:
iptables—包過濾(網路層)防火牆
Linux防火牆iptables詳細教程
iptables+L7+Squid實現完善的軟體防火牆
iptables的備份、恢複及防火牆指令碼的基本使用
Linux下防火牆iptables用法規則詳解