「ホームページのアクセス制限のかけ方」
東京情報大学 情報システム学科 森口
2001.03.26 ver.1.0
2004.03.15 間違ってる部分を小修正
2005.05.19 小修正 Limit関連
2007.08.07 Basic認証でクライアントからサーバに
送られる形式について追記
2008.12.27 日本からのアクセスだけ許可する方法を追記
2012.06.11 digest認証追記 他間違い修正
2014.11.07 hosts/allow の間違い修正
2019.07.05 opennssl がうまくいかないのでnkfを追記
2024.04.26 digest認証をできるようにするサーバ設定を追記
インターネット上のホームページは一般に全世界から閲覧可能だが、場合によっては
一部の人や組織に対してのみ閲覧可能にしたい場合や、逆に一部の人や組織に対してだけ
閲覧させたくない場合が発生する。例えば授業の教材として使用しているホームページ
などで、先生によっては「授業料を払ってない外部の者には見せたくない」と思う事が
あるかもしれない。ここでは、自分の作成したホームページにアクセス制限をかける方法
を2つ紹介する。
それぞれの方法を説明する前に、アクセス制限とは、個々のファイルに対してでは
なく、ディレクトリーに対して制限をかけるものだということを理解しておいて欲しい。
[パスワードでアクセス制限する場合]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ディレクトリー /home/ichirou/public_html/eee/ 内にあるファイル全てに
ID:ahou
passwd:bakabaka
でアクセス制限する場合。
[BASIC認証]
1) WWWサーバにログインし、目的のディレクトリーにカレントディレクトリーを移す。
2) 以下の内容のファイル .htaccess を作る。(書き換えて下さいね)
AddType application/x-httpd-cgi .htaccess <== (1)
AddType application/x-httpd-cgi .htpasswd <== (1)
AuthUserFile /home/ichirou/public_html/eee/.htpasswd
AuthGroupFile /dev/null
AuthType Basic <== (2)
AuthName "FLYING TYURUUUSI" <== (3)
require user ahou
allow from all
(1) 管理者が下手なサーバ設定をしていたとしても .htaccess .htpasswd を覗かれない
ようにする技。
(2) Basic認証。
(3) ID とパスワードを入力するウィンドウに表示される文字列。
注意!アクセス制限をする場合、ネットや書物を調べると .htaccess で allow や deny を
<Limit ...>
allow from ...
deny from ...
</Limit>
のように <Limit ...> タグで囲むように記述されているが、Apache(特に2.0.X系列)
ではこの設定を素通りできる手法が存在する!よって上記のように<Limit ...>
タグを使用しない .htaccess を作成せよ。
3) chmod o+r ./.htaccess
とコマンドラインで入力し、WWWサーバソフトが 2)で作成したファイルにアクセス
できるようにする。
4) /usr/local/apache/bin/htpasswd -c .htpasswd ahou
などとコマンドラインで入力し、ahou というIDに対してパスワード作成プログラムを
起動する。この例は /usr/local/apache/bin/ にhtpasswd というパスワード作成プログラム
がある場合だが、この場所は各WWWサーバやインストール時の設定に依存しますので、
このプログラムがサーバマシンのどこにあるのかを事前に確認しておいてください。
5) 4)を実行するとパスワードを聞いてくるので bakabaka を入力する(2回)。
4),5) の操作で以下の内容のファイル .htpasswd が出来る。
ahou:NrZ5XGyTpmRpA
これはIDとパスワードをDES暗号化したセットである。先頭2文字が salt
もしDESではなくMD5でハッシュ化したければ -m オプションをつけて
/usr/local/apache/bin/htpasswd -m -c .htpasswd ahou
すると
ahou:$apr1$Jxel0...$5jHYw7eQ5VYgkwuZJSHUU/
ができる。$apr1$Jxel0...$ がsalt
クライアントからサーバへは
ahou:bakabaka
を base64 エンコードした
YWhvdTpiYWthYmFrYQ==
が送られる。単なるエンコードで暗号化ではないため、クライアントとサーバ間で
パケットを盗聴されると
$ echo YWhvdTpiYWthYmFrYQ== | openssl enc -d -base64
$ echo "YWhvdTpiYWthYmFrYQ==" | nkf -mB
ahou:bakabaka$
のように簡単にパスワードがばれてしまうことに注意せよ。
万全を期すなら https と組み合わせてやればよい。
[digest認証]
0) Apache2.4.X を使用している WWWサーバ上で Digest認証を使用可能にするには、
httpd.conf の 82行目あたりの
LoadModule auth_digest_module modules/mod_auth_digest.so
を有効にし、apacheを再起動する必要がある。
1) WWWサーバにログインし、目的のディレクトリーにカレントディレクトリーを移す。
2) 以下の内容のファイル .htaccess を作る。(書き換えて下さいね)
AddType application/x-httpd-cgi .htaccess <== (1)
AddType application/x-httpd-cgi .htdigest <== (1)
AuthUserFile /home/ichirou/public_html/eee/.htdigest
AuthGroupFile /dev/null
AuthType digest <== (2)
AuthName "FLYING TYURUUUSI" <== (3)
require user ahou
allow from all
(1) 管理者が下手なサーバ設定をしていたとしても .htaccess .htpasswd を覗かれない
ようにする技。
(2) digest認証。
(3) ID とパスワードを入力するウィンドウに表示される文字列。
注意!アクセス制限をする場合、ネットや書物を調べると .htaccess で allow や deny を
<Limit ...>
allow from ...
deny from ...
</Limit>
のように <Limit ...> タグで囲むように記述されているが、Apache(特に2.0.X系列)
ではこの設定を素通りできる手法が存在する!よって上記のように<Limit ...>
タグを使用しない .htaccess を作成せよ。
3) chmod o+r ./.htaccess
とコマンドラインで入力し、WWWサーバソフトが 2)で作成したファイルにアクセス
できるようにする。
4) /usr/local/apache/bin/htdigest -c .htdigest 'FLYING TYURUUUSI' ahou
などとコマンドラインで入力し、ahou というIDに対してパスワード作成プログラムを
起動する。この例は /usr/local/apache/bin/ にhtdigest というパスワード作成プログラム
がある場合だが、この場所は各WWWサーバやインストール時の設定に依存しますので、
このプログラムがサーバマシンのどこにあるのかを事前に確認しておいてください。
5) 4)を実行するとパスワードを聞いてくるので bakabaka を入力する(2回)。
4),5) の操作で以下の内容のファイル .htdigest が出来る。
ahou:FLYING TYURUUUSI:37574b1aca570716abf91e2e1c787a11
これはIDとパスワードをMD5でハッシュしたセットである。
詳細は省略するが、とにかく、クライアントからサーバへは生パスワードは流れない。
注意:パスワードによるアクセス制限は、一見カッコいいようにみえるが、閲覧者に
負担を強いる方式なので、本当にアクセス制限する必要があるのかどうかを慎重に
考慮すべきである。
[ホストのIPアドレスでアクセス制限する場合]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ディレクトリー /usr2/people/ichirou/public_html/intranet/ 内にあるファイル全て
を情報大からしかアクセスできないようにする方法。
1) WWWサーバにログインし、目的のディレクトリーにカレントディレクトリーを移す。
2) 以下の内容のファイル .htaccess を作る。
AddType application/x-httpd-cgi .htaccess
allow from 127.0.0.0/8
allow from 202.26.144.0/20
allow from 192.168.0.0/16
allow from 172.16.0.0/12
allow from 10.0.0.0/8
もし自宅からもブラウザでアクセスしたいのならここに
自宅PCのIPやプロバイダのプロクシサーバのIPを許可する行を追加する
deny from all
注意!アクセス制限をする場合、ネットや書物を調べると .htaccess で allow や deny を
<Limit ...>
allow from ...
deny from ...
</Limit>
のように <Limit ...> タグで囲むように記述されているが、Apache(特に2.0.X系列)
ではこの設定を素通りできる手法が存在する!よって上記のように<Limit ...>
タグを使用しない .htaccess を作成せよ。
3) 以下のコマンドを入力し、WWWサーバソフトにアクセス権を与える。
chmod o+r ./.htaccess
それだけ。
お遊び。
deny や allow の部分をいろいろいじると、学内にあるホームページなのに biglobe の
北九州のアクセスポイントからしか見られないホームページや、文科省からしか見られ
ない内部告発ページも作れるが、悪用しないように。(笑)
.htaccessがらみでついでに書いとく。
[CGIやSSIを実行可能にする]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Options Includes ExecCGI
Addtype text/x-server-parsed-html .shtml .html .htm <== (4)
Addtype application/x-httpd-cgi .cgi .sh .pl <== (5)
AddType application/x-httpd-cgi .htaccess
(4) SSIを埋め込むファイルの拡張子を羅列する。
(5) cgiファイルの拡張子を羅列する。
[めんどくさがり屋向け1]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
もしパスワード認証をせず、SSIやCGIをやる必要があるが、それぞれのディレクトリー毎で
.htaccess を書くのが面倒な人は以下の内容の .htaccess ファイルを全ディレクトリーに
コピーしておいてもよい。
Options Includes ExecCGI
Addtype text/x-server-parsed-html .shtml .html .htm
Addtype application/x-httpd-cgi .cgi .sh .pl
AddType application/x-httpd-cgi .htaccess
allow from 127.0.0.0/8
allow from 202.26.144.0/20
allow from 192.168.0.0/16
allow from 172.16.0.0/12
allow from 10.0.0.0/8
deny from all
[めんどくさがり屋向け2]
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
情報大内部と日本からのアクセスだけ許可する、過激な手段
AddType application/x-httpd-cgi .htaccess
order deny,allow
deny from all
allow from .jp
allow from .bbtec.net # .jp ではないが、Yahoo BB は許可
allow from .il24.net # .jp ではないが、Interlink は許可
allow from 202.26.144.0/20
allow from 192.168.0.0/16
allow from 172.16.0.0/12
allow from 10.0.0.0/8