REDIRECTの代わりにiptables TPROXYを使用する

REDIRECTの代わりにiptables TPROXYを使用する

を実行していますDebian 8。すべてのパケットを傍受しようとしており、現在iptablesこれを使用しています:

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 5000

これは機能しているように見えますが、パケットの元の宛先ポートを取得する可能性がなくなります。

TPROXYは使用されていないため、これが正しい方法であると読みましたNAT

これを次のように置き換えてみましたREDIRECT:

iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 5000

しかし、そうすることで、私のサービス上のパケットが傍受されることはありません...

答え1

カーネル ツリーの Documentation/networking/tproxy.txt には次の内容が記載されています。

'TPROXY' ターゲットは、NAT に依存せずに同様の機能を提供します。上記の iptables ルールセットに次のようなルールを追加するだけです。

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
  --tproxy-mark 0x1/0x1 --on-port 50080

これを機能させるには、リスニング ソケットに対して (SOL_IP、IP_TRANSPARENT) を有効にするようにプロキシを変更する必要があることに注意してください。

アプリのリスニングソケットに上記のオプションを設定しましたか?

また、上記のドキュメントでは、パケットをローカルに配信するには適切な IP ルーティング ルールとテーブルを追加する必要があることにも注意してください。

関連情報