• ベストアンサー

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 みたいにコメントアウトして運用しています。 「絶対に国内からは見られては困る」というほどでもないので、まあこれでもいいかと思っていますが、 もっとスマートなやり方はないかと思いご質問させていただきました。 なにとぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

> 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
gasyos
質問者

お礼

ありがとうございます。 わたしの理解がそもそも間違ってました。 おっしゃる通りの設定でうまくいきました。

その他の回答 (1)

  • entree
  • ベストアンサー率55% (405/735)
回答No.1

やりたいことは Order allow,denyではなくて、 Order deny,allow ではないですか? denyで国内からのアクセスをブロック、allowでその一部を許可、 残り全てを許可。

gasyos
質問者

補足

わたしの記述に不足がありました。 もともと/でdeny from allしているため、各公開ディレクトリでは最初にまずallow from allしてあげる必要があります。 ですので allow from all deny 個別IP という順番にせざるをえません。 あと、Order deny,allowですとallowのほうが強いわけなので、最後にallow from allしたら結局全部allowになっちゃいませんかね? というか試しましたがそうなりました。

関連するQ&A