AWS EC2で脆弱性診断A+のサーバを構築【Qiita】

AWSのEC2にAmazon Linux 2のインスタンスを作成し、スタンダードかつセキュリティに配慮したインターネットサーバを構築する手順をまとめました。記事はQiitaに投稿しました。

コンテンツ目次

概要

EC2でAmazon Linux 2のインスタンスを作成し、以下のようなサーバを構築する手順をまとめました。

種別アプリケーション
ウェブサーバApache 2.4 または Nginx 1.16
PHPPHP 7.3
データベースサーバMySQL 5.7
データベースクライアントphpMyAdmin 5.0
SMTPサーバPostfix
IMAP/POP3サーバDovecot
セキュリティFail2ban / Logwatch
その他Node.js / Docker

記事一覧

各記事はQiitaに投稿しました。

Qiita
AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...
Qiita
AWS EC2でサーバを構築 2 - 各種インストール編 - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...
Qiita
AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt + PHP-FPM編 (脆弱性診断「A+」を狙う) - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...
Qiita
AWS EC2でサーバを構築 4 - Nginx + Let's Ecnrypt + PHP-FPM編 (脆弱性診断「A+」を狙う) - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...
Qiita
AWS EC2でサーバを構築 5 - MySQL + phpMyAdmin - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...
Qiita
AWS EC2でサーバを構築 6 - PostfixとDovecot (SSL対応とSPAM対策) - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...
Qiita
AWS EC2でサーバを構築 7 - セキュリティ対策 - Qiita 記事一覧 AWS EC2でサーバを構築 1 - Amazon Linux 2 準備編 AWS EC2でサーバを構築 2 - 各種インストール編 AWS EC2でサーバを構築 3 - Apache + Let's Ecnrypt...

ポイント

ただ単にインストールして初期設定を行うだけでなく、チューにニグやセキュリティ対策にも注力しました。

脆弱性診断「A+」

2020年前半、SSL/TSL絡みで大きな動きがありました。
ChromeやFirefox等、主要ブラウザがSSL 1~3、TLSv1.0~1.1を無効化したのです。
このためサーバ側で設定を変更しTLSv1.2を有効にする必要がありますが、同時にセキュリティリスクのある上記対象バージョンを無効にするという作業も行わないと、脆弱性診断で危険と診断されるようになりました。

りゅう

多くの顧客を抱える制作業者はプラン変更やサーバ移転に追われました。レンタルサーバでは基本的に機器構成やサーバの設定は変更してもらえないためです。

今回の記事ではこの問題にも対処し、かつせっかくなら脆弱性診断で最高の「A+」を取得することを目標に掲げました。

この記事を書きながら構築したサーバは、SSL Labsの診断で「A+」と診断されました。

常時SSL化対応

無料のSSL証明書を取得できるLet's Encryptを利用し、ApacheやNginxの設定で常時SSL化を行います。
Let's Encryptの証明書は更新期限が3ヶ月と短いため、期限切れになる前に自動で更新するようにも設定します。

ApacheのEvent MPM

MPMとはマルチプロセッシングモジュールの略です。
Apacheは、デォルトではシングルスレッドプロセスであるPrefork MPMで動作します。
記事ではイベント駆動であるEvent MPMを採用します。これにはPHPも関係します。
また環境に合わせてチューニングも行います。

PHP-FPMの採用

Apacheのデフォルトでは、モジュール版のPHPを使用するようになっています。
記事ではEvent MPMとFast CGI方式のPHP-FPMと組み合わせて高速化を図っています。
こちらもチューニングを行います。

MySQLの採用

現在、多くのディストリビューションで標準のデータベースサーバはmariaDBとなっています。
MySQLと互換性があり、PHP等からはMySQLとして操作することができます。
しかし記事では本来のMySQLを使用するようにしています。

通信路の暗号化とパスワード認証の排除

ウェブサーバだけでなく、メールサーバもSSL/TLS経由でアクセスするようにしています。
SSH接続はパスワード認証を使わず、公開鍵認証のみとしています。

なお記事ではFTPサーバを導入していません。これはCircleCIのようなCI/CDツールからSSHとGitを用いてデプロイすることを前提としているためで、この場合FTPサーバは不要です。
平文テキストでパスワードをやり取りするFTPサーバは、起動しているだけでセキュリティリスクにもなります。どうしてもFTPクライアントで操作したい場合はSFTP(SSHを用いたFTP)を採用することをお勧めします。

セキュリティと不正アクセス対策

EC2のセキュリティグループとfirewalldにより、不要なポートを外部に公開しないよう設定します。
例えばimaps/pop3sは公開しても、imap/pop3は公開しないようにしています。

他に、Fail2banによる不正アクセス対策(自動Ban / Unban)や、Logwatchの不具合修正も行います。

まとめ

本記事の目玉はSSL/TLS周りです。脆弱性診断で「A+」、少なくとも「A」を狙えるようにしています。
今はTLSv1.1までが無効になっていますが、いずれはTLSv1.2も無効になることが考えられます。
その際に同じようにレンタルサーバで対応に苦慮するようであれば、今のうちにクラウドへの移行を進めておいたほうが良いと思います。
AWSはIaaSとしては圧倒的シェアを誇るサービスで情報も豊富なため、幅広い層にお勧めできます。
担当者がわけわからんという場合はもちろん保守を含め委託が良いでしょうが、ある程度VPS等でサーバ構築に触れたことのある方であれば、この記事を参考にして構築してみていただければと思います。

  • URLをコピーしました!
コンテンツ目次
閉じる