[AWS]EC2インスタンスにファイアウォールを設定する ~備忘録~

##はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。

今回は、EC2インスタンス内にファイアウォールを設定する手順を、備忘録としてまとめておきたいと思います。

間違いなどがございましたら、ご指摘のほどよろしくお願い致します。

##ファイアウォールとは
インターネットと内部ネットワークスの間に設置し、送受信されるデータを監視して、サービスに必要な通信だけを許可しそれ以外の通信を拒否するものがファイアウォールです。

要するに、サーバーを不正アクセスやサイバー攻撃などから守るために使われるセキュリティ機能です。

また、ファイアウォールにはいくつかの型があります。

###・パケットフィルタ型
送受信されるデータ(パケット)のIPアドレスとポート番号を監視して、通信の許可と拒否の判断を行います。

予め通信相手のIPアドレスとポート番号を設定しておき、設定済みのIPアドレスとポート番号以外からのアクセスを全て拒否するような仕組みになっています。

``特徴``
IPアドレスとポート番号から判断するだけでは防ぎきれない攻撃は許可してしまう可能性があります。
従って、他のファイアーウォールやセキュリティシステムと組み合わせる必要があります。

###・アプリケーションゲートウェイ型
HTTP・FTP・SMTPなどアプリケーションプロトコル毎に、通信を制御する仕組みを準備し、通信の許可・拒否の判断を行います。

``特徴``
アプリケーション層レベルまでの通信を監視・制御するため、セキュリティの高い仕組みを設けることができます。
セキュリティが高度になるため、構築までにコストと時間がかかります。


###・サーキットレベルゲートウェイ型
トランスポート層レベルの通信を監視・制御する方式です。

**コネクション単位**で通信可否を判断するため、パケットフィルタ型では防げない送信元IPアドレスの偽装などを防ぐことが可能です。

##ファイアウォールの役割
ファイアウォールは、外部からの不正アクセスやサイバー攻撃を防ぎ、内部ネットワークの安全を保つ役割を果たします。

ファイアウォールの仕組みは下のイメージ図のようになります。

![スクリーンショット 2021-08-21 15.39.48（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/7edef7ff-daf0-5292-46a1-b70fbe03c76f.png)

##AWSにおけるファイアウォールとは
AWSでは、**セキュリティーグループ**がインスタンスの仮想ファイアウォールとして機能し、通信の入出力(**インバウンドトラフィックとアウトバウンドトラフィック**)の制御を行なっています。

###セキュリティグループとは

>
セキュリティグループは、インスタンスの仮想ファイアウォールとして機能し、インバウンドトラフィックとアウトバウンドトラフィックをコントロールします。セキュリティグループごとに、インスタンスへのインバウンドトラフィックをコントロールするルールと、アウトバウンドトラフィックをコントロールする一連のルールを個別に追加します。
``引用:``[セキュリティグループ: インバウンドルールとアウトバウンドルール](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/vpc-security-groups.html)

**※トラフィックとは**: ネットワーク上を流れる情報 or 情報量のことを指します。


###インバウンドルールとアウトバウンドルールとは
``インバウンドルール``
インバウンドルールとは、**EC2インスタンスにアクセスするインバウンドトラフィックに制限をかけるためのルール**です。
セキュリティグループを作成するときには、予めインバウンドルールはありません。
インバウンドルールを設定するまでは、インスタンスに送信されるインバウンドトラフィックは許可されません。

**~設定内容~**
インバウンドルールとして最低限必要なIPアドレス、ポート番号のみを設定することでEC2インスタンスの安全性を高めます

``アウトバウンドルール``
**特定のアウトバウンドトラフィックのみを許可するためのルール**です。

>
デフォルトでは、セキュリティグループにはすべてのアウトバウンドトラフィックを許可するアウトバウンドルールが含まれています。このデフォルトのルールを削除し、特定のアウトバウンドトラフィックのみを許可するアウトバウンドルールを追加することをお勧めします。
``引用:``[セキュリティグループ: インバウンドルールとアウトバウンドルール](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/vpc-security-groups.html)

##EC2インスタンスにファイアウォールを設定する手順
大まかな手順としては

1.セキュリティグループを編集するインスタンスを選択して、インスタンスに属するセキュリティグループの内容を確認する

2.インターネットからEC2インスタンスに接続できるようにインバウンドルールを編集する

3.ブラウザからEC2インスタンスのパブリックIPv4アドレスに接続可能か確かめる

###1.セキュリティグループを編集するインスタンスを選択して、インスタンスに属するセキュリティグループの内容を確認
EC2インスタンスダッシュボードからインスタンスを選択し、そのインスタンスのセキュリティグループの内容を確認します。
下の画面のように、セキュリティタグからセキュリティグループ(リンク)を選択し、セキュリティ詳細画面に遷移します。
![スクリーンショット 2021-08-21 16.54.59 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/21d6662d-decf-f5d6-2edd-31e3861e5e08.png)


遷移後、セキュリティグループ詳細画面を見ると、インバウンドルールとしてSSHでポート番号が22であればどのIPアドレスからでも接続できる設定になっていることがわかります。

![スクリーンショット 2021-08-21 17.09.23 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/ffcaf90c-cd5f-61d3-c6ce-a45e5ad9a2ad.png)

###2.インターネットからEC2インスタンスに接続できるようにインバウンドルールを編集する
デフォルトのままだと、インターネットからEC2インスタンスに接続することができないので下の画面のようにインバウンドルールを編集します。
今回編集する際は、タイプ:HTTP、ソース:Anywhere-IPv4を設定しています。

![スクリーンショット 2021-08-21 17.23.03 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/12713eef-df56-0123-342f-2668511f9ac9.png)

設定後、下の画面のようにインバウンドルール詳細画面で追加したインバウンドルールを確認することができます。

0.0.0.0/0はデフォルトルートを表し、IPv4での書き方になります。
構築するシステムがIPv4をベースとしている場合は、IPv6（Anywhere-IPv6）に関しては設定しなくても大丈夫です。

![スクリーンショット 2021-08-21 17.40.29 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/a7489e38-e98a-89e5-c305-392ae34f81b2.png)

###3.ブラウザからEC2インスタンスのパブリックIPv4アドレスに接続可能か確かめる

以下のように``Welcome to nginx on Amazon Linux!``といった画面が表示されればファイアウォールを経由してEC2インスタンス内のwebサーバーへの接続は成功です。

![スクリーンショット 2021-08-21 17.35.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/dc6b267c-5e6a-bd14-6328-704fbdb2883d.png)


##参考文献
[AWS Document Amazon Linux 2](https://aws.amazon.com/jp/amazon-linux-2/)
[AWS Document VPC のセキュリティグループ](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html)
[AWS Document セキュリティグループ: インバウンドルールとアウトバウンドルール](https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/vpc-security-groups.html)