直IPでのアクセスを拒否する [Apache 2.4]

Apacheで直IPでのアクセスを拒否する設定

vhost defaultを使う方法もありましたが、なぜかsslの設定と競合してしまって自分ではできなかったので、調べて成功したものを紹介します。

手法を簡単に説明すると 「ServerNameがIPになっているバーチャルホストを作り、その中で全てのアクセスを拒否する」 となります。

以上設定していきます。 各VirtualHostが、ssl.conf、vhosts.confに記述されているものとします。

また、設定する際、変更する設定ファイルのバックアップをとることを強くお勧めします。変更量は少ないですが、元に戻せなくなるとVirtualHost関連の設定は非常に面倒です。

cp ssl.conf ssl.conf.bk
cp vhosts.conf vhosts.conf.bk

ssl.confがhttpsのバーチャルホスト、vhosts.confがhttpの設定となります。 ssl.confについて、以下のように変更します。

Listen 443 https
#... 他の設定
<VirtualHost *:443>
ServerName exapmle.com
#... 他の設定
</VirtualHost>

+ <VirtualHost *:443>
+ ServerName ??.??.??.??(IPアドレス)
+ Redirect 403 /
+ DocumentRoot /var/www/html
+ </VirtualHost>

+のところを追記します。

vhosts.confについても同様に変更します。

#... 他の設定
+ <VirtualHost *:80>
+ ServerName ??.??.??.??(IPアドレス)
+ Redirect 403 /
+ DocumentRoot /var/www/html
+ </VirtualHost>

以上で、直IPを拒否する設定は完了です。

以下のように、直IPアクセスが拒否されるかと思います。 モザイクがかかっていますが、長さで判断してください。IP直打ちでは403が返され、URLでアクセスするとページがしっかりと読み込まれます。 ip_reject_success1

ip_reject_success2