Web サーバーを構築する際に、クライアントのアクセス制御を行うことで不必要なアクセスをなくす。
Apache の設定ファイルは、httpd.conf、srm.conf、 access.conf と三種類ありますが、Apache 1.3.9 ぐらいからほとんど httpd.conf のみで行います。Apache 2.0 では、srm.conf, access.conf は無くなります。そこで、設定はすべて httpd.conf で行なうものと思って作業してください。また、.htaccess を利用しても設定が行えます。アクセス制御するには、mod_access モジュールが Apache に組み込まれている必要があります(明示的にはずさない限りデフォルトで組み込まれます)。
AllowOverride により <Directory>指示子で指定したディレクトリに対して利用できる機能を設定
Allすべての有効な指示子を許可 Noneすべての指示子を無効 AuthConfig認証ディレクティブの使用を許可 (AuthUserFile, requireなど) FileInfoドキュメントタイプをコントロールするディレクティブの使用を許可 (AddType, DefaultTypeなど) Indexesディレクトリインデクスをコントロールするディレクティブの使用を許可 (DirectoryIndex, AddIconなど) Limitホストへのアクセスをコントロールするディレクティブの使用を許可 (allow, deny, order) Options特定のディレクトリの設定をコントロールするディレクティブの使用を許可 (Options, XBitHack)
さらに Options で制御(無効化されたオプションを有効化させる場合は前に「+」をつける。逆に有効なものを無効にするには「-」をつける )
AllMultiViewsを除いた全てのものが利用可能 ExecCGICGIの実行を許可 FollowSymLinksディレクトリにシンボリックリンクの利用を許可 Includesサーバサイドインクルード(SSI)機能を許可 IncludesNOEXEC#includeと#exec以外のSSIを許可 IndexesDirectoryIndex(例:index.html)がない場合、そのディレクトリ以下のファイルを表示することを許可 SymLinksIfOwnerMatch実体とリンクの所有者が同じ場合、シンボリックリンクの利用を許可 MultiViewsドキュメントのロケールに基づいたコンテンツを配信
アクセス制御は、<Directory>, <Files>, <Location> などといったディレクティブに内で allow, deny を使用して制御します。まず、order により許可/拒否の順番を決定し、allow, deny により許可/拒否するクライアントを決定します。
Order deny,allowdeny, allow の順番で評価されます。allow で指定したもの以外は拒否するような設定をしたいときにこのオーダーを利用します。 Order deny,allow Deny from all Allow from .jpこの場合、.jp ドメインのクライアントからのみアクセスを許可します。Order allow,denyallow, deny の順番で評価されます。deny で指定したもの以外は許可するような設定をしたいときにこのオーダーを利用します。 Order allow,deny Allow from all Deny from 192.168.0.0/24この場合、192.168.0.0/24の IP Address となるクライアントからのアクセスを禁止します。Order Mutual-failureallow に存在し、deny に存在しないクライアントがアクセスを許可されます。このオーダーの使用は推奨されていないので詳細は記述しません。
allow では、アクセスを許可するクライアントを指定します。 deny では、アクセスを拒否するクライアントを指定します。
allow/deny from all すべてのクライアントにマッチします。 allow/deny from domain.name 指定したドメインを持つクライアントにマッチします。 allow/deny from 192.168.0.1 指定した IP Address を持つクライアントにマッチします。 192.168.0.1 ------ IP Address 192.168.0 -------- 192.168.0 ネットワーク内 192.168.0.0/24 --- 192.168.0.0/24 ネットワーク内 192.168.0.0/255.255.255.0allow/deny from env=env-variable 環境変数 env-variable が設定されているとマッチします。
通常どのクライアントからもアクセス可能だがアクセスして欲しくないクライアントを拒否したい場合、Order allow,deny というオーダーを利用します。
Order allow,deny
Allow from all
Deny from foobar.co.jp # ドメイン foobar.co.jp を持つクライアントを拒否
Deny from 192.168.0.0/24 # ネットワーク 192.168.0.0/24 からのクライアントを拒否
また、これだけでなく、どのクライアントからアクセスして欲しくないファイルがある場合にも利用できます。
<Files ~ "^\.ht">
Order allow,deny
Deny from all # .ht から始まるファイル名を持つファイルのアクセスを拒否
</Files>
指定したクライアントのみアクセス可能にする場合、Order deny,allow というオーダーを利用します。
Order deny,allow
Deny from all
Allow from foobar.co.jp # ドメイン foobar.co.jp を持つクライアントを許可
Allow from 192.168.0.0/24 # ネットワーク 192.168.0.0/24 からのクライアントを許可
携帯電話向けのサイトを構築したので PC やワークステーションからアクセスして欲しくない場合、以下のように携帯電話が使用する IP Address のみを許可するように設定します。
Order deny,allow
Deny from all
# i-mode
Allow from 210.153.84.0/24
Allow from 210.136.161.0/24
# ボーダフォン
Allow from 210.134.83.32/27
Allow from 210.146.7.192/26
Allow from 210.146.60.128/25
Allow from 210.151.9.160/27
Allow from 210.169.193.192/26
Allow from 210.228.189.0/24
Allow from 211.8.49.160/27
Allow from 211.8.159.128/25
Allow from 211.127.183.0/24
# EzWeb
Allow from 210.169.40.0/24
Allow from 210.196.3.192/26
Allow from 210.196.5.192/26
Allow from 210.230.128.0/24
Allow from 210.230.141.192/26
Allow from 210.234.105.32/29
Allow from 210.234.108.64/26
Allow from 210.251.1.192/26
Allow from 210.251.2.0/27
Allow from 211.5.2.128/25
Allow from 211.5.7.0/24
Allow from 218.222.1.0/24
Allow from 61.117.0.0/24
Allow from 61.117.1.0/24
Allow from 61.117.2.0/26
Allow from 61.202.3.0/24
Allow from 219.108.158.0/26
Allow from 219.125.148.0/24
Allow from 222.7.56.0/24
クラックプログラムなどで不正アクセスをされるのを防ぐために、きちんとしたブラウザからのみアクセスを許可するといった設定をします。以下の設定では、Internet Explorer, Netscape, Opera, Safari など主要なブラウザからはアクセスすることが可能になります。おまけで、google からも許可しよう。(しかし、ブラウザーの情報は簡単に偽装できてしまいます)
SetEnvIf User-Agent "Mozilla" AllowedBrowser
SetEnvIf User-Agent "GoogleBot" AllowedBrowser
<Files *>
Order deny,allow
Deny from all
Allow from env=AllowedBrowser
</Files>
SetEnvIf を利用することで、クライアントからのいろいろな情報をもとにアクセス制御を行うことが出来ます。この機能を利用するには、 mod_setenvif モジュールが Apache に組み込まれている必要があります。