Apache や Nginx をパッケージ管理でインストールすると設定ファイルはデフォルト状態で配置されます。そのためセキュリティ上無効化しておく設定や追加した方が安心な設定がされていません。本番運用前にやっておくと良いものをまとめました。
Redhat系のパッケージでApacheは2.4系、Nginxは1.1、1.2系とします。
目次
デフォルトページの無効化
ApacheやNginxをインストールして起動後にサーバーにブラウザでアクセスすると次のようなテストページが表示されるようになっています。
このページは正常にインストールされたかの動作確認ページのため本番環境では不要で、場合によってはインストールされているもののバージョン情報などが表示されセキュリティを下げてしまうこともあります。
無効化方法例
[Apache] 以下のファイルの中身を全てコメントアウトする。 ※ファイル削除ではアップデートすると復活してしまう。 /etc/httpd/conf.d/welcome.conf ※DirectoryIndex や DocumentRoot に指定したファイルが存在しなければ、デフォルトページを表示するようになっています。 [Nginx] /etc/nginx/nginx.conf や /etc/nginx/conf.d/ 配下のファイルの以下の設定を削除する alias /usr/share/nginx/html/
root /usr/share/nginx/html/
ディレクトリリスティングの無効化
ディレクトリリスティングとは次の画像のように、URLに対応するWebサーバー上のディレクトリ内のファイル一覧を表示するApacheやNginxの機能を指します。
この機能を有効にしておくと攻撃者から構造が丸見えになってしまうため、脆弱性として扱われることもあります。
無効化方法例
[Apache] 設定ファイル全般の Directory ディレクティブ内の Options Indexes や Options All の設定を以下などに変更する。 Options All -Indexes [Nginx] Nginxの設定内に以下の設定があれば削除する。 autoindex on
設定確認方法
どこに設定されているかわかりづらいので以下のコマンドなどで設定箇所を確認できます。
[Apache] find /etc/httpd -type f -name "*conf" | xargs grep "Options" [Nginx] find /etc/nginx -type f -name "*conf" | xargs grep "autoindex"
Webサーバーのバージョン非表示化
次の画像のように403ページやレスポンスヘッダーでWebサーバーのバージョンが表示されてしまう場合があります。こういった場合特定のバージョンの脆弱性をついたアタックがしやすくなってしまいます。
非表示化方法例
[Apache] /etc/httpd/conf/httpd.conf ファイル内に以下を追加する。 ServerTokens Prod
[Nginx]
/etc/nginx/nginx.conf ファイル内の http ディレクティブ の中に以下を追加する。 server_tokens off
iconディレクトリの無効化(Apacheのみ)
iconディレクトリ内にはApacheの動作確認ページやディレクトリリスニングページで使われる画像などが含まれています。これ自体に問題はありませんが、脆弱性診断などでひっかかるため無効化しておく方が無難となります。
無効化方法例
[Apache] /etc/httpd/conf.d/autoindex.conf 内の以下をコメントアウトする。 Alias /icons/ "/usr/share/httpd/icons/"
Traceの無効化(Apacheのみ)
使うことはほとんどないと思いますが、Apacheには 「HTTP TRACEメソッド」というものが実装されています。これはデバッグ目的でリクエスト内容をそのままレスポンスに含めて返すというものです。そのため本番環境では不要なものです。またXST攻撃というもので使われるため無効化しておくものとされています。実際はブラウザの時点でTraceが無効化されてるようなのでXST攻撃が成立することは基本的にはなさそうです。
無効化方法
[Apache]
/etc/httpd/conf/httpd.conf に以下を追加します。
TraceEnable Off
HTTP/2の有効化(Apacheのみ)
AlmaLinuxやRedhat8系であればデフォルトでHTTP/2は有効になっていますが、CentOS7のApache2.4.6系ではバージョンが低いためサポートされておらず、AmazonLinux2ではデフォルト無効になっています。
有効化設定
HTTP/2は古くからある prefork ワーカーでは使用することができません。 event ワーカーでサポートされているのでこちらに変更します。
※ PHPを使っている場合は event ワーカーにしたら PHP-FPM へ切り替える必要があります。
[Apache] /etc/httpd/conf.modules.d/00-mpm.conf ファイル内の設定を以下に変更する
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
↓
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule mpm_event_module modules/mod_mpm_event.so
ブラウザで実装されているセキュリティ対策の有効化
ブラウザでは様々なセキュリティの機能が実装されています、しかしコンテンツに影響を与える可能性があるためデフォルトでは警告に留めるものが多いです。Webサーバーの設定によってそれを有効化することができます。ここではまず影響が発生しにくいものから紹介します。
クリックジャッキング対策設定例
[Apache]
Apacheの設定ファイルに以下を追加
Header append X-Frame-Options SAMEORIGIN
[Nginx]
Nginxの設定ファイルに以下を追加
add_header x-frame-options "SAMEORIGIN";
XSSフィルター機能設定例
[Apache]
Apacheの設定ファイルに以下を追加
Header set X-XSS-Protection "1; mode=block"
[Nginx]
Nginxの設定ファイルに以下を追加
add_header x-xss-protection "1; mode=block";
MIMEタイプのスニッフィング対策設定例
[Apache]
Apacheの設定ファイルに以下を追加
Header set X-Content-Type-Options nosniff
[Nginx]
Nginxの設定ファイルに以下を追加
add_header x-content-type-options "nosniff";
その他のブラウザで実装されているセキュリティ対策
下記対策についてはサイトによっては問題が発生する可能性があるため使用する場合はご注意ください。
HTST(中間者攻撃対策)設定例
httpのリクエストをブラウザ側でhttpsに変える機能のため、httpを使うサイトでは設定できません。
[Apache]
Apacheの設定ファイルに以下を追加
Header always set Strict-Transport-Security "max-age=63072000"
[Nginx]
Nginxの設定ファイルに以下を追加
add_header Strict-Transport-Security "max-age=63072000";
コンテンツセキュリティポリシー(XSS軽減対策)設定例
サイトで使用する外部リソースを明確に定義し、それ以外のリソースをブロックする機能になります。そのためサイトのコンテンツ内容を正確に把握している必要があります。
おわりに
以上の設定をしておくと少し安心して日々を過ごせるかと思います。なおWAFを入れるとさらに安心することができます。
一緒に働く仲間を募集しています。
新卒採用・中途採用を問わず、年間を通して、さまざまな職種を募集しています。「すぐに仕事がしたい」「話を聞いてみたい」「オフィスを訪問してみたい」など、ご応募をお待ちしています。共に未来をカタチにする仲間を待っています。