iptables icmp ルール適用遅延

iptables icmp ルール適用遅延

すべての着信接続を無効にするようにiptablesを設定しました。

:INPUT DROP [0:65535]

iptablesを起動した後、次のコマンドを実行してpingを有効にします。

/usr/sbin/iptables -A INPUT -m icmp --icmp-state 8 -j ACCEPT
/usr/sbin/iptables -A INPUT -m icmp --icmp-state 0 -j ACCEPT

iptablesルールは、/etc/init.d/iptables statusWindowsとLinuxの両方のPCでデバイスをpingできます。次に、次のコマンドを実行して削除します。

/usr/sbin/iptables -D INPUT -m icmp --icmp-state 8 -j ACCEPT
/usr/sbin/iptables -D INPUT -m icmp --icmp-state 0 -j ACCEPT

iptablesルールが削除されたことを確認しました/etc/init.d/iptables status。予想通り、Linux PCでデバイスをpingできません。ただし、Windows PCで1〜2分間デバイスをpingできますが、pingはできません。

Windows XP PCはデバイスを無期限にpingしません(つまり、-tを使用しません)。しかし、この結果が現れるのはなぜですか?

答え1

あなたが提供したすべての情報によれば、ルールを削除すると、Linux PCのIPアドレスはもう存在しなくなり、トラフィックが減少するとiptables conntrack table推測されます。 Windows PC の IP アドレスがまだ conntrack テーブルに表示される可能性があるため、そのトラフィックは許可されます。

iptables各ルールを上から下に作業します。したがって、ルールを定義する順序がiptables非常に重要です。あなたの場合、チェーンは次INPUTのとおりです。

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.0/255.0.0.0 -j ACCEPT
....
-A INPUT -m icmp --icmp-state 8 -j ACCEPT
-A INPUT -m icmp --icmp-state 0 -j ACCEPT

したがって、ルールを削除しても、ICMPクライアント接続がconntrackテーブルにある場合は、まだ許可されていることがわかりますiptables

あなたは読むことができますiptables conntrack table ここ:

接続で双方向トラフィックが確認されると、conntrack エントリは [UNREPLIED] フラグをクリアしてリセットします。接続に双方向トラフィックがないことを示すエントリは、エントリの末尾にある[ASSURED]フラグに置き換えられます。 [ASSURED]フラグはこの接続が保証され、追跡可能な最大接続数に達しても削除されないことを示します。したがって、保証されていない接続([ASSURED]とマークされていない接続)とは異なり、[ASSURED]とマークされた接続は削除されません。接続追跡テーブルが保持できる接続の数は、最近のカーネルのip-sysctl機能で設定できる変数によって異なります。このエントリが保持するデフォルト値は、保持するメモリの量によって大きく異なります。 128 MB RAMでは8192個のエントリが得られ、256MB RAMでは16376個のエントリが得られます。 /proc/sys/net/ipv4/ip_conntrack_max 設定で設定を読み込んで設定できます。

答え2

iptablesは以前の/現在の接続の一部の状態を維持するため、iptablesへの変更が遅れて適用されるように見える場合があります。状態を表示して操作するには、まずconntrackをインストールする必要があります。

sudo apt-get conntrack

これにより発行が可能です。

sudo conntrack -L

その状態の以前/現在の接続のリストを表示します。

以下を実行して、この状態を完全に消去できます。

sudo conntrack -F

ただし、現在適用されているルールがまだ許可されていても、現在開いているすべての接続が終了します。ステータステーブルから削除された内容をより詳細に確認できます。走る

sudo conntrack

このコマンドに関するいくつかの基本的なヒントを入手してください。通常指定されていない場合、コマンドは機能する "conntrack"テーブルを扱います。たとえば、NATをオンまたはオフにするユースケースの場合は、次のようにします。

sudo conntrack -D --any-nat

適切な iptables コマンドを実行して nat をオフまたはオンにします。

答え3

ルールセットの先頭にルールを追加して、ICMP プロトコルを明示的にブロックすることができます。

iptables -I INPUT -p icmp -j DROP

1つの注意点は、RELATED、ESTABLISHEDルールがルールセットの最後のルールでなければならないことです。それ以外の場合は、ESTABLISHED状態が他のルールと一致するように意図されたパケットと一致し、最終的にカウンタを無効にし、現在経験している状況などのデバッグを悪夢にします。

答え4

これは通常の動作であり、RELATED、ESTABLISHEDが実行する必要がある操作です。

「関連して確立された規則は規則の最後の規則でなければなりません」は完全にナンセンスです。各回答パッケージに対してチェーン全体を超えたくないので、とにかくこれを明示的に拒否/削除せずに動作を変更しますが、処理を実行します。各パッケージは各ルールを評価し、最後のルールがそれを受け入れるため、コストが高くなります。

何の理由もなく、順方向チェーンの27のルールを通じて、8億3,800万個のパッケージを入れる楽しみをお楽しみください。正しいルールセットは最も高いヒット率を持つルールでソートされ、最後に最後の拒否/削除ルールが割り当てられます。

Chain FORWARD (ポリシー DROP 0 パケット、0 バイト) num pkts バイト target prot opt in out ソース 宛先 1 838M 852G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED INBOUND すべて - - Wanlan0.0.0.0/0 0.0.0.0/0 0

関連情報