#author("2019-08-06T12:05:45+00:00","default:wikiwriter","wikiwriter")
#author("2020-07-09T05:12:06+00:00","default:wikiwriter","wikiwriter")
&tag(Apache/アクセス制限);
*目次 [#u9a4ec65]
#contents
*関連ページ [#l4d76817]
*参考情報 [#re13e520]

* Apache 2.2のアクセス制限 [#l19d72e7]
**deny,allowに関する解説 [#u2460e21]
***参考情報 [#a0a5cb7e]
-[[Apacheのアクセス制御をちゃんと理解する。 - こせきの技術日記:http://koseki.hatenablog.com/entry/20100913/ApacheAccessControl]]
-[[Apache の基本 - 色々なアクセス制御 - | バシャログ。:http://bashalog.c-brains.jp/09/09/16-153911.php]]

こせきの技術日記の方が詳しいが、実用的な事だけ知りたい場合バシャログのほうが良いか。

***特定のIPアドレスだけ許可する [#l2bef535]
-Order Deny, Allowで指定。この場合Allowがデフォルトなので最初に全て禁止しておく。
 Order Deny,Allow
 Deny from All
 Allow from 172.16.0.100
-Order Allow, Denyで指定。全てDenyがデフォルトなのでAllowだけで良い。
 Order Allow,Deny
 Allow from 172.16.0.100
-アドレスによる制限とユーザー認証をOR条件で組み合わせる場合(Satisfy Any)
#pre{{
AuthType Basic
AuthName "Enter ID/PW"
AuthUserFile "/var/www/example.com/.htpasswd"
Require user "user1"
Order Allow,Deny
Allow from 172.16.0.54
Satisfy Any
}}
-アドレスによる制限とユーザー認証をAnd条件で組み合わせる場合(Satisfy All)
#pre{{
AuthType Basic
AuthName "Enter ID/PW"
AuthUserFile "/var/www/example.com/.htpasswd"
Require user "user1"
Order Allow,Deny
Allow from 172.16.0.54
Satisfy All
}}

**deny,allowでAND条件を指定する [#u5449c49]
***参考情報 [#a240fdc5]
-[[ApacheのAllow, Denyディレクティブでand条件したい - (ひ)メモ:http://d.hatena.ne.jp/hirose31/20081113/1226552753]]
-[[Apacheでand条件でアクセス制限を試してみた · mechamogera/MyTips Wiki:https://github.com/mechamogera/MyTips/wiki/Apache%E3%81%A7and%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E9%99%90%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F]]
-[[Apache2.4のSetEnvIfでand条件 - あるシステム管理者の日常:http://d.hatena.ne.jp/rougeref/20150717]]
-[[.htaccessで、IPアドレスとユーザエージェントの2つを併用して… - 人力検索はてな:http://q.hatena.ne.jp/1285313252]]
***Apache 2.2でAND条件を使うための基本アイデア [#ufe1c045]
-[[Apacheでand条件でアクセス制限を試してみた · mechamogera/MyTips Wiki:https://github.com/mechamogera/MyTips/wiki/Apache%E3%81%A7and%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E9%99%90%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F]]の例。
#pre{{
SetEnvIF Request_URI "^/test.html" ok_path
SetEnvIF Accept "text/html" ok
SetEnvIF ok_path "^$" !ok

<VirtualHost *:80>
  DocumentRoot /var/www/html
  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from env=ok
  </Directory>
</VirtualHost>
}}

解説
-StEnvIFは変数が指定された正規表現にマッチしたとき最後の変数を設定するという指定。[[mod_setenvif - Apache HTTP サーバ バージョン 2.2:https://httpd.apache.org/docs/2.2/ja/mod/mod_setenvif.html]]。以下のように処理が進む。
--「SetEnvIF Request_URI "^/test.html" ok_path」で、 Request_URIがtest.htmlにマッチするときok_pathが1に設定される。
--「SetEnvIF Accept "text/html" ok」で、Acceptヘッダーが"text/html"にマッチするとき、okが1に設定される。
--「SetEnvIF ok_path "^$" !ok」で、ok_pathが空白の場合は("^$"にマッチする場合は)、okをクリアする。
-最終的に、okが設定されているのは2番目の条件で「Acceptが"text/html"にマッチした場合」かつ3番目でクリアされなかった場合=1番目で「Request_URI "^/test.html" がマッチした場合」となる。
-よって「 Allow from env=ok」によって、アクセス許可のANDが達成されている。

*Tips [#l39739ab]

**iPhone/iPadだけを許可する [#t43bb3f3]
-[[スマートフォンのみを許可するhtaccessを作りたい - IPではな... - Yahoo!知恵袋:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1161615241]]
#pre{{
SetEnvIf User-Agent "Android" dame1
SetEnvIf User-Agent "iPhone" dame2
SetEnvIf User-Agent "iPod" dame3
SetEnvIf User-Agent "iPad" dame4
SetEnvIf User-Agent "BlackBerry" dame5

order deny,allow
deny from all
allow from env=dame1
allow from env=dame2
allow from env=dame3
allow from env=dame4
allow from env=dame5
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS