Iptables(2) - iptables命令的基本用法
阿新 • • 發佈:2018-07-16
端口號 lis command rep source pac 管理 其中 -m 一、iptables命令
iptables是一個規則管理工具. 具有添加、修改、刪除和顯示等功能.
規則和鏈都有計數器:
- pkts: 由規則或鏈所匹配到的報文的個數
- bytes: 由規則或鏈匹配到的所有報文大小之和
1.1 用法
用法:
$ iptables [-t table] SUBCOMMAND CHAIN CERTERIA -j TARGET
- -t table:
- filter
- nat
- mangle
- raw
- SUBCOMMAND:
- 鏈管理:
- -F: flush, 清空規則鏈, 省略鏈, 表示清空指定表上的所有鏈.
- -N: new, 創建新的自定義規則鏈.
- -X: drop, 刪除用戶自定義的規則鏈(空鏈).
- -Z: zero, 清零規則計數器.
- -P: Policy, 為指定鏈設置默認策略, 對filter表中的鏈而言, 默認策略通常有ACCEPT, DROP, REJECT.
- -E: rEname, 重命名自定義鏈, 引用計數不為0的自定義鏈, 無法改名, 也無法刪除.
- 規則管理:
- -A: append, 將新規則追加於指定鏈的尾部.
- -I: insert, 將新規則插入指定鏈的指定位置.
- -D: delete, 刪除指定鏈上的指定規則; 有兩種指定方式, 指定匹配條件和指定規則編號.
- -R: replace, 替換指定鏈上的指定規則.
- -C: check, 檢查指定鏈上的指定規則.
- 查看:
- -L: list, 列出指定鏈上的所有規則.
- -n: numberic, 以數字格式顯示地址和端口號.
- -v: verbose, 顯示詳細信息; -vv, -vvv.
- --line-numbers: 顯示規則編號.
- -x: exactly, 顯示計數器計數結果的精確值.
- 鏈管理:
- 目標:
- -j TARGET: jump至指定的TARGET.
- ACCEPT: 接受
- DROP: 丟棄
- REJECT: 拒絕
- RETURN: 返回調用鏈
- REDIRECT: 端口重定向
- LOG: 記錄日誌
- MARK: 做防火墻標記
- DNAT: 目標地址轉換
- SNAT: 源地址轉換
- MASQUERADE: 地址偽裝
- ...: 更多請查看man文檔.
- -j TARGET: jump至指定的TARGET.
-
匹配條件:
- 基本匹配:
- [!] -s, --src, --source IP|NetAddr: 檢查報文中源IP地址是否符合此處指定的範圍, 前面加“!”為非.
- [!] -d, --dst, --destination IP|NetAddr: 檢查報文中源IP地址是否符合此處指定的地址範圍.
- [!] -p, --protocol {tcp|udp|icmp}: 檢查報文中的協議, 即ip首部中的protocol所標識的協議.
- [!] -i, --in-interface IFACE: 數據報文的流入接口, 僅能用於PREROUTING, INPUT以及FORWARD鏈上.
- [!] -o, --out-interface IFACE: 數據報文的流出接口, 僅能用於FORWARD, OUTPUT以及FORWARD鏈上.
-
擴展匹配: -m macth_name --spec_options; 例如-m tcp --dport 22
- 隱式擴展: 對-p protocol指明的協議進行擴展, 可省略-m選項
- -p tcp:
- --dport PORT[-PORT]: 目標端口, 可以是單個端口或多個連續的端口.
- --sport PORT[-PORT]: 源端口.
- --tcp-flags LIST1 LIST2: 檢查LIST1所指明的所有標誌位, 且這其中, LIST2所表示出的所有標記為必須為1, 而余下的必須為0, 沒有在LIST1中指明的不做檢查. 標誌位, SYN, ACK, FIN, RST, PSH, URG; 示例, --tcp-flags SYN,ACK,FIN,RST SYN, 匹配tcp三次握手的第一次.
- --syn: 檢查是否為新建tcp連接請求的第一次請求.
- -p udp:
- --dport
- --sport
-
-p icmp:
- --icmp-type: 可用數字表示其類型, 0(echo-reply)和8(echo-request)
- 顯示擴展: 必須使用-m選項指定使用的擴展, 請查看iptables顯示擴展
- 基本匹配:
二、示例
2.1 在filter表中創建一個新的鏈, 名字叫做IN_putlic
$ iptables -t filter -N IN_public
$ iptables -t filter -L -n
...
Chain IN_public (0 references)
target prot opt source destination
2.2 修改IN_putlic鏈為OUT_putlic
$ iptables -t filter -E IN_putlic OUT_pulic
$ iptables -t filter -L -n
...
Chain OUT_pulic (0 references)
target prot opt source destination
2.3 修改filter表上的FORWARD鏈的規則為DROP
$ iptables -t filter -P FORWARD DROP
$ iptables -t filter -L -n
...
Chain FORWARD (policy DROP)
target prot opt source destination
...
2.4 打開firewalld服務, 刪除FORWARD鏈上的第九條規則
$ iptables -t filter -L -n --line-numbers
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
3 FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
4 FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
5 FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
6 FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
7 FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
8 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
9 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
$ iptables -t filter -D FORWARD 9
$ iptables -t filter -L -n --line-numbers
...
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
3 FORWARD_direct all -- 0.0.0.0/0 0.0.0.0/0
4 FORWARD_IN_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
5 FORWARD_IN_ZONES all -- 0.0.0.0/0 0.0.0.0/0
6 FORWARD_OUT_ZONES_SOURCE all -- 0.0.0.0/0 0.0.0.0/0
7 FORWARD_OUT_ZONES all -- 0.0.0.0/0 0.0.0.0/0
8 DROP all -- 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
2.5 對訪問本機TCP協議的報文通通放行
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p tcp -j ACCEPT
$ iptables -t filter -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 192.168.123.101
2.6 允許本機的所有TCP報文通通發出去
iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p tcp -j ACCEPT
$ iptables -t filter -L -n
...
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.123.101 0.0.0.0/0
2.7 將filter表上的所有鏈改為DROP
$ iptables -t filter -P INPUT DROP
$ iptables -t filter -P FORWARD DROP
$ iptables -t filter -P OUTPUT DROP
2.8 允許其他主機ping 192.168.123.101這臺主機
$ iptables -t filter -A INPUT -d 192.168.123.101 -p icmp -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p icmp -j ACCEPT
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
779 83096 ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101
0 0 ACCEPT icmp -- * * 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
458 64864 ACCEPT tcp -- * * 192.168.123.101 0.0.0.0/0
0 0 ACCEPT icmp -- * * 192.168.123.101 0.0.0.0/0
2.9 刪除filter表上的INPUT和OUTPUT鏈上的第二條規則
$ iptables -t filter -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 192.168.123.101
2 ACCEPT icmp -- 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.123.101 0.0.0.0/0
2 ACCEPT icmp -- 192.168.123.101 0.0.0.0/0
$ iptables -t filter -D INPUT 2
$ iptables -t filter -D OUTPUT 2
$ iptables -t filter -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.123.101 0.0.0.0/0
2.10 允許報文從ens33接口中流入和流出
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -i ens33 -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -o ens33 -j ACCEPT
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1256 133K ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101
0 0 ACCEPT all -- ens33 * 0.0.0.0/0 192.168.123.101
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
791 113K ACCEPT tcp -- * * 192.168.123.101 0.0.0.0/0
0 0 ACCEPT all -- * ens33 192.168.123.101 0.0.0.0/0
2.11 允許其他主機通過22號端口訪問192.168.123.101這臺主機
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p tcp --dport 22 -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.100 -d 0.0.0.0/0 -p tcp --sport 22 -j ACCEPT
$ iptables -t filter -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101 tcp dpt:22
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 192.168.123.100 0.0.0.0/0 tcp spt:22
2.12 刪除filter表上INPUT和鏈上的第二條規則
$ iptables -t filter -D INPUT 2
$ iptables -t filter -D OUTPUT 2
2.13 允許其他主機通過80端口訪問192.168.123.101這臺主機的httpd服務
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p tcp --dport 80 -j ACCEPT
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p tcp --sport 80 -j ACCEPT
$ iptables -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 0.0.0.0/0 192.168.123.101 tcp dpt:80
...
Chain OUTPUT (policy DROP 2 packets, 152 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT tcp -- * * 192.168.123.101 0.0.0.0/0 tcp spt:80
2.13 允許192.168.123.101這臺主機ping其他主機, 不允許其他主機ping 192.168.123.101.
$ iptables -t filter -A OUTPUT -s 192.168.123.101 -d 0.0.0.0/0 -p icmp --icmp-type 9 -j ACCEPT
$ iptables -t filter -A INPUT -s 0.0.0.0/0 -d 192.168.123.101 -p icmp --icmp-type 0 -j ACCEPT
$ iptables -t filter -L -n -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT icmp -- * * 0.0.0.0/0 192.168.123.101 icmptype 0
...
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 ACCEPT icmp -- * * 192.168.123.101 0.0.0.0/0 icmptype 9
Iptables(2) - iptables命令的基本用法