重复的 iptables 规则有什么作用?

重复的 iptables 规则有什么作用?

我试图更好地理解 Docker 连接网络的方式并遇到了这个问题。注意:我不认为这与 Docker 本身有任何关系,这只是它出现的载体。如果这是我的错误看法,请随时纠正!

当 Docker 在 Swarm 模式下启动并运行时,将执行以下 iptables 命令:

> iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-ISOLATION  all  --  anywhere      anywhere
DOCKER     all  --  anywhere     (1)     anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere     (2)     anywhere
ACCEPT     all  --  anywhere     (3)     anywhere
DOCKER     all  --  anywhere     (4)     anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

我在输出中添加了 1,2,3,4 数字。数字 1 和 4 似乎是重复的。同样,2 和 3 看起来就像是彼此的完全相同的副本。这些的目的是什么?它们真的是重复的吗?如果没有,我如何看到下一层信息来识别它们?

另外,在第一部分中,如果有人可以解释dpt:domainvsdpt:bootps那也很酷!

答案1

您注意到的规则“对”1-4 和 2-3 很可能不重复,但您看不到您使用的命令的输出中的差异。如果您使用,iptables -L -v您将获得可能揭示差异的额外输出 - 当规则在不同的接口上运行时,这通常会发生(根据我的经验)。

dpt:domaindpt:bootps不同的目标端口规格。dpt:domain是目标端口 53(域或 DNS),而dpt:bootps是目标端口 67 (DHCP)。

编辑:你是对的,这种情况与 Docker 没有直接关系。这是 Docker 在您的环境中暴露的一种相对常见的情况,但在 Docker 环境之外也经常发生。

答案2

对第二个问题进行补充回答:运行iptables -L -n将以数字格式返回 IP 地址和端口,而不是将它们转换为主机名和服务名称。因此dpt:domainanddpt:bootps将被打印为dpt:53and dpt:67。这适用于您不知道后面的服务名称的每个主机/端口。

相关内容