「ホームページのアクセス制限のかけ方」
                       東京情報大学 情報システム学科 森口
                       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