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.

答え2

この質問をSuperUser(以降は削除)に何度も(さまざまな形式で)投稿しましたが、回答が得られなかったため、アプローチを変更する必要があるかもしれません。

定期的に使用する場合は、iptables可能であればいつでも使用してください。他のオプションを検討している場合は、次の点を利用することもできます。ネットワークネームスペース議論これ質問。したがって、通常は「ネットワークなし」を実行し、それを使用できる必要があるプロセスで使用される別の名前空間を持つことができます。これらのプロセスを使用すると、依然として同じタイムアウトの「問題」が発生します。別の方法は、次のようなものを使用することです。鎧を適用説明したようにこの問題。しかし、あなたは非常に安全にしたいので、Jada、Jadaはそれがあなたには選択肢ではないようです。

システムがタイムアウトするのにかかる時間を実際に指定しないため、実際に異常な動作が発生するかどうかは不明です。

関連情報