我们可以在 apache 中使用 cidr 来拒绝 env 吗

我们可以在 apache 中使用 cidr 来拒绝 env 吗

我的要求是:

  1. 在 apache 级别阻止可疑的 ip 地址,我有一个包含数百万个带有 cidr 的 ip 地址的列表。
  2. 如果被阻止的 IP 访问了网站,那么他们应该会收到一些消息,表明他们被阻止了(我可以使用 ErrorDocument)
  3. 记录所有被阻止的用户(403 错误文档将重定向到另一个页面并检查该页面的点击次数)

Apache 服务器位于 amazon EC2 上的 elb 后面,所以我必须检查 X-Forwarded-For,在下面的配置中“SetEnvIf CLIENTIP“192.168.1.0/24”block”不起作用,看起来它需要 ip 地址而不是 cidr,有什么方法可以阻止我拥有的数百万个 cidr 范围的命中?

SetEnvIf REMOTE_ADDR "(.+)" CLIENTIP=$1

SetEnvIf X-Forwarded-For "^([0-9.]+)" CLIENTIP=$1

SetEnvIf CLIENTIP "192.168.1.0/24" block   # this doesnt work

SetEnvIf CLIENTIP "192.168.1.5" block   # this works

Order allow,deny

Allow from all

Deny from env=block

答案1

这不起作用,因为Deny from env只要指定的变量存在就会拒绝,无论其内容如何,​​而 SetEnvIf 只会对您提供的文本进行完全匹配。

由于您位于 ELB 后面,因此您需要使用类似方法mod_rpaf来提取实际 IP 地址,以便 Apache 可以直接使用它。然后,您只需在Deny指令中使用 CIDR 范围即可。

相关内容