一个用户以某种方式避开了 apache 2.2/2.4 中的 IP 阻止,我不知道是怎么回事。我所在的公司在不同的数据中心托管了数百个站点;这个用户正在攻击我们托管的几个站点。
remote_addr
根据数据中心的不同,用户在或字段中输入其 IP X-Forwarded-For
。我们维护两个“不良行为者”列表,这些列表基于 remote_addr 或 X-Forwarded_For 字段中的 IP 地址,位于一个文件中,该文件包含在 中apache.conf
。这些行看起来像
SetEnvIf X-Forwarded-For 41\.216\.xxx\.xxx BlockedBot
或SetEnvIf Remote_Addr 41\.216\.xxx\.xxx BlockedBot
。然后我们在 apache.conf 的底部附近有以下内容:
<Location />
<IfVersion < 2.4>
AuthType none
Require valid-user
Satisfy any
Order Deny,Allow
Deny from env=BlockedBot
Deny from env=EmptyHost
</IfVersion>
<IfVersion >= 2.4>
<RequireAll>
Require all granted
Require not env BlockedBot
Require not env EmptyHost
</RequireAll>
</IfVersion>
</Location>
我的问题是,在将这个恶意行为者的 IP 放入两个文件中并确保它们都包含在内后,他的请求仍然能够顺利通过。为了再次检查,我在 X-Forwarded-For 字段中使用了恶意行为者的 IP 的 curl,它正确地阻止了我的请求:
curl --header "X-Forwarded-For: 41.216.xxx.xxx" www.testexample.com/images/fpo/check-14aca5cd1a.png
恶意攻击者在 XFF 字段中发出完全相同的请求,并使用其 IP,成功通过了 200 状态代码,没有任何问题。这怎么可能呢?