NAT の背後にあるポートが悪意のあるホストにパケットを送信する場合、そのホストは開いているポートすべてにパケットを送信できますか、それともパケットを送信したポートのみにパケットを送信できますか?

NAT の背後にあるポートが悪意のあるホストにパケットを送信する場合、そのホストは開いているポートすべてにパケットを送信できますか、それともパケットを送信したポートのみにパケットを送信できますか?

たとえば、NAT ルーターの背後にあるコンピューターは Skype を使用します。Skype はポート 4000 を使用してパケットをサーバーに送信し、他の Skype クライアントとの間接的な接続を確立します。

Skypeがサーバーにパケットを送信したので初め明らかに、サーバーは NAT を利用するルーターにパケットを送り返すことができます。

私の質問は、ルータが NAT を使用していることを考慮すると、そのサーバーは NAT が持つすべてのオープン/転送ポートにパケットを送信できるのか、それともポート 4000 のみにパケットを送信できるのかということです。

Skypeサーバーに悪意はまったくないことはわかっています。それは単なる例です

答え1

他者によって開始された着信トラフィックの場合: 悪意のあるホストは常にルーターの任意のポートにデータを送信できます (ポートスキャン)。ポートが転送されていない場合、ルータは、要求されていないパケットをドロップするか、接続が無効であると丁寧に応答するかを決定します。ポートが転送されている場合、ルータの背後にあるエンド ホストに到達します。

ホストによって開始された送信トラフィックの場合: Skype リレー サーバーとの通信にどの発信元ポートを使用する必要があるかという規則はありません。また、エンド ホストでは、Skype は TCP 4000 を使用するかもしれませんが、NAT は実際には別のポート (たとえばポート A) を使用してメッセージを送信する場合があります。Skype サーバーはポート A のみを認識し、ポート 4000 は認識しません。Skype サーバーがポート A 以外のポートに応答する場合は、「受信トラフィックの場合」で説明した状況が適用されます。Skype サーバーがポート A に応答すると、NAT はポート 4000 に送信してこれをホストにルーティングします。

明確に言うと、NAT (ネットワーク アドレス変換装置) はルーターです。また、「着信トラフィック用」の部分をホストへのネットワーク応答と混同しないでください。これは実際には、接続を確立するためにホストと最初に通信する外部サーバーを意味します。

答え2

簡単な答えは、「パケットを送信したポートにのみパケットを送信できる (NAT ルーターの背後にあるクライアントに)」ということです。これは大体正しいですが、完全に正しいわけではありません。

答えは、IPTables の設定方法、問題のポート、および使用されるモジュールによって異なります。単純な NAT デバイスでは、トラフィックをその送信元と同じポートにマッピングすることしかできませんが、すべてのデバイスがそれほど単純というわけではありません。Linux やその他の OS では、「ステートフル ファイアウォール」が利用されます。ここでは通常、「確立された関連」ポートと、接続状態を確認するさまざまなモジュールが使用されます。たとえば、発信 FTP 要求 (ポート 21) が行われた場合、FTP モジュールがロードされていれば、ルーターはデータ用にポート 20 も開くことがあります。FTP が他のポートを開くことも可能であり、悪意のあるサーバーがこれを実行して任意の高番号ポートにアクセスできる可能性があります。活用される可能性のある一般的な追跡モジュールには、FTP、SIP、Netbios、PPTP、gre、tftp、h323、irc などがあります。特定の条件下で接続追跡を使用すると、ファイアウォールを任意にバイパスできる可能性があるバグ CVE-2014-8160 があります。これは、おそらくあなたが考えているような方法です。

悪意のあるサーバーが他のポートを開くのはかなり難しいですが、不可能ではないかもしれません。もちろん、他のポートをリッスンする脆弱な何かが必要になります。また、(Linux では) 接続追跡ルールがそれらのポートでの一般的なアクセスを拒否するルールの後に来るようにすることで、このリスクを軽減できます。

関連情報