
私は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 セッションは問題なく動作するはずです。