web-dev-qa-db-ja.com

Apache 2:SetEnvIf "IP範囲"

私のApache構成で、訪問者が特定のIP範囲から来ていることがわかった場合は、環境変数を設定します。現在私はこのようにしています:

SetEnvIfNoCase Remote_Addr "^194\.8\.7[45]\." banned=spammer-ip
SetEnvIfNoCase Remote_Addr "^212\.156\.170\." banned=spammer-ip

私が好むのは次のようなものです:

SetEnvIfIpRange 194.8.74.0/23 banned=spammer-ip
SetEnvIfIpRange 212.156.170.0/24 banned=spammer-ip

... IPアドレスを文字列に変換してから正規表現を実行することは、リソースを無駄にすることになると思います。

私はできる

Deny From 194.8.74.0/23

...しかし、403エラーページでチェックできる変数が得られません。アクセスが拒否された理由を見つけるためです。

私が見逃す可能性のある提案はありますか? 「IPアドレス範囲」に基づいて環境変数を設定できるApache2 MODはありますか?

10
BlaM

入手したもの(SetEnvIfNoCase Remote_Addr "^ a.b.c。" env_key = env_value)は、簡単に実行できる最高のものです。この構成スタイルは、負荷の高いマシンのクラスターに実装されており、目立ったパフォーマンスの低下はありません。 CIDRの範囲がより適切である場合、迷惑な正規表現の使用に同意します。 CIDR範囲のリストから構成を自動的に生成する小さなプログラムを作成できます。

Perlに精通している場合は、modperlハンドラーを作成できます。これにより、選択した方法で要求を許可または拒否できます。 modperlを使用すると、HTTPリクエスト全体のさまざまなポイントでコードを実行できます- mod_Perl 2.0 HTTP Request Cycle Phases 。 PerlAuthzHandlerは、使用する適切なハンドラーです。

ロッキー

4
Lockie

<If> を許可するApache 2.4でCIDRフォーマットを使用できます。

<If "%{REMOTE_ADDR} -ipmatch 194.8.74.0/23">
    SetEnv banned = spammer-ip
</If>
8
Greg

setEnvを介して設定された変数は、一部の操作では表示されないことに注意してください(マトリックスを参照)。

http://www.onlinesmartketer.com/2010/05/27/Apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/

あなたの解決策は

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918

参照 https://httpd.Apache.org/docs/trunk/mod/mod_setenvif.html#SetEnvIfExpr

これは実際にはRegExpからIP Rangesへの解決策ではありません、しかし、IP範囲を一致する正規表現に変換するために、GoogleがホストしているNiceスクリプトを見つけました。一部の人にも役立つかもしれません...

IPアドレスの範囲からトラフィックを除外するにはどうすればよいですか?

[更新]

GoogleがIPアドレスツールを削除した(または少なくともサイトにあるリンクが壊れた)ようですが、同様のツールがここにあります http://www.analyticsmarket.com/freetools/ ipregex

0
BlaM