SSH 拒否ルールにより SSH が許可されていますか?

SSH 拒否ルールにより SSH が許可されていますか?

私はAWS VPCを学習しており、以下のようにNACLインバウンド/アウトバウンドルールを割り当てています。現在はすべてのIPに対して行っています。

Rule #    Type           Allow/Deny
100       All Traffic    Allow
200       SSH            Deny
 *        All Traffic    Deny


Outbound
Rule #    Type           Allow/Deny
100       SSH            Deny
200       All Traffic    Allow
 *        All Traffic    Deny

ルールでは小さい番号が最初に評価されるようになっているのに、アウトバウンドルールでは SSH を拒否しているので、SSH がどのように機能しているのか疑問に思っています。AWS でルールが実際にどのように機能するかを説明できる人はいますか?

答え1

受信ルール #100 (200 は実質的に無視されます) と送信ルールが既に確立されている SSH 接続と一致しないため、受信 SSH トラフィックが許可されます...


に基づくAWS ドキュメント:

ネットワーク ACL はステートレスです。つまり、許可された受信トラフィックへの応答は送信トラフィックのルールに従います (その逆も同様です)。

  • インバウンドルール

私が見た限りでは、ルールの順序が間違っていると思います。

Rule #    Type           Allow/Deny
100       All Traffic    Allow
200       SSH            Deny
 *        All Traffic    Deny

これはまったく意味がありません。ルール 100 ですべてのトラフィックを許可しているため、ルール 200 はいつ使用されてもおかしくありません (トラフィックはルール 100 に基づいて既に許可されているため、ルール 200 には何も「残って」いません)。順序が異なる方が理にかなっていると思います (ssh サービスを拒否する場合:

Rule #    Type           Allow/Deny
100       SSH            Deny
200       All Traffic    Allow
 *        All Traffic    Deny
  • アウトバウンド

以下はルール番号が低い SSH トラフィックです:

Rule #    Type           Allow/Deny
100       SSH            Deny
200       All Traffic    Allow
 *        All Traffic    Deny

これにより、SSH のトラフィックは拒否され、残りは許可されます...

タイプ SSH は、ポート TCP/22 を使用するトラフィックです。これは通常、宛先ポートとして使用されます。SSH サーバーに接続する場合は、TCP/22 に接続しますが、送信元ポートは TCP/X です。ここで、X は「ランダムに」(実際にはランダムではありませんが、簡単にするためにランダムとします)、たとえば 10000 より大きい値に選択されます。

サーバーが接続に応答すると、宛先ポートは「あなたの」TCP/X になるため、ルールは必ずしもこのトラフィックに一致するとは限りません...

宛先が TCP/22 である送信トラフィックは、他のデバイスを宛先としてサーバー上で開始され、まだ確立されていない SSH 接続です。

答え2

ホストへのすべてのトラフィックを許可していますが、ホストからの SSH 送信は拒否しています。

私の知る限り、NACLはディープパケットインスペクションは行いません。つまり、プロトコルは、そのプロトコルの単なる別名です。割り当てられたポート

SSH接続を試みるなど、本当に奇妙なことをしない限りからポート 22 では、受信 SSH セッションは問題なく動作するはずです。

関連情報