特定のパケットをブロックするための iptables ルール

特定のパケットをブロックするための iptables ルール

私は次の iptables ルールを使用しています:

iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH,ACK -m length --length 52 -m state --state ESTABLISHED -j DROP

サーバーからの不要なパケットをブロックする役割を果たしますが、ブロックすべきでないパケットもブロックしてしまいます。

以下は Wireshark でキャプチャされたパケットです。

unwanted packet:source=192.168.0.100    destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62401→38111 [PSH, ACK] Seq=15 Ack=19 Win=65536 Len=12

needed packet:source=192.168.0.100  destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62433→38111 [PSH, ACK] Seq=344 Ack=37855 Win=62825 Len=12

私の質問は、必要なパケットを許可し、不要なパケットをブロックするようにルールを変更する方法です。

答え1

ファイアウォール層でこれを行うことはできません (まあ、できますが、期待どおりの結果は得られず、望んでいる結果も得られません)。2 番目のパケット (必要なパケット) は、最初のパケット (不要なパケット) と同じ TCP ストリームの一部であり、TCP は信頼性の高い配信メカニズムです。つまり、OS はストリームの途中のパケットが失われたかどうかを知ることができます (各パケットのヘッダーのシーケンス番号によって、たとえば次のようになります)。http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure詳細については)。

ストリームの途中でパケットをフィルタリングすると、カーネルはパケットが失われたことを相手側に通知し続けるだけであり、相手側はそれを再送信し続けます (この動作はすでに確認されています。[TCP Retransmission]上記のマーカーに注意してください)。これらの再送信をブロックし続けると、ストリームは同期されなくなり、接続が切断され、ストリーム内の何も処理されなくなります。

これをアプリケーション層で行う必要があります。

編集私たち二人の間で交わされたコメントのやり取り(その多くは削除されています)から、この質問には必要な詳細がすべて含まれていない可能性があることが明らかになりました。この質問を閉じて(私の回答を受け入れるか、質問全体を削除して)、今何が起こっているのか、それがどのように起こっているのか、何を達成したいのかをかなり詳細に説明した新しい質問を書くことをお勧めします。

今、自信を持って言えるのは、iptablesTCPストリームの途中から1つのパケットを切り取って、そのストリームの残りが受信側アプリケーションによって正しく処理されると期待することはできません。

関連情報