Apache 2:SetEnvIf“IP Range”

Modified on: Thu, 27 Jun 2019 03:40:02 +0800

在我的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?

作者:,BlaM

最佳答案

你所拥有的(SetEnvIfNoCase Remote_Addr“^ a.b.c。”env_key = env_value)是你能做的最好的。我已经看到这种配置风格在一个负载很重的机器集群上实现,没有任何明显的性能下降。我同意使用正则表达式,当CIDR范围更合适时很烦人。您可以编写一个小程序,从CIDR范围列表中自动生成配置。

如果你熟悉Perl,你可以创建一个modperl处理程序,它会以你选择的方式允许/拒绝请求。 modperl允许您的代码在整个HTTP请求中的不同位置运行 - mod_perl 2.0 HTTP请求周期阶段。 PerlAuthzHandler将是适当的处理程序。

Lockie

作者:Lockie

相关问答

添加新评论