通常はホームページには誰でもアクセスできますが、アクセス制限をすることによって、
- パスワード登録されたユーザをパスワードで規制する
- ホスト名で拒否/許可する
ようにできます。誰かがホームページを見に来たら、サーバは、そのホームページのファイルが
あるディレクトリに「.htaccess」という名前のファイル(以下、設定ファイル)があるかどうかを調べます。
無ければ、そのままそのホームページのファイルを取り出(表示)します。設定ファイルがあれば、
サーバはその中身を検討します。その中身にアクセス制限をする記述をすればいいわけです。
基礎知識
これらはサーバソフトであるApache(またはNCSA)で可能な設定です。
ただし、ユーザが自分で設定できないようにプロバイダ管理者側で規制している場合はこの限りではありません。
サーバから得られるアクセス者のリモートホスト名が制限のための判断材料にされます。
それはホスト名(ドメイン名)でもIPアドレスでも構いませんが、
サーバから得られるそのデータがIPアドレスだけだと、設定内にホスト名を記述しても判断されず、制限されません。
例えばASKネットでは現在(98/7/18)、サーバ負荷軽減のためにホスト名を直接出力していません。
ですから、
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<body>$ENV{'REMOTE_HOST'}</body>";
exit;
でホスト名を表示させようとしてもIPアドレスしか出てきません。
よって、このような設定のサーバではIPアドレスを指定しての制限しかできません。
逆に、ホスト名がちゃんと表示されるサーバであれば、ホスト名でもIPアドレスでも設定できます。
あなたのご利用サーバはどうなのか、この設定を行う前にこのCGIスクリプトを実行して確認しておきましょう。
多くのISPでは、ダイヤルアップ時に自動的にIPアドレスをそのユーザに割り当てます。
従って、そのISPのユーザであるかどうかは、フルIPアドレスでは判断できません。
例えばASKネットにダイヤルアップする毎に、203.179.104.147 だったり 203.179.104.59
だったりという感じで、第4番目の数字が自動割り当てで変化してしまいます。
このIPの構造原理はちょっと難しいので私もよく調べていませんが、
203.179.104 までを設定することで、ASKのダイヤルアップユーザであることを判別して制限をかけることができるでしょう。
同様に、203.179 まででも 203 だけでも、そのIPに合致してしまえばその通りに制限されます。
さて、ホスト名を出力してくれる(上記CGIスクリプトでホスト名が表示される場合)サーバであっても、
IPアドレスが自動割り当てされるということは、それに対応するホスト名も変化します。
IPの場合は左側から固定されて右側が変化していましたが、ホスト名の場合は逆です。
例えばASKの場合(昔ホスト名を出力していた頃では)、utp123.ask.or.jp とか tko39.ask.or.jp など、
ISP独自の名前の付け方で左側から変化します。この場合にASKのユーザを制限する場合は、
.ask.or.jp にします。IPでの設定の場合は端にピリオドを入れていませんが、
マニュアルでは ask.or.jp ではなく、.ask.or.jp になっています。
ピリオドに重要な意味があるかどうかはわかりませんが、マニュアル通りにしておけばいいでしょう。
IPと同様に、.or.jp とか .jp にすればその通りに制限されます。
次に設定時の重要事項です。制限には主に「一部のホスト(IP)を制限する」と「一部のホスト(IP)だけに許可する」があります。
後者はプロバイダのユーザ向けの情報をホームページ上で公開する場合に、
そのプロバイダからのダイヤルアップから接続した人でないと表示できないページによく使われます。
その他に、Apacheの上位バージョンではブラウザ名で制限する等もできますが、
その辺は直接Module mod_accessマニュアルを参照してください。
どちらの制限でもお互いに関係があります。
一部のホストを制限する場合は、それ以外は許可することになります。
これをどうやって表現するかという問題です。
後述する実際の設定の中に、order という項目があります。
その設定でそれを表現します。
まず、一部のホストを制限する場合は、まず全てを許可し、その後に設定した一部のホストを制限する処理をします。
その手順で処理させるには、
deny,allow → deny(制限)処理がallow(許可)処理の前に評価(処理)される. (主に一部許可の場合に使う)
allow,deny → allow(許可)処理がdeny(制限)処理の前に評価(処理)される. (主に一部制限の場合に使う)
よって、これが逆になってしまうと意図するように動作しません。
例えば、.ask.or.jpを制限する場合に deny,allow を設定した場合、
先に .ask.or.jp を制限し、その後にすべてを許可してしまうと、結局全て許可になってしまいます。
以上の構造を十分理解して実際に設定します。
一部のホスト(IP)を制限する
この場合、まず全てを許可してから制限したいホスト名を制限するようにします。
ASKネットユーザを制限する場合の .htaccess の例(ホスト名で)
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthType Basic
<Limit GET POST PUT>
order allow,deny
allow from all
deny from .ask.or.jp
</Limit>
ASKネットユーザを制限する場合の .htaccess の例(IPで)
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthType Basic
<Limit GET POST PUT>
order allow,deny
allow from all
deny from 203.179.104
</Limit>
ASKネットとXXXのユーザを制限する場合の .htaccess の例
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthType Basic
<Limit GET POST PUT>
order allow,deny
allow from all
deny from .ask.or.jp .xxx.or.jp
</Limit>
一部のホスト(IP)だけに許可する
この場合、まず全てを制限してから許可したいホスト名を許可するようにします。
上記の逆になるだけです。
ASKネットユーザだけを許可する場合の .htaccess の例(ホスト名で)
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthType Basic
<Limit GET POST PUT>
order deny,allow
deny from all
allow from .ask.or.jp 203.179.104
</Limit>
(参考)
|