Rewriteと.htaccessでのアクセス制限
・グループウエアなどを外部から参照させたいけど、出来るだけ情報を機密にしたい。
・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は閲覧出来ない。







ディスカッション
コメント一覧
まだ、コメントがありません