当 iptables REJECT-s 时 ping 不会终止

当 iptables REJECT-s 时 ping 不会终止

如果网络接口断开:

ping 8.8.8.8
connect: Network is unreachable

很好地终止
内核正在向 ping 发送特定信号
,因此 ping 正在自行关闭。

但是如果网络接口已启动并且
我通过 iptables 阻止所有流量..

vi /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -j REJECT --reject-with icmp-net-unreachable
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT

但不会使 ping 关闭。并停止。

ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.0.100 icmp_seq=1 Destination Net Unreachable
From 192.168.0.100 icmp_seq=1 Destination Net Unreachable
From 192.168.0.100 icmp_seq=1 Destination Net Unreachable

它只是继续下去。

我尝试过其他 --拒绝-with旗帜

例如:

icmp-net-unreachable
icmp-host-unreachable
icmp-port-unreachable
icmp-proto-unreachable
icmp-net-prohibited
icmp-host-prohibited
icmp-admin-prohibited 

他们都不能让 ping 退出。

我想看到的是 ping 终止的方式
与网络接口断开连接时终止的方式相同。

如果这不能通过 iptables 完成..
是否有一个命令我可以运行来发送 ping
内核发送的相同信号.. 告诉它“网络接口未连接”?

(这将是一个谎言,但我希望它基本上自行关闭)

答案1

使用默认选项,Linux 上的 ping 永远不会自行停止,除非无法发送数据包。

如果过滤数据包,ping 命令仍然能够发送数据包,并且它们将在网络堆栈中被丢弃/拒绝。

如果想自动停止,可以使用-c选项。示例:

ping -c 4 8.8.8.8

在这种情况下,ping 将在 4 个数据包后停止,无论它们是否通过。

以下是官方手册的摘录:

   -c count
          Stop after sending count  ECHO_REQUEST  packets.  With  deadline
          option, ping waits for count ECHO_REPLY packets, until the time‐
          out expires.

答案2

由于您已经在超级用户(已被删除)上多次发布了这个问题(以各种形式)并且您没有得到答案,因此您可能必须改变您的方法。

如果你固定使用iptables它,就尽可能使用它。如果您确实考虑其他选择,您也许可以利用网络命名空间正如所讨论的问题。因此,您通常可以“没有网络”,而只是让应该能够使用它的进程使用另一个命名空间。对于这些过程,您仍然会遇到您遇到的超时“问题”。另一种方法是使用类似的东西应用装甲如中所解释的这个问题。不过,由于您想要超级安全,贾达,贾达,我想这不是您的选择。

由于您从未实际指定系统超时所需的时间,因此不清楚您是否确实遇到了一些异常行为。

相关内容