みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

QNo.5111426

困ってます

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

> 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

ANo.2

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

やりたいことは 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

あなたにオススメの質問