簡介
iptables是用戶空間命令行程序,用於配置Linux 2.4.x及更高版本的包過濾規則集。由兩個組件netfilter 和 iptables 組成
4個規則表(優先級raw > mangle >nat > filter)
raw表:確定是否對該數據包進行狀態跟蹤;對應iptable_raw,表內包含兩個鏈:OUTPUT、PREROUTING
mangle表:爲數據包的TOS(服務類型)、TTL(生命週期)值,或者爲數據包設置Mark標記,以實現流量×××、策略路由等高級應用。其對應iptable_mangle,表內包含五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
nat表:修改數據包中的源、目標IP地址或端口;其對應的模塊爲iptable_nat,表內包括三個鏈:PREROUTING、POSTROUTING、OUTPUT
filter表:數據包過濾;其對應的內核模塊爲iptable_filter,表內包含三個鏈:INPUT、FORWARD、OUTPUT
5種規則
INPUT:處理入站數據包
OUTPUT:處理出站數據包
FORWARD:處理轉發數據包
POSTROUTING鏈:在進行路由選擇後處理數據包(對數據鏈進行源地址修改轉換)
PREROUTING鏈:在進行路由選擇前處理數據包(做目標地址轉換)
建立規則和鏈語法如下
iptables [-t table] command [match] [target]
[-t table] 選項允許使用標準表之外的任何表,有三種可用的表選項: filter (默認值)、 nat 和 mangle
命令(command)
插入規則、將規則添加到鏈的末尾或刪除規則。
-A 或 --append : 該命令將一條規則附加到鏈的末尾。
iptables -A INPUT -s 10.120.123.1 -j ACCEPT
規則附加到 INPUT 鏈的末尾,確定來自源地址 10.120.123.1 的信息包可以 ACCEPT 。
-D 或 --delete :
指定要匹配的規則或者指定規則在鏈中的位置編號,該命令從鏈中刪除該規則。
iptables -D INPUT --dport 21 -j DROP
iptables -D OUTPUT 6
第一條命令從 INPUT 鏈刪除規則,它指定 DROP 前往端口 21 的信息包。第二條命令只是從 OUTPUT 鏈刪除編號爲6 的規則。
-P 或 --policy : 該命令設置鏈的缺省目標,即策略。 所有與鏈中任何規則都不匹配的信息包都將被強制使用此鏈的策略。
iptables -P INPUT DROP
將丟棄所有與 INPUT 鏈中任何規則都不匹配的信息包。
-N 或 --new-chain : 用命令中所指定的名稱創建一個新鏈。
iptables -N allowed-chain
-F 或 --flush :該命令刪除所有鏈中的所有規則。此參數用於快速清除。
iptables -F FORWARD
iptables -F
-L 或 --list : 列出指定鏈中的所有規則。
iptables -L allowed-chain
匹配(match)
match 部分如源和目的地地址、協議等
-p 或 --protocol : 該通用協議匹配用於檢查某些特定協議。 協議示例有 TCP 、 UDP 、 ICMP 、用逗號分隔的任何這三種協議的組合列表以及 ALL (用於所有協議)。 ALL 是缺省匹配。可以使用 ! 符號,它表示不與該項匹配。
iptables -A INPUT -p TCP
iptables -A INPUT -p UDP
iptables -A INPUT -p ICMP
iptables -A INPUT -p TCP, UDP
iptables -A INPUT -p ! TCP
-s 或 --source : 該源匹配用於根據信息包的源 IP 地址來與它們匹配。
iptables -A OUTPUT -s 10.120.123.9
iptables -A OUTPUT -s 10.120.123.0/24
iptables -A OUTPUT -s ! 10.120.0.0/16
-d 或 --destination : 該目的地匹配用於根據信息包的目的地 IP 地址來與它們匹
iptables -A INPUT -d 10.120.123.9
iptables -A INPUT -d 10.120.123/24
iptables -A INPUT -d ! 10.120.0.0/16
目標(target)
ACCEPT : 被接受(允許它前往目的地) 該目標被指定爲 -j ACCEPT 。
DROP : 被會阻塞,並且不對它做進一步處理。 該目標被指定爲 -j DROP 。
REJECT : 與 DROP 目標相同, REJECT 不會在服務器和客戶機上留下死套接字。REJECT 將錯誤消息發回給信息包的發送方。該目標被指定爲 -j REJECT 。
iptables -A FORWARD -p TCP --dport 80 -j REJECT