iptables ポートミラーリング

iptables ポートミラーリング

ポート8001で受信したパケットのコピーをポート8002にインポートできる必要があります。次の試みたが--tee未定義のエラーが発生します。

sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee

答え1

さらに進むガレブiptables答え、もはや対象外の最新バージョン(v1.4.14)を使用している場合は、ROUTEDebian Wheezy*でテストしてください。

iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

「netcat」()を使ってman ncテストします。ターミナルウィンドウに次のように入力し、キーを押しますEnter

nc -l 8002

このコマンドは、2番目の端末ウィンドウに入力した入力を待ちます。

2番目の端末ウィンドウに次のように入力し、[次へ]をEnterクリックします。

nc 127.0.0.1 8001

コマンドは追加の入力を待ちます。何かを入力してEnterキーを押します。 2番目の端末ウィンドウでキーを押した後、2番目の端末ウィンドウEnterに入力したテキストが最初の端末ウィンドウに表示されます。Ctrlセッションを終了するには、2番目のウィンドウで-cを押します。


*この構文はいいえRHEL / Centos(6.5以下)でサポートされています:-(したがって、socatteeを使用して元のポートから着信パケットを2つの新しいポートに転送する必要があります。元の着信ポートでリッスンするプロセスがある場合は、リッスンするように再構成する必要があります。socat現在、元のポートのリスナーと同様に、転送されたポートの1つです。このSEポストたとえば、socatポート複製構文があります。

答え2

この--teeフラグはDNATチェーンの一部ではなく、ROUTEの一部です。宣言した後にのみ使用できます-j ROUTE。次のように、iptablesでこのトピックに関する具体的なヘルプを入手できます。

 $ iptables -j ROUTE help

私はあなたのiptablesコマンドを見ていますが、それは私には意味がありません。質問に「受信パケット」と言うとき、パケットの送信元ポートと送信元ポートを一致させたいのはなぜですか?存在する着信トラフィックを2つのポートに分割したいのですか、それとも1つのポートの出力を別のポートの入力に接続したいですか?

前者の場合、実際には2つのステップがあります。 tee を使用してパケットのコピーを取得すると同時に、パケットが破損してポート番号を変更することはできません。まず、自分にパケットのコピーを送信してから、そのコピーのみを一致させ、宛先ポートを変更する2つの手順でこれを試すことができます。警告:テストされていません。次の疑似コードを検討してください。

$ sudo iptables -A PREROUTING -t mangle -p tcp -s !127.0.0.1/32 --dport 8001 -j ROUTE --gw 127.0.0.1 --tee
$ sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

関連情報