netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數的Linux軟件一樣,這個包過濾防火墻是免費的,它可以代替昂貴的商業防火墻解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。
規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義為“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規則。
這是第一個要說的地方,Iptables和netfilter的關系是一個很容易讓人搞不清的問題。很多的知道iptables卻不知道netfilter。其實iptables只是Linux防火墻的管理工具而已,位于/sbin/iptables。真正實現防火墻功能的是netfilter,它是Linux內核中實現包過濾的內部結構。
可以簡單理解為:
1.若數據包是發送到本機,則經過PREROUTING–》INPUT;
2.若數據包是需要本機轉發,則經過PREROUTING–》FORWORD–>POSTROUTING;
3.若數據包是本機發出的,則要經過OUTPUT–》POSTROUTING.
表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用于實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
鏈(chains)是數據包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。
四張表和五個鏈的關系圖:
規則表與鏈的關系
1.filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數據包 內核模塊:iptables_filter.
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網絡地址轉換(IP、端口) 內核模塊:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數據包的服務類型、TTL、并且可以配置路由實現QOS內核模塊:iptable_mangle(別看這個表這么麻煩,咱們設置策略時幾乎都不會用到它)
4.Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw
表的一般順序:Raw——mangle——nat——filter。
iptables命令和規則寫法:如圖
關于添加/除去/編輯規則的命令的一般語法如下:
iptables [-t table] command [match] [target]
一條iptables規則包含如下4個基本元素:表,命令,匹配,目標。
iptables
-N:創建新的鏈
-X:刪除鏈
-F:清空鏈上的規則
-Z:計數器置零
-P:設置默認策略
規則:
-A:添加一條規則,在最后位置。
-I:插入一條規則,可以指定插入為第n條。
-R:替換一條規則,指定替換第n條。
-D:刪除一條規則。
匹配條件:
基本匹配:
-s:源地址
-d:目標地址
-p:指定協議(tcp|udp|icmp)
-i:指定數據流入接口,只能在前半段的鏈上。(prerouting|input|forword)
-o:指定數據流出接口,在后半段的鏈上。(forword|output|postrouting)
擴展匹配:
隱式擴展:
若限定-p udp –dport
–sport
若限定-p tcp –dport
–sport
–tcp-flags 檢查tcp鏈接的標志位 包括這些(URG,ACK,SYN,FIN,RST,PSH,ALL,NONE)。
–syn 匹配第一次握手syn=1的狀態,也可寫為
–tcp-flags ACK,SYN,FIN,RST SYN
若限定-p icmp –icmp-flags
顯示擴展:
-m state
-m muliport
特別說明:
iptables雖然也有服務腳本,但是它并不是服務,腳本的作用是把寫入的規則全部啟用。
服務腳本在 /etc/rc.d/init.d/iptables.
腳本配置文件 /etc/sysconfig/iptables-config.
規則保存位置 /etc/sysconfig/iptables