2009-05-06 6 views
0

アプリケーション層にワームフィルタリングユーティリティを書き込もうとしています。iptablesを使用して一致する文字列を含むパケットをドロップすると、後続のすべてのパケットが一致しなくなります。

私は特定の部分文字列でTCPパケットをドロップするように設定しています。

のiptables -AのTCP -m列-p入力整合ストリングを有するパケットが偶数で、後続のすべてのパケットを発見された後、しかし "テスト" -j DROP --algo KMP

を--string一致しない文字列は、iptableからルールをフラッシュするまで削除されます。

私はなぜこれが起こっているのか、それに対する解決策を知りたいと思います。

おかげ

+1

私はserverfault.com上でそれは良い質問と考えられます。 – innaM

答えて

2

TCPは、送信されるデータの順序を維持指向信頼性の高いプロトコルが接続されています。特定のペイロードがそこに達するまで変更し続けますので、古いペイロードに達するまで他の後続のペイロードを送信することはできません。そのため、後続のすべてのパケットが破棄されると感じます。

udpに同様のルールを設定しても、これは発生しません。これは、文字列と一致しないすべての後続パケットを受信できるようになります。これは、udpがコネクションレスで信頼性の低いプロトコルであるためです。

0

ここで少し遅れますが、同様の問題を抱えている人がいます。これを回避する1つの方法は、RAWチェーン内でこのルールを実行することです。どんな種類のconntrackがパケットに置かれる前に、すべてのパケットがここでヒットします。したがって、ここでフィルタリングするのが最善です。

iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp 
関連する問題