IPアドレスから自分のドメインを逆引きされないようにApacheを設定する
自分のドメインを逆引きから隠す (Apache)
概要
自宅サーバを稼働しているがグローバルなIPアドレスを1個しか持っていない,
という場合,自分がWebアクセスしたときに相手サイト(掲示板,アクセスログ等)に残したIPアドレスは,
自宅サーバのIPアドレスとイコールになる.
その相手サイトに知られたIPアドレスから,自宅サーバのドメインを知られたくない,
という場合は結構あると思われるので,その防御策について記述する.
策としては,IPアドレスを直接指定したURL(例えば「http://aaa.bbb.ccc.ddd」)
でのアクセスに対して,エラーページ(404)を返すことにする.
ただしエラーページを返すということは,「Webサーバが動作している」という情報をアクセス者に与えることになる.
そのため本来は,HTTPよりさらに低いレベル(TCP)で,アクセスを拒否させた方が望ましい.
しかし,HTTPリクエストの内容(具体的にはHostヘッダの値)によってTCPコネクションを切断するという方法が,
分からなかったのでした...
なお,幸か不幸か,自分のドメインの逆引き設定ができていて,
「aaa.bbb.ccc.ddd」から自分のドメインが逆引きできる場合は,
当たり前ですが対処のしようがありません.
手順
1.対象を決める
例えば今回は,以下の2種類をURLに使ったアクセスを禁止することにする.
グローバルIPアドレス | そのIPアドレスから引けるホスト名 |
aaa.bbb.ccc.ddd | xxx.net |
なお,IPアドレスから引けるホスト名は,
# host aaa.bbb.ccc.ddd (←Linuxのシェル)
や
> nslookup aaa.bbb.ccc.ddd (←Windowsのコマンドプロンプト)
等で調べれば良し.
2.Apacheの設定
例えば,以下のようにダミーのディレクトリを作っておいて,
# mkdir /var/www/html/notexist
こんな感じでApacheのhttpd.confを編集してみる.
httpd.confの抜粋
<VirtualHost xxx.net>
ServerName xxx.net
DocumentRoot /var/www/html/notexist
CustomLog /dev/null common
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
</VirtualHost>
<VirtualHost aaa.bbb.ccc.ddd>
ServerName aaa.bbb.ccc.ddd
DocumentRoot /var/www/html/notexist
CustomLog /dev/null common
ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
</VirtualHost>
ダミーのディレクトリの中身は空なので,アクセスされても404エラーを返すだけという動作になる.
ErrorDocumentは,特に自分でカスタマイズしていなければ,あえて指定する必要はない.
俺の場合はカスタマイズしているので,それが適用されないようにあえてデフォルトの内容を指定している.
CustomLogは,ログを残したくないのであえてこうしてますが,残したいなら適宜ファイル名を指定すべき.
といっても,常にエラーを返すのでエラーログにしか残りようがなく,CustomLogは指定しても実質的な意味はないはずです.
また,ServerSignatureをOffにするのは,セキュリティの観点(攻撃者に情報を与えない)から常識かと思うが,
うっかりこれを忘れていると,表示されるエラー画面に,隠しているつもりのドメインが表示されるという間抜けな事態になりかねないので注意.