iptables [-t 表] -命令 匹配 操作
說明
(1) -t 表
表選項用於指定命令應用於哪個iptables內置表。
(2)命令
命令選項用於指定iptables的執行方式,包括插入規則,刪除規則和添加規則,如下表所示
命令 說明
-P | --policy 鏈名> | 定義默認策略 |
-L | --list 鏈名> | 查看iptables規則列表 |
-A | --append 鏈名> | 在規則列表的最後增加1條規則 |
-I | --insert 鏈名> | 在指定的位置插入1條規則 |
-D | --delete 鏈名> | 從規則列表中刪除1條規則 |
-R | --replace 鏈名> | 替換規則列表中的某條規則 |
-F | --flush 鏈名> | 刪除表中所有規則 |
-Z | --zero 鏈名> | 將表中數據包計數器和流量計數器歸零 |
-X | --delete-chain 鏈名> | 刪除自定義鏈 |
-v | --verbose 鏈名> | 與-L它命令一起使用顯示更多更詳細的信息 |
(3) 匹配規則
匹配選項指定數據包與規則匹配所具有的特徵,包括源地址,目的地址,傳輸協議和端口號,如下表所示
匹配 說明
-i --in-interface 網絡接口名> 指定數據包從哪個網絡接口進入,
-o --out-interface 網絡接口名> 指定數據包從哪個網絡接口輸出
-p ---proto協議類型 指定數據包匹配的協議,如TCP、UDP和ICMP等
-s --source 源地址或子網> 指定數據包匹配的源地址
--sport 源端口號> 指定數據包匹配的源端口號
--dport 目的端口號> 指定數據包匹配的目的端口號
-m --match 匹配的模塊 指定數據包
規則所使用的過濾模塊
linux netfilter/Iptables包過濾防火牆
帶狀態檢查的包過濾防火牆:狀態:new,established,invalid,related
new:syn=1 新發起的請求
established : syn<>1 ack=1 fyn<>1 已建立的連接
output:一般都是ESTABLISHED
related:關聯到的狀態. ftp 的連接
默認規則:
*filter # 使用 iptables -P INTPUT|OUTPUT|FORWARD DROP :INPUT DROP [41:5302] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7/32 -p tcp -m tcp --dport 22 -j ACCEPT # 在input鏈上 -s指定源地址:172.16.0.0/16 -d 指定目標地址 172.16.100.7 (本機) -p 指定協議(tcp) -m 擴展選項(tcp) 允許172.16.0.0/16這個網段用戶能夠訪問本地的sshd服務進行訪問 iptables -A INPUT -d 172.16.100.7/32 -p tcp -m tcp --dport 80 -j ACCEPT # 在input鏈上 -d 指定目標地址 172.16.100.7 -s 忽略表示所有的,允許所有用戶對本地的web服務進行訪問 iptables -A INPUT -i lo -j ACCEPT # 允許本機對自己本地迴環地址進行訪問 iptables -A OUTPUT -s 172.16.100.7/32 -d 172.16.0.0/16 -p tcp -m tcp --sport 22 -j ACCEPT # 在output鏈上 -s指定源地址:172.16.100.7(本機) -d 制動目標地址 172.16.0.0/16 -p 指定協議(tcp) -m 擴展選項(tcp) 允許172.16.0.0/16這個網段用戶能夠訪問本地的sshd服務進行訪問 iptables -A OUTPUT -s 172.16.100.7/32 -p tcp -m tcp --sport 80 -j ACCEPT # 在output鏈上 -s指定:172.16.100.7(本機) -p 指定協議(tcp) -m 擴展選項 允許所有用戶對本地的web服務進行訪問 -j :指定允許 或拒絕(ACCEPT DROP) -A OUTPUT -o lo -j ACCEPT # 允許本機對自己本地迴環地址進行訪問
# iptables -P INPUT DROP # 將默認INPUT鏈策略改爲拒絕,起初是ACCEPT # iptables -P OUTPUT DROP # 將默認OUTPUT鏈策略改爲拒絕,起初是ACCEPT # iptables -L -v -n Chain INPUT (policy DROP 5 packets, 843 bytes) pkts bytes target prot opt in out source destination 247 17320 ACCEPT tcp -- * * 0.0.0.0/0 172.16.251.132 tcp dpt:22 state NEW,ESTABLISHED Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 146 14752 ACCEPT tcp -- * * 172.16.251.132 0.0.0.0/0 tcp spt:22 state ESTABLISHED # iptables -A INPUT -d 172.16.251.132 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -s 172.16.251.132 -p udp --dport 53 -m state --state ESTABLISHED -j ACCEPT # 開放所有用戶對本機DNS服務器的請求 # iptables -A INPUT -d 172.16.251.132 -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -s 172.16.251.132 -p tcp --dport 53 -m state --state ESTABLISHED -j ACCEPT # 因爲DNS主從複製的時候使用的就是TCP的53號端口,所以也要開放
規則優化:
# iptables -A INPUT -d 172.16.100.7/32 -m state --state ESTABLISHED -j ACCEPT # 所有用戶所有的數據包只要是,只要是已連接的請求統統ACCEPT統統放行 # iptables -A INPUT 2 -d 172.16.251.132 -p tcp -m state --state NEW,ESTABLISHED -m multiport --destination-ports 22,53,80 -j ACCEPT # 使用-m multiport --destination-ports 22,53,80 指定多個目標端口 # iptables -A OUTPUT -s 172.16.100.7/32 -m state --state ESTABLISHED -j ACCEPT # 所有隻要使用本機流出的數據包並且狀態爲established 統統放行