お疲れ様ですー。すっかり涼しくなってきて秋を感じます。食欲の秋!ということでばくばく食べております。・・というわけで今回はAWSでACLを作ってみました。
AWSにはネットワークACLとセキュリティグループというファイヤーウォール的なものがあります。まずセキュリティグループとネットワークACLについて違いをみてましょう。
ACLとセキュリティグループの違い
まずはセキュリティグループ。
セキュリティグループの特徴としてVPCに紐づいているものなので他のVPCだと利用することはできません。
なのでインスタンスを立ち上げる時もどのVPCに設置するかで使用できるセキュリティグループが変わります。
ステートフルなのでインバウンドで許可の設定をすればアウトバンドも許可されます。ちなみにコンソール画面では拒否の設定はありません。拒否したければ削除します。
ACLはインバウンド、アウトバンドの通信を許可・拒否のルールを複数作成することができます。それらのルールに番号を割り振り順序通りに適用されます。
ACLはステートレスなのでインバウンドで許可してもアウトバンドは許可になりません。なのでインスタンスから外部への通信をしたい場合は、アウトバンドの許可をする必要があります。
またACLはVPC内に入るかを許可するルールです。ACLは通過することはできてもEC2インスタンスのセキュリティグループで許可されていなければインスタンスと通信することはできません。ACLはネットワークACLともいいNACLと表記されます。
■セキュリティグループのコンソール画面
このようにセキュリティグループでは拒否する設定ができません。
■ACLのコンソール画面
編集のボタンからAllow(許可)、Deny(拒否)の設定ができます。
セキュリティグループの設定
[VPC]-[セキュリティグループ]-[セキュリティグループを作成]
下のインバウンドルール、アウトバンドルールで設定します。設定したタイプのプロトコル、ポート番号、ソースのIPアドレスの通信を許可します。
拒否したい場合はルールを削除する、もしくはセキュリティグループ自体を削除します。
ACLの設定
[VPC]-[ネットワーク ACL]-[ネットワーク ACL を作成]
名前や紐付けるVPCを設定します。
作成すると[ネットワークACL]の画面に戻り編集したいACLにチェックを入れます。下にタブが表示されます。
ルール番号を入力し送信先を設定、そしてこれらの通信の許可をするのか拒否するのかルールを決めます。
番号の低い順に優先されるので
・100番のルールを適用する
・100番に当てはまらない場合は110番のルールを適用
・110番にも当てはまらない場合は、120番のルールを適用
ということになります。
そしてどれも当てはまらない場合は全て拒否する。といったルールになります。
またキャプチャの画像には入っていませんがアウトバンドルールにはエフェメラルポートの設定が必要です。
エフェメラルポートとは
サーバーがクライアント(PCなど)に通信をする際に通す一時的なポートのことを言います。一般的には1024-65535を使用します。
ザクっと抽象的にいうと自由に使用できるポート番号のことをいうらしいです。
もしACLを設定していざサーバーに入ろうとすると「できない!」となる場合はエフェメラルポートが設定されていない可能性があります。
その逆でSSHやHTTPなどの決まった使用用途で使われるポート番号のことをウェルノウンポートといいます。
こちらの表も参考までに。
これまでサーバに入れなかった出来事が何度かありましたがこれでどこを確認すればわかるようになりました!