为什么这个 IPTables 命令会创建 4 个条目?

为什么这个 IPTables 命令会创建 4 个条目?

当我执行此 IPTables 命令时: iptables -A INPUT -p tcp -m tcp --dport 9080 -s localhost -d localhost -j ACCEPT

iptables -L显示:

ACCEPT     tcp  --  localhost            localhost            tcp dpt:9080
ACCEPT     tcp  --  localhost            localhost            tcp dpt:9080
ACCEPT     tcp  --  localhost            localhost            tcp dpt:9080
ACCEPT     tcp  --  localhost            localhost            tcp dpt:9080

为什么是四次?我的意思是,它实现了我想要的功能,但是为什么需要显示四次?

编辑: 在我这边重现此问题(多次)输入的所有命令是:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -d 192.99.169.167/32 -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

iptables -A 输入 -s 本地主机 -d 本地主机 -p tcp -m tcp --dport 9080 -j 接受

iptables -A 输入 -s 本地主机 -d 本地主机 -p tcp -m tcp --dport 9081 -j 接受

iptables -A INPUT -j DROP
iptables -P INPUT DROP

答案1

除非有错误,否则不应该。但是,iptables -A它不是幂等的,如果您多次运行它(或iptables -A针对现有或已加载的配置运行冗余命令),它将再次添加规则,无论它是否是处置规则的精确副本。

可能发生的另一件事是,解析会为 name 提供多个结果localhost。这种情况非常罕见,因为最佳实践规定不要在 iptables 命令中使用名称。您可以检查/etc/hosts文件以确定这一点,也可以使用iptables -nL显示 IP 是什么。在这种情况下,是的,它确实需要为您的请求添加多个规则(因为在这种特殊情况下,它会在插入时解析和扩展名称),并且您可能应该明确指定127.0.0.1这是否是您想要的。

相关内容