查看iptables表
iptables -t filter -L
iptables -t nat -L
iptables -t mangle -L
介紹iptables命令
iptables -t table 命令 chain rules -j target
table 可以是filter、nat、mangle,默認是filter
-p 或--policy 定義默認策略
-A 或--addend 在規則列表的最後增加一條規則
-I 或--insert 在指定的位置插入一條規則
-D 或--delete 刪除一個規則
-R 或--replace 替換規則列表中的某個規則
-F 或--flush 刪除表中所有規則
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -I INPUT -p icmp -j DROP
iptables -t filter -I INPUT 2 -p icmp -j DROP
iptables -t filter -D INPUT 1
iptables -t filter -R INPUT 1 -p icmp -j ACCEPT
iptables -t filter -F
iptables 匹配選項
-i 或--in-interface---------指定數據包從哪個網絡接口進入。
-o 或--out-interface------指定數據包從哪個網絡接口輸出
-p 或--protocol------------協議類型,指定數據包匹配協議
-s 或--source--------------指定數據包匹配的源地址
-d 或--destination--------指定數據包匹配的目標地址
--sport----------------------指定數據包匹配的源端口號
--dport----------------------指定數據包匹配的目標端口
iptables 處理動作
-j 參數用來指定要進行的處理動作,常用的處理動作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、RETURN、MARK。
ACCEPT:
將封包放行,進行完此處理動作後,將不再匹配其它規則,直接跳往下一個規則鏈。
示例:iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
DROP:
丟棄封包不予處理,進行完此動作後,將不再匹配其它規則,直接中斷過濾程序。
示例:iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
REJECT:
阻攔該封包,並傳送封包通知對方,可以傳送的封包有幾個選擇:ICMP port-unreachable、ICMP echo-reply或是tcp-reset(這個封包會要求對方關閉連接)、進行完此處理動作後,將不再匹配其它規則,直接中斷過濾程序。
示例:iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT
LOG:
將封包相關信息記錄到/var/log中,日誌文件詳細位置查閱/etc/syslog.conf配置文件,進行完此動作處理後,將會繼續匹配其它規則。
示例:iptables -t filter -I INPUT -p tcp --dport 80 -j LOG
iptables 擴展匹配選項
匹配擴展中,還需要加-m引用模塊的顯示擴展
參數 -m state
基於狀態監測的包過濾,指定監測那種狀態
--state {NEW, ESTTBLISHED, INVALID, RELATED}
說明:用來比對鏈接狀態,鏈接狀態共有四種NEW, ESTTBLISHED, INVALID, RELATED。
INVALID 表示該封包的鏈接編號(Session ID)無法辨識或編號不正常
ESTABLISHED 表示該封包屬於某個已經建立的連接
NEW 表示該封包想要起始一個連接(重設連接或將連接重定向)
RELATED 表示該封包是屬於某個已經建立的連接,所建立的新連接。例如:FTP-DATA 連接必定是源自某個FTP連接
示例:DMZ區域中的服務器不能主動建立TCP連接,在OUTPUT鏈中將所有SYN報文丟棄
iptables -t filter -I OUTPUT -m state --state NEW -j DROP
參數 -m icmp --icmp-type
ping命令使用ICMP協議檢查網絡是否暢通,ICMP有兩種常見的類型的數據包即icmp-type,常用的類型爲echo-reply和echo-request。也可以使用代碼來表示。
echo-reply 0
echo-request 8
示例:服務器可以ping通其他機器,其他機器不能ping通本機器
iptables -t filter -A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
參數 -m multiport
指定多端口號
--sport 源端口
--dport 目標端口
可以使用"起始端口:結束端口"的格式指定一個範圍的端口
示例:對外只放行22,80,1024-1026端口,其它端口的報文全部丟棄
iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80,1024:1026 -j ACCEPT
iptables -t filter -P INPUT DROP
參數 -m iprange
指定多IP段
--src-rangeip-ip
--dst-rangeip-ip
示例:只允許192.168.56.1-192.168.56.254訪問本服務器22,88端口,其它IP拒絕訪問
iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80 -m iprange --src-range 192.168.56.1-192.168.56.254 -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80 -j DROP
參數 -m connlimit
--connlimit-above 限定連接數
示例:ssh只允許同一個IP建立兩個會話,超出丟棄,防止ssh爆破
iptables -t filter -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
參數 -m limit
--limit
用來比對某段時間內封包的平均流量,上面的例子是用來比對每小時平均流量是否超過300個封包。
除了每小時平均一次外,也可以每秒鐘、每分鐘、每小時或每天平均一次,
示例:
iptables -t filter -I INPUT -m limit --limit 300/second -j ACCEPT
iptables -t filter -A INPUT -j DROP
參數 -m mac --mac-source
用來比對封包來源網絡接口網卡硬件地址,這個參數不能用在OUTPUT和Postrouing規則鏈上。
示例:ssh服務只允許MAC爲 0A:00:27:00:00:14 訪問,其他全部拒絕
iptables -t filter -A INPUT -p tcp --dport 22 -m mac --mac-source 0A:00:27:00:00:14 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP