確立された接続を iptables でリダイレクトするにはどうすればよいですか?

確立された接続を iptables でリダイレクトするにはどうすればよいですか?

次のルールを使用して、ポート 1986 宛てのすべてのトラフィックをポート 9 にリダイレクトして「接続拒否」を引き起こす iptables ルールを作成しようとしています。

iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1986 -j DNAT --to-destination :9

これは新しい接続にはうまく機能しますが、確立された接続はこのルールをスキップし、拒否されないという問題があります。

NOTRACK接続状態の追跡を回避するために、raw テーブルにルール
を追加しようとしましたが、効果はありませんでした。

iptables -t raw -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j NOTRACK

NAT ルールに状態を追加しても機能しません。

iptables -t nat -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j DNAT --to-destination :9

確立された接続で送信されたパケットに対して 'connection declined' エラーを発生させるために iptables をどのように使用すればよいですか?

答え1

このDNATルールは、TCP 3 ウェイ ハンドシェイクで接続が確立されたときに、conntrack テーブルにエントリを作成します。

このnotrackルールは、新しい conntrack エントリの作成を無効にするようです。ただし、既存の conntrack エントリの使用は妨げません。

接続はすでに確立されているため、conntrack テーブルにエントリがすでに存在し、カーネルはそれを使用してトラフィックを転送します。

conntrack テーブルからフローを削除するには、ツールを使用する必要がありますconntrack。例:

conntrack -D -s 192.168.1.10 -d 192.168.100.20 -p tcp --dport 1986

このコマンドを発行すると、iptables の新しい DNAT ルールを使用して、接続が conntrack に再度追加されます。その後、新しい宛先サーバーは接続を拒否します。新しい宛先サーバーが正確に何を返すかはわかりませんが、TCP RST かもしれません。

関連情報