Rewriteと.htaccessでのアクセス制限

2013年8月2日

・グループウエアなどを外部から参照させたいけど、出来るだけ情報を機密にしたい。
・SSL(https)などはもちろん行うが、コンテンツ自体もさらしたくない。
というような要望はあるかもしれません。

そこで以下の様なアクセス制限を実装します。
1.許可ネットワークは普通に閲覧可能にする。
2.外部(不許可)ネットワークからは、モバイルのみ閲覧可能にする。
3.外部(不許可)ネットワークからのPCでの閲覧は不可能とする。

図で表すとこんな感じ。

実現するためにはRewriteと.htaccessでアクセス制限を行う(両方とも必要)

httpd.confにてRewrite設定を行う

Rewrite設定にてモバイルのユーザーエージェントと許可ネットワークのIPアドレスを許可。
それ以外はアクセスを禁止させる(“403 Forbidden"のレスポンスを返す)

<Directory "/var/www/***">
        Options -Indexes
        AllowOverride   All
        Order           allow,deny
        Allow from       all
        RewriteEngine On
        RewriteCond %{HTTP_USER_AGENT} !DoCoMo.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !J-PHONE.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !vodafone.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !softbank.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !KDDI.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !UP\.Browser.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !.*WILLCOM;.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !MOT.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !ASTEL.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !DDIPOCKET.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !Huawei.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !iPhone;.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !iPad;.*$ [NC]
        RewriteCond %{HTTP_USER_AGENT} !Android.*$ [NC]
        RewriteCond %{REMOTE_ADDR}     !^192\.168\.0\.
        RewriteCond %{REMOTE_ADDR}     !^192\.168\.10\.10$
        RewriteRule ^.*$ - [F]
</Directory>

.htaccessにてアクセス制限を設定する

.htaccessにて許可されてないネットワークからのアクセスはID/PWの認証を行う。

satisfy any
AuthUserFile /var/www/***/.htpasswd
AuthName ByPassword
AuthType Basic
Order           deny,allow
Deny from       all
allow from 192.168.0.
allow from 192.168.10.10
require valid-user

アクセス制限の動作

アクセス制限の動作は、httpd.confに書かれたRewrite設定が先に反応すると思ったが、.htaccessのID/PW認証が先に表示されるので、.htaccess ⇒ httpd.conf(Rewrite)という流れになっていると思われる。
※実際は不明。。。

.htaccessのアクセス制限

この段階で、許可ネットワークの場合は、ID/PW認証は表示されない。
外部(不許可)ネットワークの場合は、ID/PW認証が表示される。

Rewriteのアクセス制限

この段階で、Rewiteで許可されたユーザーエージェント(モバイル)とアクセス元IPの場合は、閲覧可能となる。
それ以外は"403 Forbidden"のレスポンスを返す。

例え.htaccessでID/PW認証をクリアされても、ここで外部(不許可)ネットワークを利用中のPCは閲覧出来ない。