14

一連のルールに基づいてネットワーク パケットのペイロードを変更できる Linux ユーティリティを探しています。理想的にはiptablesnetfilterカーネル モジュールを使用しますが、それらは一般的なペイロード マングリングをサポートしていません。iptablesさまざまなヘッダーフィールド (アドレス、ポート、TOS など) を変更し、パケット内の任意のバイトに一致させることができますが、明らかにパケット内の任意のデータを変更することはできません。

効率性が懸念されるため、カーネル モジュールは大きなプラスになりますが、仕事を成し遂げる他のオプションを喜んで検討します。

アイデアをありがとう!


久々の更新:

このNFQUEUEモジュールは、Robert Gamble が提案した QUEUE モジュールの最新の実装です。コードをカーネルではなくユーザースペースで実行できるようにするための安全ボーナスを備えた、かなり単純なように見えました。

サイズを変更せずにペイロードを変更するだけであれば、実装はほとんど簡単でした。iptablesその場合、 「関心のある」パケットを選択してNFQUEUEターゲットに送信するルールを定義します。からのパケットを検査し、NFQUEUE必要に応じてデータを変更し、TCP および IP ヘッダーのチェックサムを再計算するコールバック関数を作成します。

ただし、私たちの使用例には、データ ストリームに追加の文字を挿入することが含まれます。これには、TCP ストリーム内の対応する SEQ/ACK 番号を増加させるというやや明白な副作用と、conntrackNAT を完全に破壊するほどモジュールを混乱させるというそれほど明白ではない副作用があります。多くの調査、頭を悩ませ、実験を重ねた結果、最も適切な解決策は、これらの特定のパケット (テーブル NOTRACK内のターゲットを含む) の接続追跡を無効にし、コールバックで処理することでした。rawあなたのトマトと憎しみのメールを保存してください。ボンネットの下に入れることを誇りに思っているわけではありませんが、次の氷河期の前に信頼できる製品を顧客に届ける唯一の方法でした. そして、それは良い話です。しかし、私はあなたの心からの気持ちを本当に感謝し、共有します.

iptablesバージョン 2 では、コールバックといくつかのルールをカスタム NAT および/またはconntrackヘルパーに置き換えることで、新たに発見された啓発を活用します。今回の演習で、遭遇した問題を解決する netfilter アーキテクチャに有機的に適合するカーネル モジュールを作成するのに十分な経験が得られたと確信しています。

4

2 に答える 2

6

私はそれを使用していませんが、QUEUE netfilter ターゲットは機能するようです。nflink ソケットと、ソケットに登録されたユーザー空間アプリケーションを使用して、ペイロードの変更を実行します。

libipqのman ページには、これを使用する方法の詳細が含まれており、簡単な例が提供されています。

于 2008-11-04T03:30:10.487 に答える
1

解像度:

最終的に、netfilter のカスタム モジュールが完成しました。これは明らかに、この仕事に「適切な」ツールです。

于 2009-04-02T14:50:05.413 に答える