当我执行此 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
这是否是您想要的。