Apacheをそのままの設定で使うことは、脆弱性対策の観点からお勧めできません。
主な脆弱性対策方法を紹介します。
Webサーバーとしての設定
- Traceメソッドの無効化
Traceメソッドが使用可能であると、XSTという攻撃に晒されます。 httpd.confや、それが参照する設定するファイルに、以下のように追記します。
TraceEnable Off
- Apacheのバージョンを非表示にする
404のページや、レスポンスヘッダーなどにApacheのバージョンがのっていると、それを基準に脆弱性を突かれる可能性があります。攻撃者に対してできる限り情報を隠すという面でもバージョンは秘匿するべきです。 httpd.confを以下のように変更してください。
- ServerTokens OS + ServerTokens Prod
設定反映は以下のどちらかで行えます。
systemctl restart httpd systemctl reload httpd
SSL/TLS関連
SSL/TLS関連の設定を行なっていきます。
- 強固な暗号化を実現するため、TLS1.2,TLS1.3以外無効化
SSLProtocol -All +TLSv1.2 +TLSv1.3
- 弱い暗号を使用しないようにする
SSLCipherSuite TLSv1.3 "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256" SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-CCM:ECDHE-ECDSA-AES256-CCM8:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-CCM:ECDHE-ECDSA-AES128-CCM8:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-CCM:DHE-RSA-AES256-CCM8:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-CCM:DHE-RSA-AES128-CCM8"
なお、暗号の強弱はIPOのドキュメントより判断しました。
- サーバー側で暗号を選ぶようにする
- #SSLHonorCipherOrder on + SSLHonorCipherOrder on
HSTS
httpsのバーチャルホストを立て、httpで接続してきたらhttpsの方へリダイレクトさせる、というような設定がされているものとします。 以前の常時SSLの記事を参考にしてください。
HSTSを簡単に説明すると、ブラウザに対しhttpsのバーチャルホストがあることを記憶させ、次またhttpでアクセスしようとしても、ブラウザがhttpsにリクエストを変えるといったことを実現する標準規格です。
ssl.confなどにある、httpsを受け持つバーチャルホスト内で設定します。
<VirtualHost *:443> ... + Header add Strict-Transport-Security "max-age=15768000" ... </VirtualHost>
これにより、HSTSが有効になります。max-ageというオプションは、ブラウザがキャッシュを保持する時間(秒)です。
その他の脆弱性
Header append X-Frame-Options SAMEORIGIN Header always set X-XSS-Protection "1; mode=block" Header always set X-Content-Type-Options nosniff
X-XSS-Protection、MIME-Sniffing、ClickJacking対策になっています。 X-XSS-Protectionは、時代的にあまり推奨ではなくなってきているため、個人の判断で導入ください。
X-Frame-Optionsは、クリックジャッキング対策です。透明のボタンなどを配置されないようにするためです。
X-Content-Type-Optionsは、MIMEタイプが外に漏れないようにするものです。