iptables 基本命令使用舉例
一、鏈的基本操作
1、清除所有的規則。
1)清除預設表filter中所有規則鏈中的規則。
# iptables -F
?
-F, --flush [chain]Flush the selected chain (all the chains in the table if none is given). This is equivalent to deleting all the rules one by one.
?
2)清除預設表filter中使用者自定鏈中的規則。
#iptables -X ??
-X 是刪除使用者自訂 table 項目,一般使用 iptables -N xxx 新增自訂 chain 后,可以使用 iptables -X xxx 刪除之。
?
-X, --delete-chain [chain]Delete the optional user-defined chain specified. There must be no references to the chain. If there are, you must delete or replace the referring rules before the chain can be deleted. If no argument is given, it will attempt to delete every nonbuiltin chain in the table.
2、設置鏈的默認策略。一般有兩種方法。
1)首先允許所有的包,然后再禁止有危險的包通過放火墻。
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD ACCEPT
2)首先禁止所有的包,然后根據需要的服務允許特定的包通過防火墻。
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
3、列出表/鏈中的所有規則。默認只列出filter表。
#iptables -L
4、向鏈中添加規則。下面的語句用于開放網絡接口:
#iptables -A INPUT -i lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT
#iptables -A INPUT -i eth0 -j ACEPT
#iptables -A OUTPUT -o eth1 -j ACCEPT
#iptables -A FORWARD -i eth1 -j ACCEPT
#iptables -A FORWARD -0 eth1 -j ACCEPT
注意:由于本地進程不會經過FORWARD鏈,因此回環接口lo只在INPUT和OUTPUT兩個鏈上作用。
5、使用者自定義鏈。
#iptables -N custom
#iptables -A custom -s 0/0 -d 0/0 -p icmp -j DROP
#iptables -A INPUT -s 0/0 -d 0/0 -j DROP
二、設置基本的規則匹配
1、指定協議匹配。
1)匹配指定協議。
#iptables -A INPUT -p tcp
2)匹配指定協議之外的所有協議。
#iptables -A INPUT -p !tcp
2、指定地址匹配。
1)指定匹配的主機。
#iptables -A INPUT -s 192.168.0.18
2)指定匹配的網絡。
#iptables -A INPUT -s 192.168.2.0/24
3)匹配指定主機之外的地址。
#iptables -A FORWARD -s !192.168.0.19
4)匹配指定網絡之外的網絡。
#iptables -A FORWARD -s ! 192.168.3.0/24
3、指定網絡接口匹配。
1)指定單一的網絡接口匹配。
#iptables -A INPUT -i eth0
#iptables -A FORWARD -o eth0
2)指定同類型的網絡接口匹配。
#iptables -A FORWARD -o ppp+
4、指定端口匹配。
1)指定單一端口匹配。
#iptables -A INPUT -p tcp --sport www
#iptables -A INPUT -p udp –dport 53
2)匹配指定端口之外的端口。
#iptables -A INPUT -p tcp –dport !22
3)匹配端口范圍。
#iptables -A INPUT -p tcp –sport 22:80
4)匹配ICMP端口和ICMP類型。
#iptables -A INOUT -p icmp –icimp-type 8
5)指定ip碎片。
每
個網絡接口都有一個MTU(最大傳輸單元),這個參數定義了可以通過的數據包的最大尺寸。如果一個數據包大于這個參數值時,系統會將其劃分成更小的數據包
(稱為ip碎片)來傳輸,而接受方則對這些ip碎片再進行重組以還原整個包。這樣會導致一個問題:當系統將大數據包劃分成ip碎片傳輸時,第一個碎片含有
完整的包頭信息(IP+TCP、UDP和ICMP),但是后續的碎片只有包頭的部分信息(如源地址、目的地址)。因此,檢查后面的ip碎片的頭部(象有
TCP、UDP和ICMP一樣)是不可能的。假如有這樣的一條規則:
#iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 –dport 80 -j ACCEPT
并且這時的FORWARD的policy為DROP時,系統只會讓第一個ip碎片通過,而余下的碎片因為包頭信息不完整而無法通過。可以通過—fragment/-f 選項來指定第二個及以后的ip碎片解決上述問題。
#iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT
注意現在有許多進行ip碎片攻擊的實例,如DoS攻擊,因此允許ip碎片通過是有安全隱患的,對于這一點可以采用iptables的匹配擴展來進行限制。
三、設置擴展的規則匹配(舉例已忽略目標動作)
1、多端口匹配。
1)匹配多個源端口。
#iptables -A INPUT -p tcp -m multiport –sport 22,53,80,110
2)匹配多個目的端口。
#iptables -A INPUT -p tcp -m multiport –dpoort 22,53,80
3)匹配多端口(無論是源端口還是目的端口)
#iptables -A INPUT -p tcp -m multiport –port 22,53,80,110
2、指定TCP匹配擴展
使用 –tcp-flags 選項可以根據tcp包的標志位進行過濾。
#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN
#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK
上實例中第一個表示SYN、ACK、FIN的標志都檢查,但是只有SYN匹配。第二個表示ALL(SYN,ACK,FIN,RST,URG,PSH)的標志都檢查,但是只有設置了SYN和ACK的匹配。
#iptables -A FORWARD -p tcp --syn
選項—syn相當于”--tcp-flags SYN,RST,ACK SYN”的簡寫。
3、limit速率匹配擴展。
1)指定單位時間內允許通過的數據包個數,單位時間可以是/second、/minute、/hour、/day或使用第一個子母。
#iptables -A INPUT -m limit --limit 300/hour
2 )指定觸發事件的閥值。
#iptables -A INPUT -m limit –limit-burst 10?
用來比對一次同時涌入的封包是否超過10個,超過此上限的包將直接丟棄。
3)同時指定速率限制和觸發閥值。
#iptables -A INPUT -p icmp -m limit –-limit 3/m –limit-burst 3
表示每分鐘允許的最大包數量為限制速率(本例為3)加上當前的觸發閥值burst數。任何情況下,都可保證3個數據包通過,觸發閥值burst相當于允許額外的包數量。?
4)基于狀態的匹配擴展(連接跟蹤)
每個網絡連接包括以下信息:源地址、目標地址、源端口、目的端口,稱為套接字對(socket pairs);協議類型、連接狀態(TCP協議)
和超時時間等。防火墻把這些信息稱為狀態(stateful)。狀態包過濾防火墻能在內存中維護一個跟蹤狀態的表,比簡單包過濾防火墻具有更大的安全性,命令格式如下:?
iptables -m state –-state [!]state [,state,state,state]
其中,state表是一個逗號分割的列表,用來指定連接狀態,4種:
>NEW: 該包想要開始一個新的連接(重新連接或連接重定向)
>RELATED:該包是屬于某個已經建立的連接所建立的新連接。舉例:
FTP的數據傳輸連接和控制連接之間就是RELATED關系。
>ESTABLISHED:該包屬于某個已經建立的連接。
>INVALID:該包不匹配于任何連接,通常這些包被DROP。
例如:
(1)在INPUT鏈添加一條規則,匹配已經建立的連接或由已經建立的連接所建立的新連接。即匹配所有的TCP回應包。
#iptables -A INPUT -m state –state RELATED,ESTABLISHED
(2)在INPUT鏈鏈添加一條規則,匹配所有從非eth0接口來的連接請求包。
#iptables -A INPUT -m state -–state NEW -i !eth0
又如,對于ftp連接可以使用下面的連接跟蹤:
(1)被動(Passive)ftp連接模式。
#iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state –-state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m?
state -–state ESTABLISHED,RELATED -j ACCEPT
(2)主動(Active)ftp連接模式
#iptables -A INNPUT -p tcp --sport 20 -m state –-state ESTABLISHED,RELATED -j ACCEPT
#iptables -A OUTPUT -p tcp –OUTPUT -p tcp –dport 20 -m state --state ESTABLISHED -j ACCEPT