Apacheにアクセス制限をかけよう

ここではHTTPサーバーであるApacheでアクセス制限をかけます。
用途としては、他の人間にこのページ、もしくはこのディレクトリ内は見せたくない!という時に使用します。
では前に解説したユーザー認証との違いはなんでしょうか?

ユーザー認証はユーザー名とパスワードを知る人間のみにアクセスを許可します。
しかしパスワードの盗聴、漏洩があり得ます。

アクセス制限とは、IPアドレスを元にアクセスの許可あるいは拒否をしますので、パスワードを知らなくてもアクセスすることが可能になります。
ただしインターネット側からのアクセスを考えた場合、IPアドレスはいくらでも変化しますので、思うような制限をかけるのは難しいです。

以上のことを考えると、IPアドレスが変化しない場合にしか有効でない=LAN内やループバックアドレスしか実質的には使えないことになります。
phpMyAdminをはじめとした、自分だけがブラウザから何かを管理するような場合に効果的と言えるでしょう。

実際の設定は極めて簡単です。
httpd.confの中でディレクトリを指定する、あるいは.htaccessファイルに
Order deny,allow
deny from all
allow from 127.0.0.1
allow from 192.168.1.1
allow from mizushima.ne.jp

このように書きます。
allowは許可、denyは禁止を表し、Orderはこのallowとdenyをどちらを先に設定するか指示しています。
意味は見ての通りですね。
すべてからのアクセスを拒否します。が、127.0.0.1および192.168.1.1そしてmizushima.ne.jpからのアクセスは許可します、という意味です。

ただドメインを利用する場合は、httpd.confのHostnameLookups OffをHostnameLookups Onにしなくてはなりません。
これにより若干のパフォーマンスダウンとなります。

それから注意点がいくつか。
当然サーバーに利用しているドメインを外から使ってしまったら、他の人がサーバーにアクセスできなくなってしまいます。
よって外で自分がアクセスする専用のドメインを取得する必要があります。 またIPアドレスは変化しますからDDNSの更新をしていない時に、他人が偶然アクセス制限をすり抜ける可能性があります。
(可能性としてはおそろしく低いと思いますが)ホストはいつでもどこでも完全に取得できる保証はありません。
許可IPに書いたつもりでもアクセスできない可能性もあるわけです。
もっと怖いのは拒否IPで書いたつもりが、拒否できずにアクセスできてしまうことです。

以上です。お疲れ様でした。