IPアドレスとポート番号_ネットワークACLのルール設定に学ぶ #415
ネットワークACL (Network Access Control List) は、ネットワーク層でのトラフィックフィルタリングを提供するセキュリティツールの一つです。
このルール設定を理解することで、クライアントサーバモデルの理解を深めることができます。
まとめてみたいと思います。
ネットワークACLの特徴
まずはサービスの概要についてまとめます。
ネットワークACLは以下の特徴を持つセキュリティツールです。
ステートレス
ネットワークACLは状態を持たない(=通過するトラフィック情報を記録しない)ので、入力と出力のルールを個別に定義する必要があります。つまり、入力トラフィックを許可するルールと、対応する出力トラフィックを許可するルールがそれぞれ必要です。
送信元と送信先の指定
ネットワークACLのルールは、送信元と送信先のIPアドレス、ポート番号に基づいてトラフィックを許可または拒否します。
ここで後ほど深掘りする部分です。
サブネットレベルの保護
VPC内のサブネットレベルで動作し、サブネットのリソースへのアクセスを制御できます。
ルールの適用順序
ルールは数値で採番されており、低い数字から高い数字の順に評価されます。一致するルールがあると即座に適用され、後続のルールは無視されます。
許可と拒否のルール
ネットワークACLには「許可」ルールと「拒否」ルールの両方を設定できます。新たに作成画面にいくと、全てのトラフィックを拒否するルールが準備されており、そこからルール作成していけます。
デフォルトACL
新しいVPCはデフォルトのネットワークACLが付与されており、最初はすべてのインバウンドとアウトバウンドトラフィックを許可する設定になっています。
変更可能
ネットワークACLのルールはいつでも追加、変更、削除することができます。変更は即時に適用されます。
インバウンドとアウトバウンドで設定ポイントがやや違うので、それぞれ整理したいと思います。
インバウンドルールの設定
何を「許可(または拒否)」するのか設定できます。
送信"元"IPアドレス
リクエストを出してくるクライアントのIPアドレスです。特定のIPアドレスを制御したい場合はそれを入力しますし、通常のインターネットアクセス(送信元が不特定)の場合は「0.0.0.0/0」を指定することになります。
サーバのポート番号
サービスがリッスンしているポート番号へのリクエストを許可できます。例えばSSH接続なら22、HTTPなら80、HTTPSなら443、といった形です。
アウトバウンドルールの設定
何を「許可(または拒否)」するのか設定できます。
送信"先"IPアドレス
サーバーからの応答が向かう先であるIPアドレスを制御します。通常のインターネットアクセス(送信元が不特定)にレスポンスする場合は「0.0.0.0/0」を指定することになります。
サーバのポート番号
サーバのどのポートからのレスポンスを許可(拒否)するのか制御します。SSH接続なら22、HTTPなら80、HTTPSなら443、です。これだけならシンプルですが、実際はカスタムTCPなどのエフェメラルポート(決まったポートではなく特定の範囲のポート)からレスポンスするケースに対応する必要があります。
このエフェメラルポートの範囲は、サーバのOSによって異なっています。
1025〜5000番ポート:Windows OSのうちWindows Server 2003まで
1024〜65535番ポート:Elastic Load Balancingからのリクエスト
1024〜65535番ポート:NATゲートウェイからのリクエスト
1024〜65535番ポート:AWSのLambda関数からのリクエスト
32768〜61000番ポート:多くのLinuxカーネル(Amazon Linuxカーネルを含む)からのリクエスト
49152〜65535番ポート:Windows Server 2008以降
つまり、クライアントからのリクエストを受信し、アウトバウンドトラフィックを発信するサーバのOSが何かによって、ポート番号を設定します。
クライアントサーバモデルで、どのようにリクエストが処理されていくのか少し解像度が上がりました。
ここまでお読みいただきありがとうございました!
この記事が気に入ったらサポートをしてみませんか?