今回は以前AWSで構築したサーバーのセキュリティのテストをして、改善する作業をしていきます。
今回作業するにあたっての前提条件と環境
前提条件
- WEBサーバーのソフトウェアはapacheを使用
環境
Amazon linux 2
サイトのセキュリティテストをしてみよう
Qualys SSL Labsのサイトで自分のドメイン(このサイトの例だと「sawascle.com」)を以下の画像のところに入力してテストをしてみましょう。サイトに関するグレード (A から F) と、結果の詳細な内容が出力されます。
テストをすると以下のようなスコアが出てくると思います。
現在はセキュリティは大丈夫ですが、以前AWSで構築してすぐの時は評価がBで以下の結果でした。
総合評価 | B |
証明書 | 100% |
プロトコルサポート | 95% |
キー交換 | 70% |
暗号強度 | 90% |
詳細な内容
- RC4暗号がサポートされてしまっている。
RC4は、ストリーム暗号という種類の暗号化アルゴリズムです。特定の古いブラウザでは、このRC4暗号をサポートしています。しかし、暗号化された情報が第三者によって解読されるリスクがあり、現代のブラウザでは特定の古いブラウザへの対応が必要ない限り、この暗号化方式を無効にすることが推奨されています。
- 前方秘匿性が完全にサポートされていない。
前方秘匿性は、過去の通信が秘密鍵の漏洩により暴露されるのを防ぐ概念です。各通信セッションで一意の秘密鍵が生成され、それが後で破棄されます。したがって、1つの鍵が漏洩しても他の通信は安全です。
- 旧バージョンの TLS がサポートされてしまっている。
TLSは安全なデータ通信を行うプロトコルです。初期バージョンのTLS 1.0(1999年)と1.1(2006年)は既に多くの脆弱性が確認され、推奨されていません。最新のTLS 1.3(2018年)は、より高いセキュリティと効率性を提供します。旧バージョンを使用している場合は、可能な限り更新することが重要です。
サイトのセキュリティを改善しよう
これからssl.confファイルを編集しますが、念のためバックアップしといてください。
$ cd /etc/httpd/conf.d
$ cp ssl.conf ssl.conf.bak
ssl.confファイルのベストプラクティスを作成
サーバーの設定ファイル(ssl.conf)を編集していくのですが、その前にどのような設定が望ましいのかをMozilla SSL Configuration Generatorで確認しましょう。確認する前に以下のソフトウェアのバージョンを確認しましょう。
$ openssl version
$ httpd -v
返されたバージョンを以下のように選択して、下の方のコードをssl.confに設定します。
ssl.confファイルを編集
サーバーの環境によって設定の仕方が違うので自分のサーバーに合うように設定してください。今回はその一例です。
- RC4暗号がサポートされてしまっている。
- 前方秘匿性が完全にサポートされていない。
- 旧バージョンの TLS がサポートされてしまっている。
先ほど生成されたコードを参考に各ディレクティブのパラメータを書き換えて、上記の3つ問題点を改善していきます。
①RC4暗号をサポートしないようにする
②前方秘匿性を完全にサポート
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
この設定でRC4暗号スイートを削除し、前方秘匿性を提供するECDHEとDHEの暗号スイートが使用されます。
③旧バージョンの TLS を除外して、TLS 1.2 のみを設定する
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
④その他のディレクティブも設定し、必要があればモジュールをインストールしてください。
Apacheの設定を再読み込み
最後に、Apacheの設定を再読み込みします。
$ sudo systemctl restart httpd.service
もう一度セキュリティテストしてみましょう
先ほどのQualys SSL Labsでもう一度テストしてみましょう。
自分も以前ちゃんと設定していなかったところがあったので、改善してみたら以下のようにA+がもらえました!
最後に
今回はサーバーのセキュリティ改善をしていきました。
セキュリティは、ウェブサイトを運営する上で最も重要な要素の一つです。この記事を通じて、あなたのウェブサイトがより安全な環境で運営するのに役に立ったら嬉しいです。