Amazon EC2を利用した仮想サーバー構築方法③(Apacheのインストールとファイアウォールの設定)

AWS初学者です。

前回はSSH接続を行いました。
前回記事はこちら: <a href="https://qiita.com/iiiiiiiiih/items/4175099b12b2fa1cbe35" target="_blank">Amazon EC2を利用した仮想サーバー構築方法②(SSH接続)</a>

今回はApacheのインストールとファイアウォールの設定方法についてアウトプットしていきたいと思います。
(また、私はMacを使用した上でこの記事を書いています。Windowsをご使用の方はご注意ください)

# Apacheのインストール

今回は、前回までに作ったサーバーを「Webサーバー」として機能させるために、Apache(Apache HTTP Server)というWebサーバーソフトを用います。

[手順1] 作成したEC2インスタンスにSSHでログインする。
以下のコマンドをターミナルで実行して、SSHでインスタンスにログインします。

```none:ターミナル
ssh -i ダウンロードしたキーペアファイル ec2-user@起動しているEC2インスタンスのパブリックIPアドレス
```

[手順2] Apacheをインストールするために、以下のコマンドを実行。
```none:ターミナル
sudo yum -y install httpd
```

[手順3] Apacheを起動するために、以下のコマンドを実行。

```none:ターミナル
sudo systemctl start httpd.service
```

・sudoコマンド
→ 指定したコマンド(今回はyum)を管理者権限で実行するためのコマンド。管理者権限が必要な時に、先頭につける。

・yumコマンド
→ アプリケーションをダウンロードしてインストールしたり、アンインストールする時に用いる管理者コマンド。

・httpd
→ Apacheを構成する実行ファイル名。これを指定することでApacheがインストールされる。

・-yオプション
→ ユーザーの確認(yesの入力)なしでコマンドを実行できるオプション。

・systemctlコマンド
→ 指定したコマンド(今回はhttpd、つまりApache本体を指定)を
「起動(start)」
「停止(stop)」
「再起動(restart)」
するコマンド。

ここまででApacheが起動するようになりますが、サーバーを再起動するとまた停止してしまいます。
いちいち起動させるのは面倒なので、Apacheも自動的に再起動させる設定を行います。

# Apacheを自動的に起動させる設定

[手順4]Apacheを自動起動させるために、以下のコマンドを実行。
```none:ターミナル
sudo systemctl enable httpd.service
```

systemctlコマンドは指定したコマンドを「起動、停止、再起動」させることができると説明しましたが、自動起動についても
「設定(enable)」
「設定解除(disable)」
「設定の確認(list-unit-files)」
を設定することもできます。

Apacheの自動起動が設定できたかどうかは、以下のコマンドで確認できます。(「httpd.service」 がenabledになっていれば成功)

```none:ターミナル
sudo systemctl list-unit-files -t service

↓実行結果(アルファベット順で並んでいる)
UNIT FILES

...

httpd.service            enabled

...

```

以上でApacheをインストールし、その実行ファイルであるhttpdが起動しました。

「実行中か」を確認するには、以下のコマンドを実行して、Apacheのプロセス(実行中のプログラムのこと)を確認します。

```none:ターミナル
ps -ax
```

ここでコマンドの解説。

・psコマンド
→ 実行中のプロセスを確認できるコマンド。

・ -ax
→ 「-aオプション」と「-xオプション」が組み合わさったもの

・ -aオプション
→ 全てのプロセスを表示させるオプション。

・ -xオプション
→ 他の端末に結び付けられているプロセスも表示するオプション。

このコマンドを実行して、以下のような実行結果が表示されれば、サーバー上でApacheが起動しています。

```none:ターミナル
ps -ax

↓実行結果

12134 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
```

先頭に表示されている「11115」といった数字はプロセスIDといい、プロセスを区別するために自動的につけられた番号です。

これでApacheが起動中であることが確認できたので、次はファイアウォールの設定に移ります。

ですが、まずファイアウォールとは何なのか？ということから振り返ります。

# ファイアウォールとは?
ファイアウォールとは、
「通して良いデータを通して、それ以外を遮断する機能」
のことです。

今回は、その中でも簡単だと言われる「パケットフィルタリング」を設定していきたいと思います。

・パケットフィルタリングとは?
→ 流れるパケットを見て、通過の可否を決める仕組みのこと

・パケットとは?
→ まず、「データ通信の際に、送りたいデータを一度に全て送るのではなく、いくつかに分割して送る方式」のことをパケット交換方式と呼ぶ。その時、分割されたデータ一つ一つのことを「パケット」という。

このパケットの中には、「IPアドレス」や「ポート番号」も含まれています。
パケットフィルタリングは、「IPアドレス」や「ポート番号」など、各種情報を判断材料に通過の可否を決めます。

具体的には、以下のことが可能になるようです。

・「特定のIPアドレスを送信元とするパケット以外を除外する」ように構成することで、接続元を制限する。
・ポート番号を制限して、特定のアプリケーションを外部から接続できないようにする。


それでは、ファイアウォールの設定方法に移ります。

# ファイアウォールの設定方法

[手順1] AWSのEC2を開き、左側のメニューから「セキュリティグループ」をクリック。
以前作成した「WEB-SG」というセキュリティグループにチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1813727/c0d89ca3-e3f5-13d5-9fa1-4c50dad8b9ec.png)

[手順2] チェックを入れたら、画面下側の「インバウンド」というタブをクリックし、さらに「edit inbound rules」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1813727/b6d2e8f2-7dbb-a1a2-347a-7335f3b9f034.png)

[手順3]  ポート80番を開ける(ブロックされているポート80番で通信できるようにする)操作を行います。
具体的には、以下の4点を行い、「保存」をクリックする。

1. 「ルールの追加」をクリック
2. タイプは「カスタムTCP」を選択
3. ポート範囲は「80」を入力
4. ソースは「カスタム」を選択し、「0.0.0.0/0」を入力。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1813727/c3ebf591-121c-8354-ac13-0689ca226de3.png)


以上により、
「ポート22番だけを通して、それ以外は通さない」
という設定に
「ポート80番でも通信できる」
という設定を追加しました。

この状態で、作成したEC2インスタンスのパブリックIPアドレスをアドレスバーに入力して、アクセスしてみてください。
以下のような、Apacheのテスト画面が表示されれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1813727/d8d722a9-b346-bb74-745b-09d7b91eba5d.png)


以上で、「Apacheのインストール」と「ファイアウォールの設定」は完了です。
次回は、「IPアドレスではなく、ドメイン名でインスタンスにアクセスできるようにする」という内容をアウトプットしたいと思います。

ここまで読んでいただき、ありがとうございました。

次回： <a href="https://qiita.com/iiiiiiiiih/items/aabe1cd09f368f0bf2b8">Freenomの無料ドメインをAWSで登録する方法</a>