注:資料選自 Iptables 指南 http://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html
iptabes 命令 匹配 動作
命令:
-A INPUT 在所選鏈的最後添加規則
-D INPUT 從所選鏈中刪除規則,完整的規則或者編號
-R INPUT 1 替換所選鏈中的#1規則
-I INPUT 1 在所選鏈相應位置插入規則
-L INPUT 顯示所選鏈的規則,如果沒有指定鏈,則顯示所有規則,
-F INPUT 清空所選鏈,如果沒有指定鏈,則清除所有鏈,
-N person1 建立名爲person1的鏈
-X person1 刪除名爲person1的鏈
-P INPUT DROP 爲鏈指定默認動作
-E person1 person2 對自定義鏈重命名
匹配:
-p tcp,udp;-p !tcp 匹配協議
-s 192.168.0.12; -s 192.168.0.0/24;-s !192.168.0.0/24 匹配源地址
-d 匹配目的地址,和-s用法一樣
-i 匹配包進入本地所用的網絡接口,只能用於INPUT,FORWARD和 PREROUTING這三個鏈(+)是通配符;
-o 匹配包離開本地所用的網絡接口,和-i用法一樣;
TCP匹配:
--sport 匹配源地址端口,--sport 22:80 --sport !22,不能識別不連續的端口列表
--dport 匹配目的地址端口,用法和--sport一樣
--tcp-flags 匹配指定的TCP標記,
iptables -p tcp --tcp-flags SYN,FIN,ACK SYN 表示匹配那些SYN標記被設 置而FIN和ACK標記沒有設置的包;
iptables -p tcp --tcp-flags ! SYN,FIN,ACK SYN 表示匹配那些FIN和ACK標 記被設置而SYN標記沒有設置的包;
UDP匹配:
--sport,-dport 用法和tcp一樣
ICMP匹配:
--icmp-type 名字可以用iptables --protocol icmp --help 查看
顯式匹配 -m,--match
Limit match:
-m limit --limit 3/minute 每分鐘3個
-m limit --limit-burst 20 初始總數20個;
例:-m limit --limit 3/minute --limit-burst 5 開始時有個,用完後沒分鐘增加3個
MAC match:
-m mac -mac-source 00:00:00:00:00:00
Multiport match: 只能與-p tcp或者-p udp一起使用
-m multiport --source-port 源端口多端口匹配,最多可以指定15個端口
-m multiport --destination-port 目的端口
-m multiport --port 同端口多端口匹配
State match:
-m state --state RELATED,ESTABLISHED 狀態有:INVALID,ESTABLISHED,NEW和RELATED
動作: -j --jump
-j ACCEPT 通過當前鏈
-j DNAT --to-destination 只能用在nat表的PREROUTING和OUTPUT鏈中,例:
iptables -t nat -A PREROUTING -d 15.45.23.67 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10
防火牆外網ip:$INET_IP,內網ip:$LAN_IP,web服務器ip:$HTTP_IP
客戶端ip:外網$INET_C,內網$LAN_C
iptables -t nat -A PREROUTING -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $HTTP_IP
iptables -t nat -A POSTROUTING -d $HTTP_IP -p tcp --dport 80 -j SNAT --to-source $LAN_IP
---- 作者此處的建議是dns服務器或者DMZ
iptables -t nat -A OUTPUT -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $HTTP_IP
-j DROP 丟掉
-j LOG 日誌 選項:
--log-level 日誌級別
iptables -A FORWARD -p tcp -j LOG --log-level debug
--log-prefix 前綴
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
--log-tcp-sequence 把包的TCP序列號和其他日誌信息一起記錄下來
iptables -A INPUT -p tcp -j LOG --log-tcp-sequence
--log-tcp-options 記錄TCP包頭中的字段大小不變的選項
iptables -A FORWARD -p tcp -j LOG --log-tcp-options
--log-ip-options 記錄IP包頭中的字段大小不變的選項
iptables -A FORWARD -p tcp -j LOG --log-ip-options
-j MASQUERADE --to-ports MASQUERADE和SNAT一樣,只能用於nat表的 POSTROUTING鏈,而且它只有一個選項
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
-j REDIRECT --to-ports 只能用在nat表的PREROUTING、OUTPUT鏈和被它們調用的自定義鏈
-j REJECT
-j RETURN 返回
-j SNAT --to-source 只能用在nat表的POSTROUTING鏈裏,例
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000
-j ULOG 選項:
--ulog-nlgroup 指定向哪個netlink組發送包,比如-- ulog-nlgroup 5。一個有32個netlink組,它們被簡單地編號位1-32
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-nlgroup 2
--ulog-prefix 指定記錄信息的前綴,以便於區分不同的信息。使用方法和 LOG的prefix一樣,只是長度可以達到32個字符
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-prefix "SSH connection attempt: "
--ulog-cprange 指定每個包要向“ULOG在用戶空間的代理”發送的字節數
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-cprange 100
--ulog-qthreshold 告訴ULOG在向用戶空間發送數據以供記錄之前,要在內核裏 收集的包的數量
iptables -A INPUT -p TCP --dport 22 -j ULOG --ulog-qthreshold 10