アクセス制御設定方法

更新日:2003. 2.1
作成日:2002.11.4

 アクセス制御を設定すると、あるパス以下には特定の IPアドレス(あるいはホスト/ドメイン)からのアクセスだけを許可/拒否するようにコントロールができる。

 用途としては例えば会社/大学などの組織内での利用において、一部のコンテンツを自部署限定で公開する場合などがある。

  1. ユーザ認証とアクセス制御の比較

     アクセスを制限する方法として「アクセス制御」以外に「ユーザ認証」があるが、その違いを以下に簡単に整理する。

    [ユーザ認証]
    ・アクセスできるを選ぶ。パスワードを知っている人だけにアクセスを許可する。
    ・ホストは選ばないので居場所に関係なくどこからでもアクセスできるというメリットがある。
    ・パスワードを知られてしまうと誰でもアクセスできてしまうというリスクがある。
    ・少数の人だけにアクセスを許可するような場合に有効であり、その逆のケースである少数を禁止する用途には向かない。
    ・パスワードを忘れたという人が必ず出て来るので煩わされることの覚悟が必要。

    [アクセス制御]
    ・アクセスできるホスト(IPアドレス)を選ぶ(できないホストも選べる)。そのホストからなら誰でもアクセスできるので、人を選んでいるわけではない。
    ・別の場所のホストからはアクセスしたくてもできないという状況が起こり得る。
    ・パスワードのように漏れるという心配はない。
    ・アクセス可能なプロクシサーバを経由されるとアクセス制御が無意味になるので、プロクシのアクセス制御も考慮が必要である。
    ・ごく一部のホストだけにアクセス許可、逆に禁止の両方の使い方が可能である。
    ・IPアドレスが固定な使い方であること。許可/拒否IPの追加/削除が頻繁にあると管理が煩わしくなる。
    ・IPアドレスの付与に DHCPを使っていると、ある範囲のIPを一括許可または拒否になるので向かないことがある。
    ・上記と同じ理由でインターネット上では固定IPでないホストが多いので、自宅サーバにおいてはアクセス制御をしても有効な使い方はほとんどできないかもしれない。

  2. 設定方法

     アクセス制御機能を有効にするには、アクセス制御タブ左上欄の「アクセス制御」に必ずチェックする。



     アクセス制御するパス、IPアドレスは以下の要領で設定する。
    下図は特定のIPアドレス(192.168.0.11, 192.168.0.12)のみ許可するケースである。



     パス欄にはアクセス制御するパス名(ローカルパスではなく URL としてのパス)を「/abc/xyz」のように書く(頭は必ず / にする。後ろの / は不要)。
     パス欄を単に「/」とすると、ドキュメントルート以下への全てのアクセスを許可/拒否することができる。
     もちろん、エイリアスとして設定したパスに対してもアクセス制御を指定することが可能である。
     一つのパスに対する設定は一つの設定ウィンドウ内で全ての IPアドレスを記述する。すなわち、同じパスが2回以上出てくるような設定は無効である。
     ここでファイル名を指定すればそのファイルだけにアクセス制御が有効になる。

     AN HTTPDにおけるアクセス制御はアクセスを許可した IPの中でアクセスを拒否する IPを指定する という方式である。

     許可IP/拒否IP欄には一行に一つのIPを書いて改行し、複数のIPを指定できる。ここではコンマは不要。
     IPアドレスはドット(.)区切りの形式で書き、区切り内は十進数または一つのワイルドカード(*)のみが可能である。例えば以下のように。
     192.168.0.10
     192.168.*.*
    十進数とワイルドカードを含む以下のような書き方は無効である。
     192.168.10.1*

     複数のパスを設定したとき、パス名の左のチェックマーク(v)をオン/オフすることによって個別に有効にするかどうかを設定できる。一時的に変更するときなどに使うと便利である。

     特定のIPアドレス(192.168.0.21)からのアクセスを拒否するには以下のように設定する。
    -----------------------
    v アクセス制限有効
    パス: /
    許可IP: *.*.*.*
    拒否IP: 192.168.0.21
    -----------------------

    アクセスが拒否されたホストには以下のメッセージが表示される。
    ------------------------------------------
    Error 403
    ドキュメントにアクセスする権限がありません
    ------------------------------------------
    ただし、IEで簡易設定になっているとメッセージは置き換えられてしまうので必ずこのメッセージが出るというわけではない(参考)。

  3. IPアドレスの範囲指定

    ワイルドカードを使うと 0-255(厳密には 1-254 のこともある)の範囲を指定したことになる。
    許可IP欄空欄は *.*.*.* (全ホストを許可) を意味する。
    拒否IP欄空欄は指定なしを意味する。

    許可IP、拒否IPは以下の3通りの方法で範囲指定が可能である。

    (1) 192.168.10.144-192.168.10.159
    (2) 192.168.10.144/255.255.255.240 (サブネットマスク使用)
    (3) 192.168.10.144/28 (プリフィックス使用)

    以下簡単に説明する。
    (1) 192.168.10.144-192.168.10.159 は
     文字通り 192.168.10.144, 145, … , 158, 159 の16通りの IPアドレスを意味し、2進数表記では最下位の4ビットが 0000 から 1111 までの全てになる。
      10進数: 192.168.10.144
       2進数: 11000000.10101000.00001010.10010000

    (2) 192.168.10.144/255.255.255.240 とは
       2進数: 11000000.10101000.00001010.10010000

       2進数: 11111111.11111111.11111111.11110000
    でマスク(論理AND演算)するの意。

    (3) 192.168.10.144/28 とは
       2進数: 11000000.10101000.00001010.10010000

    先頭から28ビットを固定ビットとするの意。

    (参考ページ)
    http://www.microsoft.com/windows2000/ja/server/help/sag_RRAS-Ch1_89.htm
    http://www.mse.co.jp/ip_domain/domain_text.html#ip

  4. ホスト名/ドメイン名による指定
     アクセス制御の設定は上で説明したIPアドレス以外に、ホスト名やドメイン名でも指定可能である。
    その場合には、オプション/一般タブの「リモートホストを取得」を必ず「常時」としておくこと。

    アクセス制御の許可IP/拒否IP欄には、ホスト名をFQDNで書く。
     host.hoge.ne.jp
    携帯を表すドメイン名を指定するのであれば
     *.docomo.ne.jp
     *.ezweb.ne.jp
    あるいは
     docomo.ne.jp
     ezweb.ne.jp
    のように入力する。*. をつけるのはIE風、つけないのはNetscape風でどちらでも可。

    もっと一般的には、
     como.ne.jp
     web.ne.jp
     *como.ne.jp
     *web.ne.jp
     .docomo.
     .ezweb.
    のように書いても docomo.ne.jp、ezweb.ne.jp を含めることができる。ただ、余りに省略すると他のホスト/ドメインも含む可能性が出てくるのでお勧めではない。

    (追記) so-net.ne.jpのようにホスト名/ドメイン名にハイフン(-)を含むケースではうまく動作しないので要注意である(参考ページ)。

    「リモートホストを取得」を「常時」にすればホスト名が必ず取得できるというわけではないことを知っていないといけない。
    例えば会社内で PC にプライベートIPアドレスを付ければ、DNSに登録しなくても大抵は普通に使えてしまうだろう。
    インターネット上ではホスト名が取得できるという保証はなく、現に取得できないホストは数えきれないくらいある。
    このようなケースでは「リモートホストを取得」であってもホスト名は取得できず、そのPCにはホスト名/ドメイン名でのアクセス制御は効かないということになる。

    許可IPにホスト名/ドメイン名を書いたときにはアクセスできないホストができてもセーフ側なのでまあ構わないかもしれないが、拒否IPに書いた場合は拒否したつもりが実はすり抜けていたということになるので要注意である。
    厳密な制御が必要であればホスト名/ドメイン名は使わずに、IPアドレスで設定することである。

    また「リモートホストを取得」を「常時」にするとパフォーマンスが落ちるとのことである。

  5. アクセス制御の用途について

    ・上でも書いたが組織内で部外向けと自部署向けのコンテンツを区別する場合に有効である。
    ・自宅サーバにおいてアクセス制御が有効になる状況はまずないのではないかと思う。

    ・掲示板荒らしなどの対策としてアクセス制御することは、相手が固定IPであれば効果があるが、動的に変化する IP使用が大半という状況では全く意味がない。巻き添えを承知で特定のプロバイダからのアクセスを全部禁止とするような乱暴なことはできればしたくないものである。
     その場合でもプロクシサーバ経由でアクセスをされると意味がなく、今度はプロクシを次々拒否IPに登録しないといけないという消耗戦になる恐れもある。アクセス制御以外の有効な手段を採るのが賢明なことは明らかである。

    ・CodeRedやNimdaが現れた頃にアクセス制御すればいいという話が何度も出た。しかしこの種のウイルスに対してはアクセス制御は全く意味がない。そもそもウイルスであるかどうかはリクエストの中身を見る前には分からないし、IPアドレスを調べるにはリクエストを受けなくてはいけはない。IPアドレスでアクセスを禁止したいのなら AN HTTPD 以前の段階でルータにそういう機能があれば実行すればよい。

  6. エラーメッセージの変更

     アクセス制御で拒否された場合、ブラウザには Error 403 が表示される。アクセス制御を行っていることを知られたくないという場合には、エラーメッセージを変えてしまうことで分かりにくくすることができる。

     例えば以下のような内容の error403.cgi を作成し、c:\www\messages の下に置く。オプションの表示/インデックス タブで「エラー403」欄に「c:\www\messages\error403.cgi」と書けば Error 403 をあたかも Error 404 のように見せることができる。ドキュメントルートが c:\www なら「/messages/error403.cgi」としても同じである。
    --- この次の行から -----------------------------------------------------------------------------
    #!/usr/local/bin/perl
    
    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n<TITLE>Error</TITLE>\n</HEAD>\n<BODY>\n<H1>Error 404</H1>\n";
    if($ENV{'HTTP_ACCEPT_LANGUAGE'} EQ 'ja'){
    print "みつかりません - ドキュメントがないか、読み込みができません。\n";
    } else {
    print "Not found - file doesn't exist or is read protected\n";
    }
    print "<HR>\n<ADDRESS><a href=\"http://www.st.rim.or.jp/~nakata/\">$ENV{'SERVER_SOFTWARE'}</a></ADDRESS>\n</BODY>\n</HTML>\n";
    exit;
    --- この上の行まで -----------------------------------------------------------------------------
    
  7. 同時アクセス制限

     同一IPアドレスから同時にいくつものアクセスがあるとそのホストとの通信に帯域を占有され、他のホストとの通信が遅くなる。このような状況を回避するために「同時アクセス制限」を使う。

     同時アクセス制限: 同一IPアドレスからの同時アクセスを制限するときにチェックする。チェックを外した状態では制限は行わないので、ダウンロードソフトなどから複数ファイルへのアクセスや同一ファイルの分割ダウンロード要求があるとそれに応じてしまう。

     同一ファイルへの同時アクセス数を制限する: 同一IPアドレスからの同一ファイルへの分割ダウンロードだけを拒否するときにチェックする(ここはチェックしない方がいいかもしれない)。

     最大数: 同時アクセスをいくつまで認めるかの最大数。「同一ファイルへの同時アクセス数を制限する」にチェックがない場合には、ここで設定した数までの同時アクセスを許す。「同一ファイルへの同時アクセス数を制限する」にチェックがある場合には1ファイルを分割ダウンロードするときの最大数の意味になる。同時に別ファイルのダウンロード要求があるとファイル毎に最大数までのダウンロードができ、合計数を制限することはできない。

     拡張子: 同時アクセス制限を適用するファイルの拡張子。ワイルドカードは使えない。ここに指定した拡張子以外のファイルに対しては同時アクセス制限を行わない。

     ファイルサイズ: 同時アクセス制限を適用するファイルのサイズ。kB単位で、このサイズ以下のファイルに対しては同時アクセス制限を行わない。小さいファイルは対象外にしたいときに設定する。0 にするとサイズにかかわらず制限対象になる。

    最も厳しい帯域制限を設定するには、
     「同時アクセス制限」にチェックする
     「同一ファイルへの同時アクセス数を制限する」はチェックしない
     「最大数」は 1 にする
     「拡張子」にはサーバ内にあるファイルの全ての拡張子をコンマ区切りで書き並べる
     「ファイルサイズ」は 0 kB以上にする
    にすればよい。このとき、IP 当たりダウンロードは 一つのみに制限される。

    同時アクセス制限の内部動作が分かり難ければ このコメント が参考になるであろう。


作成:いと,mailto:gfh05223@nifty.com