基本語法格式:
iptables [ –t 表名 ] 命令選項 [ 鏈名 ] [ 條件匹配 ] [ –j 目標動作或跳轉 ]
Tip:若不指定表名,默認使用filter表。
常用選項:
-A:在指定鏈的末尾添加( –append )一條新規則。
-D:刪除指定鏈中的某一條規則,按規則序號或內容確定要刪除的規則
-I:在指定鏈中插入一條新規則,若不指定插入位置,默然在鏈的開頭插入
-R:修改、替換指定鏈中的某一條規則,按規則序號或內容確定要替換的規則
-L:列出指定鏈中所有規則進行查看,若未指定鏈名,則列出表中所有規則內容
-F:清空指定鏈中所有規則,若未指定鏈名,則清空表中所有鏈的內容
-N:新建一條用戶自定義的規則鏈
-X:刪除指定表中用戶自定義的規則鏈
-P:設置指定鏈的默認策略
-n:使用數字形式顯示輸出結果,如顯示主機的IP而不是主機名
-v:查看規則列表時顯示詳細信息
-V:查看Iptables命令工具的版本
-h:查看命令幫助信息
--line-numbers:查看規則列表時,同時顯示規則在鏈中的序列號
數據包控制:
ACCEPT:允許數據包通過
DROP:直接丟棄數據包,不給任何迴應信息
REJECT:拒絕數據包通過,必要時會給數據發送端一個響應信息
LOG:在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則。
簡單Iptables使用示例:
1. 在filter表的INPUT鏈末尾增加一條規則:
iptables -t filter -A INPUT -p tcp -j ACCEPT
2. 在filter表的INPUT鏈行首增加一條規則:
iptables –I INPUT –p udp –j ACCEPT ( 此處省略了“-t filter”選項,默認以filter處理)
3. 在filter表的INPUT鏈中插入一條防火牆規則,做爲鏈的第二條規則:
iptables –I INPUT 2 –p icmp –j ACCEPT
4. 查看filter表INPUT鏈中的所有規則,同時顯示規則的序號:
iptables –L INPUT –line-numbers
5. 刪除filter表INPUT鏈中第2條規則:
iptables –D INPUT 2
6. 清空filter、nat、mangle表各鏈中的所有規則:
iptables –F
iptables –t nat –F
iptables –t mangle –F
7. 設置filter表FORWARD規則鏈的默認策略爲DROP
iptables –P FORWARD DROP
條件匹配示例:
1. 協議匹配:如拒絕進入防火牆的所有icmp協議數據包
iptables –I INPUT –p icmp –j REJECT
允許轉發除icmp協議以外的所有數據(使用!可以將條件取反)
iptables –A FORWARD ! –p icmp –j ACCEPT
2. 地址匹配:(”-s 源地址”/ “-d 目標地址”)
拒絕轉發來自192.168.1.1主機的數據
iptables –A FORWARD –s 192.168.1.1 –j REJECT
3. 網絡接口匹配:(“-i 網絡接口名”/ “-o 網絡接口名”分別對應接收數據包的網卡和發送數據包的網卡)
丟棄從外網接口eth1進入防火牆本機的源地址爲私網地址的數據包
iptables –A INPUT –i eth1 –s 192.168.0.0/16 –j DROP
iptables –A INPUT –i eth1 –s 172.16.0.0/12 –j DROP (這裏運用了子網彙總)
iptables –A INPUT –i eth1 –s 10.0.0.0/8 –j DROP
4. 端口匹配:用於檢查數據包的TCP或UDP端口號,需要以“-p tcp”或“-p udp”匹配爲前提,使用“--sport 源端口”、“--dport 目標端口”的形式。端口可以表示爲單個端口號或者用冒號分割的端口範圍。
僅允許管理員從192.168.1.0/24網段使用SSH方式遠程登錄防火牆主機
iptables –A INPUT –p tcp –dport 22 –s 192.168.1.0/24 –j ACCEPT
iptables –A INPUT –p tcp –dport 22 –j DROP
5. TCP標記匹配:在Iptables命令中使用“--tcp-flags 檢查範圍 被設置的標記”的形式,兩個參數“檢查範圍”和“被設置的標記”均爲TCP標記的列表,各標記之間以逗號分割。“檢查範圍”告訴Iptables需要檢查數據包的哪幾個標記,“被設置 的標記”則明確匹配對應只爲1的標記。【SYN(同步)、ACK(應答)、FIN(結束)、RST(重設)、URG(緊急)、PSH(強迫推送)等均可使用於參數中,除此之外還可以使用關鍵詞 ALL 和 NONE 進行比對】
拒絕從外網接口eth1直接訪問防火牆本機的數據包,但是允許響應防火牆TCP請求的數據包進入;
iptables –P INPUT DROP
iptables –I INPUT –i eth1 –p tcp --tcp-flags SYN,RST,ACK SYN –j REJECT
iptables -I INPUT -i eth1 -p tcp ! --syn -j ACCEPT
(注:--syn同等於:--tcp-flags SYN,RST,ACK,FIN SYN,詳情可以man iptables)
6. ICMP類型匹配:ICMP類型可以使用字符串或數字代碼,例如“Echo-Request”(數字代碼爲8),“Echo-Reply”(數字代碼爲0),“Destination-Unreachable”(數字代碼爲3),分別對應ICMP協議的請求、回顯、目標不可達數據。
禁止其它主機ping防火牆主機,但是允許防火牆ping其它主機(允許接收ICMP迴應數據)。
iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type Destination-Unreachable -j ACCEPT
7. 顯示條件匹配:這種匹配功能需要額外的內核模塊提供,因此需要手工指定匹配方式,在Iptables命令中使用“-m 模塊關鍵字”的形式調用顯示匹配,當然還需要指定匹配內容。
a. MAC地址匹配:例如禁止轉發來自MAC地址爲00:01:12:AA:3F:DD的主機數據包
iptables –A FORWARD –m mac –mac-source 00:01:12:AA:3F:DD –j DROP
b. 多端口匹配:Iptables中使用“—dports 端口列表”,“—sports 端口列表”的形式對應源端口地址列表、目標端口地址列表。
允許防火牆本機開放TCP端口20、21、25、110及被動模式FTP端口1250~1280
iptables –A INPUT –p tcp –m multiport –dports 20,21,25,110,1250:1280 –j ACCEPT
c. 多IP地址匹配:Iptables中使用“--src-range IP地址範圍”“--dst-range IP地址範圍”的形式對應源IP地址範圍、目標IP地址範圍。
禁止轉發IP地址爲192.168.1.1~192.168.1.10的TCP數據包
iptables –A FORWARD –p tcp –m iprange –src-range 192.168.1.1-192.168.1.10 –j DROP
d. 狀態匹配:常見的數據包狀態包括NEW(與任何連接無關的)、ESTABLISHED(響應請求或已建立連接的)和RELATED(與已有連接相關的)
禁止轉發與正常TCP連接無關的非--syn請求數據包(如網絡中存在一些非法***數據包)
iptables –A FORWARD –m state –state NEW –p tcp ! –syn –j DROP
防火牆規則的導入、導出
直接執行iptables-save命令時,會把當前設置的防火牆規則信息輸出到終端。通常情況下,可以使用重定向將信息保存爲指定的配置文件,結合系統默認提供的Iptables服務腳本,可以自動加載位置於/etc/sysconfig/iptables文件中的規則配置。
使用iptables-restore命令,可以從已保存的配置文件中導入Iptables規則(該文件必須是使用Iptables-save命令導出的配置數據)。