(一)
基本語法
iptables-t filter -A INPUT -p icmp -j DROP
高級語法
iptables-t filter -A INPUT -m mac –mac-source 00:1C:23:3B:2E:B1 -j DROP
區別高級語法與基本語法的不同:首先filter的機制是由iptables_filter.ko模塊所提供的功能,而這個模塊本身就已提供了一些簡單的匹配的過濾方式,而所謂的基本語法是指只使用iptable_filter.ko模塊自身所提供的功能。高級語法必須調用其它模塊的功能。以高級語法的範例爲例,“-mmac”就是告知iptables工具,我們要動用xt_mac.ko模塊的功能,由於是調用其它的模塊,因此,語法的部分將會隨着不同的模塊而有所改變,而且每一個模塊的語法也不一樣,這就是所謂的“高級語法”。
舉例1:將222.24.21.195送到本機的ICMP封包丟棄
語法:iptables-A INPUT -p icmp -s 222.24.21.195 -j DROP
語法解釋:
-AINPUT
保護對象 |
因爲本範例所使用的是INPUTChain,故其保護的對象爲本機 |
-picmp
原文 |
-pProtocol(協議) |
目的 |
匹配某個特定協議封包,本範例是匹配icmp的封包 |
語法 |
-p icmp、-ptcp、 -pudp -p all等 |
-s222.24.21.195
原文 |
-s Source |
對應的參數 |
-dDestination |
目的 |
匹配封包中“來源”或“目的”端的IP |
語法 |
-s222.24.21.195 -s www.baidu.com等,由例子可知,IP位置的表示方法可以用單一IP或標準的CID網段,至於QDN的部分,實際上iptables是把FQDN送至DNS去執行解析,最後加入到規則之中的還是IP |
-j
目的 |
JUMP |
語法 |
將符合以上兩項條件的封包以特定的方式來“處理” |
較常見的處理方式:
ACCEPT |
允許通過 |
DROP |
將封包丟棄調,這種處理方式將導致來源端誤以爲封包丟失,而不斷重新發送封包,這個動作將持續到連接Timeout爲止 |
REJECT |
將封包丟棄掉,並回送一個DestinationUnreachable的ICMP封包給發送端,發送端的應用程序收到這個錯誤信息封包之後,會終止連接的動作 |
舉例2:不允許222.24.21.195主機通過本機DNS服務來執行名稱解析
語法:iptables-A INPUT -p udp -s 222.24.21.195 --dport 53 -j REJECT
語法解釋:
--dport53
原文 |
--dportDestination Port |
對應的參數 |
--sportSource Port |
目的 |
匹配TCP、UDP包頭中的“來源端Port”或“目的端Port”,這樣即可判斷連接所要訪問的服務,例如:-pudp –dport 53 代表客戶端要訪問UDP的53port,而UDP的53port就是DNS服務 |
語法 |
--dport 80、--sport80,但請注意,當時用--dport或--sport參數時,一定要指明是tcp還是udp協議。注意一點:只要規則語法中用到“Port參數”時,一定要加上“-pudp或-ptcp”的參數。 |
舉例3:允許192.168.1.0/24網段的主機對192.168.0.1提出任何的服務請求
語法:iptables-A INPUT -p all -s 192.168.1.0/24 -d 192.168.0.1 -j ACCEPT
語法解釋:
-pall
目的 |
匹配所有的協議包 |
-s192.168.1.0/24
目的 |
匹配來源端IP爲192.168.1.0/24網段的封包 |
-jACCEPT
目的 |
開放符合以上3項條件的封包進入 |
舉例4:只允許用戶端主機從eth1訪問的本機SSH服務
語法: iptables-A INPUT -p tcp -i eth1 --dport 22 -j ACCEPT
語法解釋:
-ieth1
原文 |
-iin-interface |
對應的參數 |
-oout-interface |
目的 |
匹配封包的出入接口 |
語法 |
-i eth1 -oeth2 |
舉例5:不允許本機的應用程序從eth0接口送出封包去訪問www.baidu.com網站
語法:iptables-A OUTPUT -o eth0 -p tcp -d www.baidu.com --dport 80 -j REJECT
語法解釋:
-AOUTPUT
限制的對象 |
因爲該例子使用的OUTPUChain,所以目的是限制本機對外的連接 |
(二)
有上面幾個例子瞭解了iptables的基本語法,下面對參數進行整理總結。
(1)接口的匹配參數
參數名稱 |
-i 、-o |
參數值 |
參數值會因爲防火牆主機所使用的物理接口不同而有所改變,下面列出常見的網絡接口名稱: * eth0 :以太網絡的接口名稱。 * ppp0:PPP接口的名稱。 * lo :LocalLoopback接口。 * fddi0:光線接口 |
使用範例 |
-i eth0:匹配從eth0接口送入的封包 |
意義 |
匹配封包的進出接口 |
補充 |
可搭配“!”來代表反向,例如,“-i!eth0”即表示匹配不是從eth0接口進入的封包 |
(2)上層協議(UpperLayer Protocal)的匹配參數
參數名稱 |
-p |
參數值 |
這些參數會因爲匹配的上層協議的不同而有所差異,一般常見的參數如下: * tcp :匹配的上層協議爲TCP協議。 * udp :匹配的上層協議爲UDP協議。 * icmp :匹配的上層協議爲ICMP協議。 * all :匹配所有的上層協議。 關於其它的上層協議可以參考/etc/protocols文檔,現在取出一部分內容: ip 0 IP hopopt 0 HOPOPT icmp 1 ICMP igmp 2 IGMP ggp 3 GGP ipencap 4 IP-ENCAP tcp 6 TCP 注:其中第一和第二字段是給系統來使用的,比如說我們寫-ptcp還可以寫爲-p6。因爲tcp的代碼就是6,第三個字段用於管理員來識別用。 |
(3)匹配來源/目的的IP地址
參數名稱 |
-s -d |
參數值 |
來源及目的IP地址匹配,其可接受的IP地址格式如下: *192.168.0.1 :匹配單一IP。 *172.10.0.0/16 :匹配一個Class B的網段。 *192.168.0.0/24 :匹配一個ClassC的網段。 *192.168.0.0/28 :也可以是任何標準CIDR的網段。 * www.qq.com : 也可以是網址,但最後存放到Chain裏的值還是IP |
使用範例 |
-s192.168.0.1 :匹配從192.168.0.1主機送來的封包 -s192.168.0.0/24 :匹配從192.168.0.0/24網段所送來的封包 -d192.168.0.10 :匹配要送往192.168.0.10主機的封包 |
意義 |
匹配封包來源或目的IP地址 |
補充 |
可搭配“!”來代表反向,例如:“-s!192.168.0.0/24”即代表匹配來源端IP不是192.168.0.0/24網段的封包 |
(4)匹配來源/目的的Port位置
參數名稱 |
--sport–dport |
參數值 |
我們可以用—sport或—dport來匹配所要訪問的服務,例如我們可以用--dport80參數匹配訪問WebServer的封包,另外,也可以使用 --sport80參數匹配有WebServer迴應給客戶端的封包 |
使用範例 |
--dport 80 :匹配訪問的WebServer的封包。 --sport 110:匹配由POP3 Server 迴應給客戶端的封包。 |
意義 |
匹配封包來源或目的的Port |
補充 |
可以搭配”!“來代表反向,如”--sport! 80“代表匹配不是從WebServer送來的封包 |
(5)處理方式
參數名稱 |
-j |
參數值 |
較爲常見的3種處理方式,分別如下: * ACCEPT:允許 * DROP :將封包丟棄 * REJECT :將封包丟棄,並回應發送端一個ICMP封包 |
使用範例 |
-j ACCEPT 允許 -j DROP 將封包丟棄 |
意義 |
以特定的方式來處理符合條件的封包 |