- ベストアンサー
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 みたいにコメントアウトして運用しています。 「絶対に国内からは見られては困る」というほどでもないので、まあこれでもいいかと思っていますが、 もっとスマートなやり方はないかと思いご質問させていただきました。 なにとぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> allow from all > deny 個別IP > という順番にせざるをえません。 これ理解が違っていませんか。上位ディレクトリの設定とは関係なく 指定した設定が有効になりますよ。 > あと、Order deny,allowですとallowのほうが強いわけなので、最後に > allow from allしたら結局全部allowになっちゃいませんかね? allow from all したら、そのとおりですが、Order deny,allow の デホルトは allow なので deny でも allow でも指定しなければ allow になります。
その他の回答 (1)
- entree
- ベストアンサー率55% (405/735)
やりたいことは Order allow,denyではなくて、 Order deny,allow ではないですか? denyで国内からのアクセスをブロック、allowでその一部を許可、 残り全てを許可。
補足
わたしの記述に不足がありました。 もともと/でdeny from allしているため、各公開ディレクトリでは最初にまずallow from allしてあげる必要があります。 ですので allow from all deny 個別IP という順番にせざるをえません。 あと、Order deny,allowですとallowのほうが強いわけなので、最後にallow from allしたら結局全部allowになっちゃいませんかね? というか試しましたがそうなりました。
お礼
ありがとうございます。 わたしの理解がそもそも間違ってました。 おっしゃる通りの設定でうまくいきました。