iptables可以使用擴展數據包匹配模塊。 它們有兩種加載方式:
第一種: 指定 -p 或 --protocol 指定匹配的協議。
第二種: 使用 -m 或 --match 選項,后跟匹配的模塊名稱;然后根據特定的模塊,可以使用各種額外的命令行選項。
您可以在一行中多次使用-m指定多個擴展匹配模塊,例如:
iptables -I INPUT -m state --state NEW,RELATED -p tcp -m tcp --dport 4505 -j ACCEPT
並且在指定模塊后可以使用-h或--help選項來查看該特定模塊的幫助。
例如: iptables -m state -h
常用模板state、tcp說明:
state模塊
--state state --state state_value1[,state_value2...]
此模塊與連接跟蹤結合使用,可以訪問此數據包的連接跟蹤狀態。
其中狀態值是要匹配的連接狀態,多個狀態列表以逗號分隔。
可選的狀態值有:INVALID,ESTABLISHED ,NEW ,RELATED
1. INVALID 意味着由於某種原因無法識別數據包,包括內存不足和與任何已知連接不對應的ICMP錯誤;
2. ESTABLISHED 意味着數據包與已在兩個數據包中看到數據包的連接相關聯指示;
3. NEW 表示數據包已啟動新連接,或以其他方式與未在兩個方向上看到數據包的連接相關聯;
4. RELATED 表示數據包正在啟動新連接,但與現有連接相關聯,例如FTP數據傳輸或ICMP錯誤。
tcp模塊
如果指定了“--protocol tcp”或者“-p tcp",再使用 -m tcp則會加載此擴展。它提供以下選項:
1. --source-port [!] port[:port]
源端口或端口范圍規范。這可以是服務名稱或端口號。也可以使用格式port:port指定包含范圍。如果省略第一個端口,則假定為“0”;如果省略最后一個,則假定為“65535”。如果第二個端口大於第一個端口,它們將被交換。--sport是此選項的方便別名。
2. --destination-port [!] port[:port]
目標端口或端口范圍規范。--dport是此選項的方便別名。
3. --tcp-flags [!] mask comp
TCP標志符合指定時匹配。
第一個參數是我們應該檢查的標志,寫為逗號分隔列表,
第二個參數是逗號分隔的標志列表,必須設置。標志是:SYN ACK FIN RST URG PSH ALL NONE。因此命令
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
將僅匹配設置了SYN標志的數據包,並且未設置ACK,FIN和RST標志。
4. [!] --syn
僅匹配SYN位設置的TCP數據包,並清除ACK,RST和FIN位。這些數據包用於請求TCP連接啟動;阻止來自接口的此類數據包將阻止傳入的TCP連接,但傳出的TCP連接將不受影響。它相當於--tcp-flags SYN,RST,ACK,FIN SYN。如果“!”標志位於“--syn”之前,選項的意義是反轉。
5. --tcp-option [!] number
如果設置TCP選項,則匹配。
6. --mss value[:value]
將TCP SYN或SYN / ACK數據包與指定的MSS值(或范圍)匹配,后者控制該連接的最大數據包大小。
數據參考:https://linux.die.net/man/8/iptables