0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TCP通信の戻り通信はNSGのinbound ruleにblockされないのはなぜ?

Posted at

背景

前からずっと不思議に思っていますが、以下のシナリオの場合、VM間のTCP通信はなぜblockされないのか?
シナリオ:
VM AとVM Bがあります。
AのNSGにはBからの通信をblockするルールを設定しています。
この場合、AからBにTCP通信(例えばRDP)を出すと、成功になります。

疑問:

RDPはTCPですが、往復通信です。AからBへの往路通信はoutboundで許可して、問題ないですが、
BからAへの復路通信はAのinbound blockルールがあるのに、影響されないです。これはなぜでしょうか。

TCP通信では、クライアント(ここではVM A)がサーバー(VM B)に接続を開始する際、以下のような通信の流れが発生します:
往路(VM A → VM B):VM AからVM BへRDP接続を確立するためのSYNパケットが送信される(アウトバウンド通信)。
復路(VM B → VM A):VM Bが応答としてSYN-ACKパケットを返し、その後のデータ通信が行われる(インバウンド通信)。

回答

VM AのNSGでVM Bからのインバウンド通信をブロックしていても、VM AからVM BへのRDP接続が成功する理由は、Azure NSGのステートフルな動作により、VM Aが開始したTCPセッションの復路通信(VM B → VM A)が自動的に許可されるためです。この復路通信は、インバウンドブロックルールの対象外となります。
もし意図的にRDPをブロックしたい場合は、VM AのアウトバウンドルールまたはVM BのインバウンドルールでRDP通信を明示的に拒否する必要があります。

技術Point

1.NSGのステートフルな動作:
AzureのNSGはステートフルファイアウォールとして機能します。つまり、許可されたアウトバウンド接続に関連する復路通信(レスポンス)は、自動的に許可されます。
VM AからVM BへのRDP接続(アウトバウンド)がNSGで許可されている場合、関連する復路通信(VM BからVM AへのSYN-ACKやデータパケット)は、VM AのNSGのインバウンドルールで明示的にブロックされていても、ステートフルなセッション管理によって許可されます。
このステートフルな動作により、VM AのNSGの「VM Bからのインバウンド通信をブロックする」ルールは、VM Aが開始したTCPセッションの復路通信には適用されません。

2.インバウンドブロックルールの適用範囲:
VM AのNSGのインバウンドブロックルールは、VM Bが新規に開始するインバウンド接続(例:VM BからVM Aへの新しいTCPセッション)に適用されます。
しかし、VM Aが開始したRDP接続に関連する復路通信は、「新規接続」ではなく「既存のセッションの応答」と見なされるため、ブロックルールの対象外となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?