我正在使用 Apache 2.2 作为我的应用服务器的代理。
RewriteCond %{REQUEST_URI} ^/A [OR]
RewriteCond %{REQUEST_URI} ^/B
RewriteRule (.+) http://appserver$1 [P]
在正常使用中,/A 的合法请求数量比 /B 高出几个数量级
/B 容易受到字典攻击,我想通过严格限制在某个时间窗口内得到服务的 /B 请求的数量来降低风险。
我怎样才能限制对 /B 的请求而不干扰对 /A 的请求?
答案1
看起来合理的答案是
- 抓取并安装mod_security
将 modsecurity_crs_10_config.conf.example 复制到 modsecurity_crs_10_config.conf
- 在该文件中启用暴力破解保护
SecAction“阶段:1,id:'981214',t:none,nolog,pass,\ 设置变量:'tx.brute_force_protected_urls=/B',\ 设置变量:'tx.brute_force_burst_time_slice=60',\ 设置变量:'tx.brute_force_counter_threshold=10',\ 设置变量:'tx.brute_force_block_timeout=300'"
- 更新 httpd.conf
<IfModule 安全2_模块> 包括 conf/modsecurity_crs/*.conf 包括 conf/modsecurity_crs/experimental_rules/modsecurity_crs_11_brute_force.conf </IfModule>
- 最后,打开它
SecRuleEngine 开启
这让你在记录阶段;如果发生两次或两次以上突发,则违规 IP 地址将被发送到角落进行超时,并且来自该 IP 的所有后续请求将被禁止,直到超时到期。
测试时,请记住:(a) 超过 brute_force_counter_threshold 个请求构成一次突发,2 次突发导致一次阻塞,并且该阻塞在触发第二次突发的请求之后开始。(如果 brute_force_counter_threshold = 3,则在阻塞开始之前,您将看到 8 次未阻塞的尝试)。
brute_force_protected_urls 允许你指定多个漏洞点
'tx.brute_force_protected_urls=/B /C'
但是如果您想要多个策略,您将需要 modsecurity_crs_11_brute_Force.conf 的第二份副本,其中包含搜索和替换的变量名称。