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は閲覧出来ない。
ディスカッション
コメント一覧
まだ、コメントがありません