今天我查看了 iptables 的手册页,发现 -A 描述中说“附加一个或者更多规则到所选链的末尾”。这是否意味着如果我有:
iptables -A INPUT {...rule1...}
iptables -A INPUT {...rule2...}
可以简化成一行吗?
iptables -A INPUT {...rule1; rule2...}
我在谷歌上搜索过,找不到任何人这样做的例子,但如果可能的话,它只是我的一些脚本。
答案1
一次调用中只能提供一个规则定义iptables -A
。
但是,如果您使用的地址(例如 www.example.com)恰好解析为多个地址,则会附加多个规则,每个地址一个规则。
例如:(使用虚假 IP...):
$ host www.example.com
www.example.com has address 10.1.2.3
www.example.com has address 10.1.2.4
$ sudo iptables -A INPUT -s www.example.com -j ACCEPT
$ sudo iptables -L INPUT -vn
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
208K 250M ACCEPT all -- * * 192.168.0.0/16 0.0.0.0/0
0 0 ACCEPT all -- * * 10.1.2.3 0.0.0.0/0
0 0 ACCEPT all -- * * 10.1.2.4 0.0.0.0/0
因此现在您已经使用一次调用插入了多个规则iptables -A
。
我同意这从手册页描述中不是很明显。
答案2
每个 iptables 调用仅包含 1 条规则。“附加”选项与“插入”选项相反。附加选项表示...新规则位于规则列表的末尾,而插入选项则表示将规则添加到列表的顶部。
iptables -I INPUT {Rule1}
iptables -I INPUT {Rule2}
将导致规则如下:
{Rule2}
{Rule1}
在哪里
iptables -A INPUT {Rule1}
iptables -A INPUT {Rule2}
会导致
{Rule1}
{Rule2}