iptables使用實例
實例:
鏈基本操作:
[root@rh34 root]# iptables -L -n
(列出表/鏈中的所有規則,包過濾防火牆默認使用的是filter表,因此使用此命令將列出filter表中所有內容,-n參數可加快顯示速度,也可不加-n參數。)
[root@rh34 root]# iptables -F
(清除預設表filter中所有規則鏈中的規則)
[root@rh34 root]# iptables -X
(清除預設表filter中使用者自定義鏈中的規則)
[root@rh34 root]# iptables -Z
(將指定鏈規則中的所有包字節計數器清零)
------------------------------------------------------------
設置鏈的默認策略,默認允許所有,或者丟棄所有:
[root@rh34 root]# iptables -P INPUT ACCEPT
[root@rh34 root]# iptables -P OUTPUT ACCEPT
[root@rh34 root]# iptables -P FORWARD ACCEPT
(以上我們在不同方向設置默認允許策略,若丟棄則應是DROP,嚴格意義上防火牆應該是DROP然後再允許特定)
---------------------------------------------------------------
向鏈中添加規則,下面的例子是開放指定網絡接口(信任接口時比較實用):
[root@rh34 root]# iptables -A INPUT -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A OUTPUT -o eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -o eth1 -j ACCEPT
--------------------------------------------------------------
使用用戶自定義鏈:
[root@rh34 root]# iptables -N brus
(創建一個用戶自定義名叫brus的鏈)
[root@rh34 root]# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
(在此鏈中設置了一條規則)
[root@rh34 root]# iptables -A INPUT -s 0/0 -d 0/0 -j brus
(向默認的INPUT鏈添加一條規則,使所有包都由brus自定義鏈處理)
----------------------------------------------------------------
基本匹配規則實例:
匹配協議:
iptables -A INPUT -p tcp
(指定匹配協議爲TCP)
iptables -A INPUT -p ! tcp
(指定匹配TCP以外的協議)
匹配地址:
iptables -A INPUT -s 192.168.1.1
(匹配主機)
iptables -A INPUT -s 192.168.1.0/24
(匹配網絡)
iptables -A FORWARD -s ! 192.168.1.1
(匹配以外的主機)
iptables -A FORWARD -s ! 192.168.1.0/24
(匹配以外的網絡)
匹配接口:
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
(匹配某個指定的接口)
iptables -A FORWARD -o ppp+
(匹配所有類型爲ppp的接口)
匹配端口:
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
(匹配單一指定源端口)
iptables -A INPUT -p ucp --dport 53
(匹配單一指定目的端口)
iptables -A INPUT -p ucp --dport ! 53
(指定端口以外)
iptables -A INPUT -p tcp --dport 22:80
(指定端口範圍,這裏我們實現的是22到80端口)
---------------------------------------------------------------------------------
指定IP碎片的處理:
[root@rh34 root]# iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.1.0/24 192.168.1.234 tcp dpt:http
ACCEPT tcp -f 192.168.1.0/24 192.168.1.234 tcp dpt:http
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
----------------------------------------------------------------------------------
設置擴展的規測匹配:
(希望獲得匹配的簡要說明,可使用: iptables -m name_of_match --help)
多端口匹配擴展:
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80
(匹配多個源端口)
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80
(匹配多個目的端口)
iptables -A INPUT -p tcp -m multiport --port 22,53,80
(匹配多個端口,無論是源還是目的端口)
-----------------------------------------------------------------------------
TCP匹配擴展:
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN
(表示SYN、ACK、FIN的標誌都要被檢查,但是隻有設置了SYN的才匹配)
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK
(表示ALL:SYN、ACK、FIN、RST、URG、PSH的標誌都被檢查,但是隻有設置了SYN和ACK的才匹配)
iptables -p tcp --syn
(選項--syn是以上的一種特殊情況,相當於“--tcp-flags SYN,RST,ACK SYN”的簡寫)
--------------------------------------------------------------------------------
limit速率匹配擴展:
[root@redhatlinux9 root]# iptables -A FORWARD -m limit --limit 300/hour
(表示限制每小時允許通過300個數據包)
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit-burst 10
(--limit-burst指定觸發時間的值(默認爲5),用來比對瞬間大量數據包的數量。)
(上面的例子用來比對一次同時湧入的數據包是否超過十個,超過此上限的包將直接被丟棄)
[root@redhatlinux9 root]# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3
(假設均勻通過,平均每分鐘3個,那麼觸發值burst保持爲3。如果每分鐘通過的包的數目小於3,那麼觸發值busrt將在每個週期(若每分鐘允許通過 3個,則週期數爲20秒)後加1,但最大值爲3。每分鐘要通過的包數量如果超過3,那麼觸發值busrt將減掉超出的數值,例如第二分鐘有4個包,那麼觸發值變爲2,同時4個包都可以通過,第三分鐘有6個包,則只能通過5個,觸發值busrt變爲0。之後,每分鐘如果包數量小於等於3個,則觸發值 busrt將加1,如果每分鐘包數大於3,觸發值busrt將逐漸減少,最終維持爲0)
(即每分鐘允許的最大包數量等於限制速率(本例中爲3)加上當前的觸發值busrt數。任何情況下,都可以保證3個包通過,觸發值busrt相當於是允許額外的包數量)
---------------------------------------------------------------------------------
基於狀態的匹配擴展(連接跟蹤):
每個網絡連接包括以下信息:源和目的地址、源和目的端口號,稱爲套接字對(cocket pairs);協議類型、連接狀態(TCP協議)和超時時間等。防火牆把這些叫做狀態(stateful)。能夠監測每個連接狀態的防火牆叫做狀態寶過濾防火牆,除了能完成普通包過濾防火牆的功能外,還在自己的內存中維護一個跟蹤連接狀態的表,所以擁有更大的安全性。
其命令格式如下:
iptables -m state --state [!] state [,state,state,state]
state表示一個用逗號隔開的的列表,用來指定的連接狀態可以有以下4種:
NEW:該包想要開始一個連接(重新連接或將連接重定向)。
RELATED:該包屬於某個已經建立的連接所建立的新連接。例如FTP的數據傳輸連接和控制連接之間就是RELATED關係。
ESTABLISHED:該包屬於某個已經建立的連接。
INVALID:該包不匹配於任何連接,通常這些包會被DROP。
例如:
[root@redhatlinux9 root]# iptables -A INPUT -m state --state RELATED,ESTABLISHED
(匹配已經建立的連接或由已經建立的連接所建立的新連接。即匹配所有的TCP迴應包)
[root@redhatlinux9 root]# iptables -A INPUT -m state --state NEW -i ! eth0
(匹配所有從非eth0接口來的連接請求包)
下面是一個被動(Passive)FTP連接模式的典型連接跟蹤
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
[root@redhatlinux9 root]# iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
下面是一個主動(Active)FTP連接模式的典型連接跟蹤
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
--------------------------------------------------------------------------------------
日誌記錄:
格式爲: -j LOG --log-level 7 --log-prefix "......"
[root@redhatlinux9 root]# iptables -A FORWARD -m tcp -p tcp -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -m icmp -p icmp -f -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died:"
[root@redhatlinux9 root]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"
鏈基本操作:
[root@rh34 root]# iptables -L -n
(列出表/鏈中的所有規則,包過濾防火牆默認使用的是filter表,因此使用此命令將列出filter表中所有內容,-n參數可加快顯示速度,也可不加-n參數。)
[root@rh34 root]# iptables -F
(清除預設表filter中所有規則鏈中的規則)
[root@rh34 root]# iptables -X
(清除預設表filter中使用者自定義鏈中的規則)
[root@rh34 root]# iptables -Z
(將指定鏈規則中的所有包字節計數器清零)
------------------------------------------------------------
設置鏈的默認策略,默認允許所有,或者丟棄所有:
[root@rh34 root]# iptables -P INPUT ACCEPT
[root@rh34 root]# iptables -P OUTPUT ACCEPT
[root@rh34 root]# iptables -P FORWARD ACCEPT
(以上我們在不同方向設置默認允許策略,若丟棄則應是DROP,嚴格意義上防火牆應該是DROP然後再允許特定)
---------------------------------------------------------------
向鏈中添加規則,下面的例子是開放指定網絡接口(信任接口時比較實用):
[root@rh34 root]# iptables -A INPUT -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A OUTPUT -o eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -i eth1 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -o eth1 -j ACCEPT
--------------------------------------------------------------
使用用戶自定義鏈:
[root@rh34 root]# iptables -N brus
(創建一個用戶自定義名叫brus的鏈)
[root@rh34 root]# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP
(在此鏈中設置了一條規則)
[root@rh34 root]# iptables -A INPUT -s 0/0 -d 0/0 -j brus
(向默認的INPUT鏈添加一條規則,使所有包都由brus自定義鏈處理)
----------------------------------------------------------------
基本匹配規則實例:
匹配協議:
iptables -A INPUT -p tcp
(指定匹配協議爲TCP)
iptables -A INPUT -p ! tcp
(指定匹配TCP以外的協議)
匹配地址:
iptables -A INPUT -s 192.168.1.1
(匹配主機)
iptables -A INPUT -s 192.168.1.0/24
(匹配網絡)
iptables -A FORWARD -s ! 192.168.1.1
(匹配以外的主機)
iptables -A FORWARD -s ! 192.168.1.0/24
(匹配以外的網絡)
匹配接口:
iptables -A INPUT -i eth0
iptables -A FORWARD -o eth0
(匹配某個指定的接口)
iptables -A FORWARD -o ppp+
(匹配所有類型爲ppp的接口)
匹配端口:
iptables -A INPUT -p tcp --sport www
iptables -A INPUT -p tcp --sport 80
(匹配單一指定源端口)
iptables -A INPUT -p ucp --dport 53
(匹配單一指定目的端口)
iptables -A INPUT -p ucp --dport ! 53
(指定端口以外)
iptables -A INPUT -p tcp --dport 22:80
(指定端口範圍,這裏我們實現的是22到80端口)
---------------------------------------------------------------------------------
指定IP碎片的處理:
[root@rh34 root]# iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT
[root@rh34 root]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.1.0/24 192.168.1.234 tcp dpt:http
ACCEPT tcp -f 192.168.1.0/24 192.168.1.234 tcp dpt:http
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
----------------------------------------------------------------------------------
設置擴展的規測匹配:
(希望獲得匹配的簡要說明,可使用: iptables -m name_of_match --help)
多端口匹配擴展:
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80
(匹配多個源端口)
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80
(匹配多個目的端口)
iptables -A INPUT -p tcp -m multiport --port 22,53,80
(匹配多個端口,無論是源還是目的端口)
-----------------------------------------------------------------------------
TCP匹配擴展:
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN
(表示SYN、ACK、FIN的標誌都要被檢查,但是隻有設置了SYN的才匹配)
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK
(表示ALL:SYN、ACK、FIN、RST、URG、PSH的標誌都被檢查,但是隻有設置了SYN和ACK的才匹配)
iptables -p tcp --syn
(選項--syn是以上的一種特殊情況,相當於“--tcp-flags SYN,RST,ACK SYN”的簡寫)
--------------------------------------------------------------------------------
limit速率匹配擴展:
[root@redhatlinux9 root]# iptables -A FORWARD -m limit --limit 300/hour
(表示限制每小時允許通過300個數據包)
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit-burst 10
(--limit-burst指定觸發時間的值(默認爲5),用來比對瞬間大量數據包的數量。)
(上面的例子用來比對一次同時湧入的數據包是否超過十個,超過此上限的包將直接被丟棄)
[root@redhatlinux9 root]# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3
(假設均勻通過,平均每分鐘3個,那麼觸發值burst保持爲3。如果每分鐘通過的包的數目小於3,那麼觸發值busrt將在每個週期(若每分鐘允許通過 3個,則週期數爲20秒)後加1,但最大值爲3。每分鐘要通過的包數量如果超過3,那麼觸發值busrt將減掉超出的數值,例如第二分鐘有4個包,那麼觸發值變爲2,同時4個包都可以通過,第三分鐘有6個包,則只能通過5個,觸發值busrt變爲0。之後,每分鐘如果包數量小於等於3個,則觸發值 busrt將加1,如果每分鐘包數大於3,觸發值busrt將逐漸減少,最終維持爲0)
(即每分鐘允許的最大包數量等於限制速率(本例中爲3)加上當前的觸發值busrt數。任何情況下,都可以保證3個包通過,觸發值busrt相當於是允許額外的包數量)
---------------------------------------------------------------------------------
基於狀態的匹配擴展(連接跟蹤):
每個網絡連接包括以下信息:源和目的地址、源和目的端口號,稱爲套接字對(cocket pairs);協議類型、連接狀態(TCP協議)和超時時間等。防火牆把這些叫做狀態(stateful)。能夠監測每個連接狀態的防火牆叫做狀態寶過濾防火牆,除了能完成普通包過濾防火牆的功能外,還在自己的內存中維護一個跟蹤連接狀態的表,所以擁有更大的安全性。
其命令格式如下:
iptables -m state --state [!] state [,state,state,state]
state表示一個用逗號隔開的的列表,用來指定的連接狀態可以有以下4種:
NEW:該包想要開始一個連接(重新連接或將連接重定向)。
RELATED:該包屬於某個已經建立的連接所建立的新連接。例如FTP的數據傳輸連接和控制連接之間就是RELATED關係。
ESTABLISHED:該包屬於某個已經建立的連接。
INVALID:該包不匹配於任何連接,通常這些包會被DROP。
例如:
[root@redhatlinux9 root]# iptables -A INPUT -m state --state RELATED,ESTABLISHED
(匹配已經建立的連接或由已經建立的連接所建立的新連接。即匹配所有的TCP迴應包)
[root@redhatlinux9 root]# iptables -A INPUT -m state --state NEW -i ! eth0
(匹配所有從非eth0接口來的連接請求包)
下面是一個被動(Passive)FTP連接模式的典型連接跟蹤
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
[root@redhatlinux9 root]# iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
下面是一個主動(Active)FTP連接模式的典型連接跟蹤
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
--------------------------------------------------------------------------------------
日誌記錄:
格式爲: -j LOG --log-level 7 --log-prefix "......"
[root@redhatlinux9 root]# iptables -A FORWARD -m tcp -p tcp -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -m icmp -p icmp -f -j LOG
[root@redhatlinux9 root]# iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died:"
[root@redhatlinux9 root]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.