(一)
基本文法
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
舉例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.1 |