#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 }}