Apache 2.4のhttpとhttpsでIPアドレスや違うFQDNによるアクセスを拒否する

ウェブサーバーは、通常は、 http://www.example.com や https://www.example.com というリクエストを受けて、HTMLデータをクライアントへ返しているわけですが、
サーバーに対して、外部から、
http://999.999.999.999
https://999.999.999.999
のように、IPアドレスでアクセスしに来る場合もあります。
また、ウェブサーバー自身は www.example.com で情報提供したいのに、第三者が、xxx.example.net をそのサーバーのIPに勝手にDNS割当てしてアクセスさせるということもできたりするので、ウェブサーバー側では、IPアドレスによるアクセスに限らず、自分がホストしているFQDN以外でアクセスがあった場合は、基本的には「アクセス拒否」したほうが良いです。

reject01.png

特に、中国国内に立てているウェブサーバーは、ICPサイト登録が必要だったりしますが、登録したドメイン以外でアクセスができてしまうと、データセンター経由で、当局より叱られたりします。

そんな、「IPアドレスや違うFQDNによるアクセスを拒否したい場合」の設定方法です。
OSはCentOS 7.5、Apacheは2.4.6、SSLはmod_sslです。
状況設定が中途半端(DocumentRootが/var/www/htmlだったり...)な、ざっくりメモです。
よくわからない子はまねしないでね。

ちなみに、Apache 2.4では、デフォルトでVirtualHostがONになっています。
そして、VirtualHostやSSLの設定は cond.d/*.conf からIncludeするようになっています。

1.http(80)については、ホストするVirtualHostを conf/httpd.conf または conf.d/vhost-01.conf に、必要な設定を行います。

(vhost-01.confの中身の例)
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
Options Includes ExecCGI FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

2.https(443)については、ホストするVirtualHostを conf.d/ssl.conf 等に、必要な設定を行います。

ここまでの設定で、
http://www.example.com
https://www.example.com
http://999.999.999.999
https://999.999.999.999
http://xxx.example.net ←不正なFQDN
https://xxx.example.net ←不正なFQDN
のすべてでアクセスができるようになってしまっています。

3.conf.d/ の下に 00-reject.conf のような名前で、以下のような内容のファイルを用意します。
conf.dのREADMEには
 Files are processed in alphabetical order.
とあるので、ファイル名が非常に重要なポイントになります。

<VirtualHost *:80>
ServerName any
<Location />
Require all denied
</Location>
</VirtualHost>

<VirtualHost *:443>
ServerName any
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt ←ファイル名はあなたの環境のそれを指定
SSLCertificateKeyFile /etc/pki/tls/certs/server.key  ←ファイル名はあなたの環境のそれを指定
<Location />
Require all denied
</Location>
</VirtualHost>

4.チェックとapacheの再起動
apachectl configtest
systemctl restart httpd

こんな感じです。
試してみてね。

ぐっどらっこ。