当我将规则插入 INPUT 链时,它会被复制两次(即,与原始规则一起,存在三个完全相同的副本)。这是给出的命令:/sbin/iptables -w -I INPUT 20 -m comment -p tcp -s localhost -d localhost --comment 'TEST' -j LOG
此行为出现在 CentOS 计算机 ( Linux version 3.10.0-1127.8.2.el7.x86_64
)、Ubuntu 计算机(Linux 版本 5.6.1-x86)和原始 Debian 机器 ( Linux version 4.19.0-9-amd64
) 上。
但是,当我替换localhost
为时127.0.0.1
,这种情况不会发生(如果我仅将一个 localhost
值替换为其相应的地址,则只会生成一个重复项)。请注意,当我尝试将参数传递-n
给时iptables
,讽刺的是,它告诉我该选项不能与 insert () 一起使用Illegal option '-n' with this command
。但是,如果我运行strace
查看它的用途,很明显它iptables
正在打开/etc/resolv.conf
(但仅当我用作localhost
值而不是其 IP 地址时)。
这是设计使然吗?
更新:/etc/hosts
以下是localhost 和 中包含的内容127.0.0.1
:
127.0.0.1 localhost
127.0.1.1 ubuntu.nodes.hosting.com ubuntu
...
::1 localhost ip6-localhost ip6-loopback
更新2:感谢@9000的评论,我查看了hosts文件。给定一个/etc/hosts
包含以下行的文件(并且没有其他引用localhost
)...
127.0.0.1 localhost
::1 localhost
...注释掉第二行(即将名称localhost
与 IPv6 地址关联的行::1
),此命令...
/sbin/iptables -w -I INPUT 20 -m comment -p tcp -s localhost -d localhost --comment 'TEST' -j LOG
...仅生成单个规则。
/sbin/iptables
鉴于我正在调用而不是,为什么 IPv6 地址会被解析或对行为产生任何影响/sbin/ip6tables
?两者都链接到xtables-multi
.似乎没有检查用户想要哪个版本。而且,插入的重复规则不会因IP版本而异;它们都使用 IPv4 地址来指示源和目的地。