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

それは続行されます。

私は別のことを試しました --拒否バナー

たとえば、

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

それらのどれも終了するように言うことはできません。

私が見たいのは、
ネットワークインターフェイスが切断されたときに終了するのと同じ方法で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.

おすすめ記事