我试图限制特定主机(例如 AWS)访问我的网络服务器。我尝试了这些的不同变体,但它不起作用。
# Block AWS
SecRule REQUEST_HEADERS:Host ".*\.amazonaws\.com.*" \
"msg:'AWS blocked',id:10007,log,t:lowercase,drop,phase:1"
我试过了:
SecRule REQUEST_HEADERS:Host ".*\.amazonaws\.com.*"
SecRule REQUEST_HEADERS:Host "@rx ^.*\.amazonaws\.com.*$"
SecRule REQUEST_HEADERS:Host "@contains amazonaws.com"
以上都不起作用,所以我得出的结论是我的标头查询语法有问题。这是我尝试匹配排除的主机字符串的示例:主机:ec2-12-34-56-78.compute-1.amazonaws.com
因此,根据我收集的信息,正如@FarhadSakhaei 指出的那样, REQUEST_HEADERS:Host 指的是请求的主机,而不是远程主机。这很奇怪,因为 REQUEST_HEADERS:User-Agent 确实返回了客户端的用户代理。
相反,可以使用 SecRule REMOTE_HOST 并将 Apache 指令 HostnameLookups 设置为“On”。
例如
如果 HostnameLookups 为“Off”,REMOTE_HOST 将返回请求客户端的 IP 地址。显然,将 HostnameLookups 设置为“On”会导致一些性能下降,因此这是一种权衡。
我用过这样的东西:
效果很好,只需完成坏主机列表....