Apache 2:SetEnvIf「IP範囲」


10

私の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はありますか?

回答:


4

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

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

ロッキー


8

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を参照してください


これは受け入れられる答えになるはずです!最も良い。これは.htaccessでも動作します
Jeroen Vermeulen-MageHost


0

これは、実際にはRegExpからIP範囲に移行するためのソリューションではありませんが、IP範囲を一致する正規表現に変換するためにGoogleがホストしている素晴らしいスクリプトを見つけました。一部のユーザーにも役立ちます...

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

[更新]

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.