我的要求是:
- 在 apache 级别阻止可疑的 IP 地址,我有一个包含数百万或带有 cidr 的 IP 地址的列表。
- 如果被阻止的 ip 访问该站点,那么他们应该会收到一些消息说他们被阻止(我可以使用 ErrorDocument)
- 记录所有被阻止的人(403 错误文档将重定向到另一个页面并检查对该页面的点击)
Apache 服务器在亚马逊 EC2 上的 elb 后面,所以我必须检查 X-Forwarded-For,在下面的配置中“SetEnvIf CLIENTIP”192.168.1.0/24“块”不起作用,看起来它需要 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
这不起作用,因为
Deny from env
只要指定的变量存在,无论其内容如何,都会拒绝,并且 SetEnvIf 只会对您提供的文本进行完全匹配。由于您在 ELB 后面,因此您需要使用诸如
mod_rpaf
提取实际 IP 地址之类的方法,以便 Apache 可以直接使用它。然后你可以在Deny
指令中使用 CIDR 范围。