web-dev-qa-db-ja.com

mod_rewriteを使用して特定のIPアドレスのみにサイトへのアクセスを許可しますか?

私たちのサイトには、いくつかのIPアドレスでのみアクセスできるようにしたいディレクトリがあります。したがって、この.htaccessファイルを使用して機能させることができます。

RewriteEngine on
RewriteCond %(REMOTE_ADDR) !^123\.123\.123\.123
RewriteCond %(REMOTE_ADDR) !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128

RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]

RewriteRule ^.*$ http://www.example.com [R=301,L]

リクエストがIPアドレスの1つからのものではない場合(例のために上記のコードで明らかに変更されている)、またはリファラーが特定のサイトからのものではない場合は、別の場所にリダイレクトします。

奇妙な理由で、126.126.126.126の位置にあるIPに対しては機能しますが、他のIPに対しては機能しません。 IPによってなぜ違うのか、本当にわかりません。何がうまくいかない可能性がありますか?

リファラーがスプーフィングされる可能性があるため、これがセキュリティの問題を引き起こすことは承知していますが、まもなくより良い解決策を考え出す予定です。これは一時的な対策にすぎません。

7
BT643

これに対する答えを投稿するのを忘れました。最終的にはタイプミスでした。DOH!

お気づきのように、%{REMOTE_ADDR}行の一部には中括弧があり、一部には通常の括弧があります。それらはすべて巻き毛のものを必要としていました。

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124
RewriteCond %{REMOTE_ADDR} !^125\.125\.125\.125
RewriteCond %{REMOTE_ADDR} !^126\.126\.126\.126
RewriteCond %{REMOTE_ADDR} !^127\.127\.127\.127
RewriteCond %{REMOTE_ADDR} !^128\.128\.128\.128

RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^http://example\.com/ [NC]

RewriteRule ^.*$ http://www.example.com [R=301,L]
15
BT643

次のように、各RewriteCondの後に[OR]修飾子を追加する必要があると思います。

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123 [OR]
RewriteCond %{REMOTE_ADDR} !^124\.124\.124\.124 [OR]
...
0
John F