apache2でのallow,deny指定について
Linux+Apache2+PHP+MySQLの組み合わせでWebサーバを運用しています。
海外向けのサービスのため、
日本国内からのWebアクセスを遮断することになりました。
日本国内のIPアドレス表はあるので、
httpd.conf内で
<Directory ~>
Order allow,deny
Allow from all
Deny from xx.xx.xx.xx/xx
(以下国内IPアドレスが続く)
</Directory>
としてIPアドレスにより遮断しました。
これ自体は問題なく稼働しています。
ただ、日本国内からも運用上いくつかの拠点で閲覧できる必要があり、それらのIPアドレスに対してallow指定をしたいのですが、どうもうまくいきません。
ようは
order allow,deny,allow
のような感じでできればいいのですが、そういう指定はできないようです。
<Directory>ディレクティブを下で再定義したり、別に.htaccessで定義してallowしてみたりしたのですが、そうするともともとあったdeny指定がクリアされてしまうようです。
もちろん、deny fromするサブネットを細かく分けて記述すればいいのですが、今後IPアドレスの追加や削除が発生しうるため、あまり国内IPアドレス表の部分はいじりたくないのです。
また、deny from allでその後海外のIPアドレスをallowするというのは、IPアドレス表が膨大になりすぎるので、これも避けたいです。
理想的には、httpd.confで国内を遮断した後、別ファイルで許可するIPアドレスを記述できればと思っています。
なお、PHPアプリケーションのほうで遮断するというのはパフォーマンスが劣化するため考えておりません。
現在は、仕方なくサブネット単位で
#Deny from xx.xx.xx.xx/xx
みたいにコメントアウトして運用しています。
「絶対に国内からは見られては困る」というほどでもないので、まあこれでもいいかと思っていますが、
もっとスマートなやり方はないかと思いご質問させていただきました。
なにとぞよろしくお願いいたします。
投稿日時 - 2009-07-09 14:44:13
> allow from all
> deny 個別IP
> という順番にせざるをえません。
これ理解が違っていませんか。上位ディレクトリの設定とは関係なく
指定した設定が有効になりますよ。
> あと、Order deny,allowですとallowのほうが強いわけなので、最後に
> allow from allしたら結局全部allowになっちゃいませんかね?
allow from all したら、そのとおりですが、Order deny,allow の
デホルトは allow なので deny でも allow でも指定しなければ
allow になります。
参考URL:http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
投稿日時 - 2009-07-10 21:34:52
ありがとうございます。
わたしの理解がそもそも間違ってました。
おっしゃる通りの設定でうまくいきました。
投稿日時 - 2009-07-12 01:11:52
このQ&Aは役に立ちましたか?
4人が「このQ&Aが役に立った」と投票しています
回答(2)
やりたいことは Order allow,denyではなくて、
Order deny,allow
ではないですか?
denyで国内からのアクセスをブロック、allowでその一部を許可、
残り全てを許可。
投稿日時 - 2009-07-10 01:49:34
わたしの記述に不足がありました。
もともと/でdeny from allしているため、各公開ディレクトリでは最初にまずallow from allしてあげる必要があります。
ですので
allow from all
deny 個別IP
という順番にせざるをえません。
あと、Order deny,allowですとallowのほうが強いわけなので、最後にallow from allしたら結局全部allowになっちゃいませんかね?
というか試しましたがそうなりました。
投稿日時 - 2009-07-10 08:48:01