Apache を VirtualHost 構成で運用している場合、意識しないまま「デフォルトサーバー」が決まっていることがある、というか決まっていた。
サーバーは問題なく動作していても、意図しない VirtualHost が default server になっていると、
将来的なトラブルやセキュリティリスクにつながる可能性があるらしい。
この記事では、
- デフォルトサーバーとは何か
- なぜ明示的に設定したほうがよいのか
- 実際の設定手順(80番ポート)
を、できるだけ簡潔にまとめる。
デフォルトサーバーとは何か
Apache における デフォルトサーバー(default server) とは、どの VirtualHost にも一致しなかったアクセスを処理するサーバー のこと。
例えば次のようなアクセスが該当する。
- IPアドレス直打ち
- 存在しないドメイン名
- 不正な Host ヘッダを使ったアクセス
Apache では、
- 同じ IP
- 同じポート(80 / 443)
の中で、最初に読み込まれた <VirtualHost> が default server になる。
なぜデフォルトサーバーを設定したほうがよいのか
1.意図しない VirtualHost が受け皿になるのを防ぐ
VirtualHost を複数定義していると、過去に使っていた設定やテスト用設定が default server になっていることがある。
default server は すべての想定外アクセスを受け取るため、管理されていない VirtualHost が default になるのは望ましくない。
2.本番サイトを default にしないため
default server は、
- Bot
- スキャン
- 想定外のリクエスト
をすべて受ける「最後の受け皿」。
本番サイトを default にしてしまうと、不要なアクセスを直接受ける構成になってしまう。
3.将来の設定変更に強くなる
VirtualHost が増えたり、設定ファイルの順序が変わった場合でも、default server が専用で用意されていれば意図しない挙動が起きにくいというメリットがある。
デフォルトサーバーの設定方針
今回の方針は次のとおり。
- default serverは専用で用意する
- 実際のドメインは使わない
- 中身は空
- アクセスは拒否する
80番ポート用の default server 設定手順
1.default 用設定ファイルを作成
以下の内容の /etc/httpd/conf.d/00-default.conf を作成する。
<VirtualHost *:80>
ServerName _default_
DocumentRoot /var/www/empty
<Directory /var/www/empty>
Require all denied
</Directory>
</VirtualHost>
ポイント:
00-を付けて 最優先で読み込ませる- 実在しない ServerName(識別用)
- 中身は空 + アクセス拒否
2.empty ディレクトリを作成
sudo mkdir -p /var/www/empty
sudo chown root:root /var/www/empty
sudo chmod 755 /var/www/empty
3.設定チェックと反映
sudo apachectl -t
sudo systemctl reload httpd
4.確認
sudo httpd -S
次のように表示されれば成功。
*:80
default server default (/etc/httpd/conf.d/00-default.conf:1)
443番(SSL)について
443番(HTTPS)にも 別の default server が存在するが、SSL証明書の設定が必須になるため、
80番より少し慎重な対応が必要になる。
今回はまず 80番側の default server を整理し、443番は別途確認・対応する方針とした。
