一、iptables規則的匹配條件類型有三類
1、通用匹配:可直接使用,不依賴於其他條件或擴展,包括網絡協議、IP地址、網絡接口等條件
2、隱含匹配:要求以特定的協議匹配作為前提,包括端口、TCP標記、ICMP類型等條件
3、顯式匹配:要求以“-m 擴展模塊”的形式明確指出類型,包括多端口、MAC地址、IP范圍、數據包狀態等條件
二、通用匹配規則
1、協議匹配:-p 協議名
2、地址匹配:-s 源地址、-d 目的地址
3、接口匹配:-i 入站網卡、-o 出站網卡
例1:iptables -A FORWARD ! -p icmp -j ACCEPT(除了icmp協議的數據包,別的協議的包都能轉發)
例2:在網關型防火牆設置如下:
~]#iptables -I FORWARD -s 192.168.1.11 -o eth1 -p tcp --sport 80 -j ACCEPT
注:192.168.1.11是企業內部的web服務器,eth1是網關防火牆的外網網卡,意思是:源地址為192.168.1.11的這台服務器tcp80端口可以回應外網請求,因為eth1是外網網卡,FORWARD轉發鏈也對其ACCEPT了。
三、隱含匹配條件
之所有叫隱含,是因為它依賴某種協議才能搭配使用。
1、端口匹配:--sport [源端口] --dport [目的端口]
例:iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT(因為設置的鏈是FORWARD,所以一般是網關型防火牆中設置的,源ip為192的主機可以訪問其他網絡的udp53端口,注意源和目的的身份切換一定要弄懂)
iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT(網關型防火牆中設置的,來自於udp53端口的數據包可以訪問我們的192主機)
iptables -A INPUT -p tcp --dport 20:23 -j ACCEPT(一般是主機型防火牆設置的,我們電腦的20到23端口可以被訪問)
2、TCP標記匹配:--tcp-flags [檢查范圍] [被設置的標記]
例:iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP
檢查到有SYN的數據包,就丟棄
3、ICMP類型匹配:--icmp-type ICMP類型(ICMP類型有8、0、3)
例: iptables -A INPUT -p icmp --icmp-type 8 -j DROP (別人ping我主機的請求被丟棄,8代表請求)
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT (我ping別人時,回來的包被允許(一去一回才知道ping沒ping通),0帶表回來的icmp包)
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT(3也是代表請求,主機不可達,不常用)
iptables -p icmp -h (查看ICMP類型)
四、顯示匹配條件
(1)多端口匹配:-m multiport --sports 源端口列表
-m multiport --sports 目的端口列表
例:iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
(2)IP范圍匹配:-m iprange --src-range IP范圍
例:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT
(3)MAC地址匹配:-m mac --mac-source MAC地址
例:iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
(4)狀態匹配:-m state --state 連接狀態
NEW:與任何連接無關的
ESTABLISHED:響應請求或已建立連接的
RELATED:與已有連接有相關性的,如FTP數據連接
例:只開放本機的Web服務,但對發給本機的TCP應答報文予以放行,其他入站報文均丟棄
iptables -P INPUT DROP
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT