目前,我有类似的东西:
iptables -A INPUT -p ICMP --icmp-type 8 -j DROP
iptables -A INPUT -s x.x.x.x -p ICMP --icmp-type 8 -j ACCEPT
然而,当我运行第二个命令时,看起来 iptables 就停止了。我必须摆脱它才能回到航站楼。也许我做错了,但一些见解会有所帮助。
答案1
您需要以相反的顺序运行规则。 Iptables 对命令的运行顺序很敏感。如果一条规则匹配,它不会继续检查更多规则,它只是遵守该规则。如果您先设置丢弃,则接受规则将永远不会被测试。通过使用源 IP 设置特定的接受,然后设置更通用的策略来丢弃您将影响预期的行为。
iptables -A INPUT -s x.x.x.x -p ICMP --icmp-type 8 -j ACCEPT
iptables -A INPUT -p ICMP --icmp-type 8 -j DROP
至于您似乎遇到的挂起问题,您确定输入了有效的IP地址吗?也许您可以为该命令添加前缀,以strace iptables …
查看它在挂起时正在执行的操作。
答案2
不要随意丢弃 ICMP!当然,某些 ICMP 请求是危险的,但其余的请求是网络正常工作所必需的(想想“目的地无法到达”和那个动物园)。
答案3
您必须添加如下规则:
$ iptables -A INPUT -s x.x.x.x -p icmp --icmp-type echo-reply -j ACCEPT