一.基本格式
1. iptable [-t 表] 命令選項 [連名] 匹配條件 [-j 動作]
2.常用命令選項如下:
-A 【append】 在指定的連的結尾添加規則
-D 【delete】刪除指定連中的規則,可以按規則號或規則內容匹配
-I 【insert】插入一條新規則,默認是在最前面
-R 【replace】 替換某一條規則
-L 【list】列出所有規則
-F 【flush】清空所有規則
-N 【new】自定義一條規則連
-X 【--delete-chain】 刪除用戶自定義規則連
-P 【policy】設置默認策略
-n 【numeric】以數字方式顯示,如:顯示ip,但不顯示主機名
-v 【verbose】顯示詳細信息
-V 【version】查看iptable的版本信息
--line-number 查看規則連是,顯示列表號
-Z 清空計數器值
二.舉例
# iptables -t filter -F【清空filter表中所有規則】
# iptables -t filter -Z【清空filter表中的計數器值】
#iptables -t filter -X 【清除filter表中自定義連】
# iptables -t filter -P INPUT DROP 【設置INPUT連默認策略爲DROP】
# iptables -t filter -P OUTPUT DROP
# iptables -t filter -P FORWROD DROP
# iptables -t filter -A INPUT -p tcp -j ACCEPT 【在INPUT連最後添加一條允許tcp協議的數據包進入的規則】
# iptables -t filter -R INPUT 1 -p tcp -j DROP 【替換INPUT連的第1條規則爲拒絕tcp數據包進入】
# iptables -t nat -vnL --line-number 【以詳細的、數字的格式列出nat表中的所有規則】
# iptables -t nat -D POSTROUTING 1 【刪除nat表POSTROUTING 連中的第1條規則】
三.條件匹配
1. 協議匹配:用於檢查數據包使用的協議,符合規則就允許,反之拒絕。允許使用的協議名在/etc/protocols文件中。
常用的協議有tcp,udp,icmp,ip 和all。【 -p 協議名 】
# iptables -I INPUT -p icmp -j REJECT 【拒絕進入防火牆本身的icmp數據包】
# iptables -A FORWARD -p udp -j ACCEPT 【允許轉發udp的所有數據包】
2. 地址匹配:用於檢查數據包的地址是否符合規則,包括源地址和目的地址。【-s 源地址, -d 目的地址】
# iptables -I FORWARD -s 10.0.0.0/8 -j DROP 【拒絕轉發來自10.0.0.0/8 網段的數據包】
# iptables -I FORWARD -d 80.0.0.0/8 -j DROP 【 拒絕轉發目的是80.0.0.0/8 網段的數據包】
(iptables -I 和 -A的區別
首先都是對鏈添加規則 -A參數是將規則寫到現有鏈規則的最後 -I參數默認是將一條規則添加到現有規則鏈的最前面當然也可以指定插入到第幾行 行數可以用數字來指定 比如說將一條規則添加到某一條鏈的第三行 那麼原來在第三行的規則就會降到下一行第四行)
3.端口匹配:用於檢查數據包的tcp或udp端口,需要和 “-p 協議類型” 一起使用【-sport 源端口,-dport 目的端口】
# iptables -A FORWARD -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT 【允許轉發來自10.0.0.0/8網段,目的端口是80的數據包】
# iptables -I FORWARD -s 10.0.0.0/8 -p tcp --sport 21 -j ACCEPT【允許轉發來自10.0.0.0/8網段,源端口是21的數據包】
4.接口匹配:用於檢查數據包從防火牆那個接口進入或出去,來判斷是否允許。
# iptables -A FORWARD -i eth0 -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT
【允許轉發從eth0進入,來自10.0.0.0/8網段,使用tcp 協議,目的端口椒80的數據包】
# iptables -A INPUT -i eth0 -s 80.0.0.0/8 -j DORP 【拒絕從eth0進入,來自80.0.0.0/8的數據包】
5.SNAT轉換:一般linux充當網關服務器時使用
SNAT只能用在nat表的POSTROUTING連,用於對源地址進行轉換。要結合 --to 使用。
# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to 202.106.1.1
【將來自10.0.0.0/8網段的所有數據包的源地址轉爲202.106.1.1】
# iptables -t nat -A POSTROUTING -i eth0 -s 80.0.0.0/8 -p tcp --dport 25 -j SNAT --to 202.106.1.1
6.DNAT轉換:只能用在nat表中的PREROUTING連,用於對目的地址或端口進行轉換。
# iptables -t nat -A PREROUTING -i eth1 -d 202.106.1.1 -p tcp --dport 80 -j DNAT --to 10.0.0.10
【將從eth1 進入,目的地址是202.106.1.1,使用tcp 協議,目的端口是80的數據包的目的地址轉爲10.0.0.1】
7.MASQUERADE:僞裝,是SNAT的特例。
# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth1 -j MASQUERADE
【將來自10.0.0.0/8網段,從eth1出去的數據包的源地址僞裝爲eth1接口地址】
四.拓展模塊
1.按來源MAC地址匹配
# iptables -t filter -A FORWARD -m --mac-source 00:02:b2:03:a5:f6 -j DROP
【拒絕轉發來自該MAC地址的數據包】
2.按多端口或連續端口匹配
20: 表示20以後的所有端口
20:100 表示20到100的端口
:20 表示20之前的所有端口
-m multiport [--prots, --sports,--dports]
# iptables -A INPUT -p tcp -m multiport --dports 21,20,25,53,80 -j ACCEPT 【多端口匹配】
# iptables -A INPUT -p tcp -dport 20: -j ACCEPT
# iptables -A INPUT -p tcp -sport 20:80 -j ACCEPT
# iptables -A INPUT -p tcp -sport :80 -j ACCEPT
3.還可以按數據包速率和狀態匹配
-m limit --limit 匹配速率 如: -m limit --limit 50/s -j ACCEPT
-m state --state 狀態 如: -m state --state INVALID,RELATED -j ACCEPT