conntrack エントリの詳細

conntrack エントリの詳細

接続追跡に関するIptablesのドキュメントを読んでいます。ここ私が強調した次の部分を計算するのに問題があります。

tcp   6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 \
 dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 \
 dport=32775 [ASSURED] use=2

この例には、特定の接続の状態を知るために conntrack モジュールによって維持されるすべての情報が含まれています。まず、プロトコルがあります。この場合はtcpです。以下は、通常の10進符号化でも同じ値です。 [...]最後に返されたパケットで予想される内容を調べます。この情報には、送信元IPアドレスと宛先IPアドレスが詳細に記載されています(パケットが再び私たちに渡されるので、どちらも逆です)。接続の送信元および宛先ポートにも同様に適用されます。

予想されるIPとポート(ただし逆の場合)を追跡するのが便利な理由はわかりません。パケットが到着すると、IPとポートのペアのみを使用してルックアップを実行し、見つからない場合は同じフィールドを使用してルックアップを実行できます。この情報を維持するのは一種の最適化ですか?それともいくつかのユースケースがありませんか?これが何かを達成する唯一の方法ですか?

ありがとう

ベストアンサー1

現在および予想状態を追跡するのに役立ちます。意図したIPとポートが単に逆順に変わらない場合に最も便利です。たとえば、NATを使用する場合、または逆方向がまったく同じでない場合、これが発生する可能性があります。また、関連する場合(TCPなど)、状態遷移が尊重されていることを確認してください。いくつかの例:

192.0.2.2では、単純なpingを送信した後、応答は初期タイプ8(エコー要求)の代わりにICMPタイプ0(エコー応答)を持つと予想されます。

icmp     1 12 src=192.0.2.2 dst=8.8.8.8 type=8 code=0 id=26387 src=8.8.8.8 dst=192.0.2.2 type=0 code=0 id=26387 mark=0 use=1

conntrack -EパブリックIP 198.51.100.32のNATルーターの背後にあるホスト10.1.2.3からFTPサーバー203.0.113.47へのアクティブ(非手動)FTPセッション(追跡を通じて)。応答にはルーターのIPが必要で、NATが適用された(インターネット経由でルーティングできない)FTPクライアントのIPは必要ありません。必要な生成はSNAT(またはMASQUERADE)ルールによって変更されます。

    [NEW] tcp      6 120 SYN_SENT src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 [UNREPLIED] src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 helper=ftp
 [UPDATE] tcp      6 60 SYN_RECV src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 helper=ftp
 [UPDATE] tcp      6 432000 ESTABLISHED src=10.1.2.3 dst=203.0.113.47 sport=47800 dport=21 src=203.0.113.47 dst=198.51.100.32 sport=21 dport=47800 [ASSURED] helper=ftp

ls見積もりはクライアントのftp PORTコマンドで計算された宛先と一致し、前のconntrackエントリ(natを含む)がトラフィックの通過を許可するためにftpヘルパーによって見積テーブルに追加された後(例えば追加のヘルパー処理の前に、ファイアウォールで関連ルールを使用してください。これはそこで読むことができます(ただし、一致するとすぐに接続が消えます。これ接続が表示されるため、ファイアウォールの遅延がないと実際には表示されません。)

# cat /proc/net/nf_conntrack_expect
295 l3proto = 2 proto=6 src=203.0.113.47 dst=198.51.100.32 sport=0 dport=41603 ftp

そして、アシスタント(ここではDNATed、まだ助けを得るために以前のconntrackエントリを使用)による追加の変更により、次の新しいトレース接続が作成されます。

    [NEW] tcp      6 120 SYN_SENT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 [UNREPLIED] src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20
 [UPDATE] tcp      6 60 SYN_RECV src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20
 [UPDATE] tcp      6 432000 ESTABLISHED src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
 [UPDATE] tcp      6 120 FIN_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
 [UPDATE] tcp      6 60 CLOSE_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
 [UPDATE] tcp      6 30 LAST_ACK src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
 [UPDATE] tcp      6 120 TIME_WAIT src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]
[DESTROY] tcp      6 src=203.0.113.47 dst=198.51.100.32 sport=20 dport=41603 src=10.1.2.3 dst=203.0.113.47 sport=41603 dport=20 [ASSURED]

これらの見積もりはすべてトラフィックを追跡するために使用されます(conntrack)。たとえば、追跡されていないエントリを削除してステートフルファイアウォールを保持するのは簡単です(初期のICMPエコーを実行していない場合は、ICMPエコー応答が通過しないようにしてください)。以前は同じIDを使用してください)とIP /ポート変換方法を覚えておいてください(natを使用している場合)。

おすすめ記事