Contents
ネットワークACLを試してみる
今回はネットワークACLを使用してHTTP通信を制御します。
セキュリティグループと混同しないように注意してください。
今回もベースは下記のネットワークになります。

ここではパブリックサブネットにあるEC2でApacheを動かしており、
セキュリティグループの設定でHTTPの通信を許可しているものとします。
セキュリティグループの詳細についてはセキュリティグループでHTTP/ICMP通信を制御するを参照ください。

EC2インスタンスの説明タブでセキュリティグループのインバウンドルールの表示をクリックして内容を表示させています。
80番ポートの通信についてはどこからでもアクセスできる設定となっています。
次にデフォルトで割り当てられているネットワークACLを確認してみます。
適用されているネットワークACLを確認する

対象のVPCを選択し、使用しているネットワークACLをクリックします。

インバウンドルールのタブをクリックします。
100番のルールは全ての通信を全てのアクセス元から許可している設定になります。
*は全ての通信を拒否する内容になります。
暗黙のDenyの設定になります。
100番のルールが先に適用されるので全ての通信を許可することになります。

アウトバウンドルールのタブをクリックします。
同様に全ての通信を全ての送信先へ許可している設定になります。
つまりデフォルトではインの方向でもアウトの方向でも全て許可する設定になっています。

パブリックIPを入力しWebページが表示されることを確認します。
ネットワークACLを新規に作成して適用する

ネットワークACLの画面でネットワークACLの作成ボタンをクリックします。

belpia-network-aclという名前のネットワークACLを作成し、belpia-vpc-0411に適用します。

インバウンドのルールタブをクリックし、全ての通信を拒否していることを確認します。

アウトバウンドのルールタブをクリックし、全ての通信を拒否していることを確認します。
つまり初期状態ではインアウトともに全ての通信を拒否するネットワークACLが作成されたことになります。
但しこのネットワークACLまだどこにも適用されていません。

サブネットの関連付けのタブでサブネットの関連付けの編集をクリックする。

パブリックサブネットとプライベートサブネットの両方に適用します。
※今回試すのはパブリックサブネットだけなので、パブリックサブネットのみ適用でも大丈夫です。

作成したネットワークACLにサブネットが適用されていることを確認します。

Apacheを動かしているEC2のパブリックIPにブラウザでアクセスできないことを確認します。
これはいかなる通信も通さないネットワークACLが適用されているからです。
※EC2を一度STOPして再度開始したため、上で記載したパブリックIPアドレスと今回のパブリックIPアドレスは異なっています。
ネットワークACLを編集する

インバウンドのルールのタブを選択し、インバウンドのルールの編集ボタンをクリックします。

Apacheを動かしているEC2にHTTPでアクセスできるように、インバウンドルールにHTTP(80)を全ての場所から許可する設定をします。

インバウンドルールにHTTPアクセスを許可するルールが設定されました。

しかしHTTPでアクセスできない状況です。
これはインバウンドの通信は許可していても、戻りのアウトバウンドの通信は相変わらず拒否しているからです。
ネットワークACLはステートレスなので、イン/アウトの両方のルールを設定する必要があります。

アウトバウンドのルールのタブを選択して、アウトバウンドのルールの編集をクリックします。

ルール100番で全ての送信先に対してポート番号1024~65535番で使用されるアプリケーションの通信を許可します。
つまりHTTPアクセスした通信の戻りの分を許可することになります。
今回はルール番号は100番にしましたが、特にインバウンドのルールと番号をそろえる必要はありません。

アウトバウンドのルールが作成されていることを確認します。

再度Apacheを動かしているEC2のパブリックIPをブラウザに入力します。
Apacheのデフォルトのページが表示されています。
ネットワークACLのおさらい
今回は簡単なネットワークACLの設定の一例を紹介しました。
ネットワークACLの簡単な特徴を挙げてみます。
・デフォルトで適用されているネットワークACLは全ての通信を許可する設定となっている
・新規に作成したデフォルトのものは全ての通信を拒否する設定となっている
・イン方向とアウト方向の両方のルールを適切に設定する必要がある
HTTPの他にもPingを許可したり、許可する範囲を限定したり試してみましょう。
ちなみに今はSSHなどの通信も拒否しているので、勉強を続ける場合は元のセキュリティグループを適用するか、必要な許可を追加するようにしてください。