Joomla! 管理员的 mod_security 规则集

Joomla! 管理员的 mod_security 规则集

我运行了多个托管服务器,最近我经历了许多针对基于 joomla 的网站的暴力攻击。攻击者似乎试图对administrator/index.php页面进行暴力攻击。

当他们尝试使用以下规则集强行破解 Wordpress 登录信息时,我通常会锁定 IP:

SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:5000134
<Locationmatch "/wp-login.php">
SecRule ip:bf_block "@gt 0" "deny,status:401,log,id:5000135,msg:'ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes.'"
SecRule RESPONSE_STATUS "^302" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000136"
SecRule RESPONSE_STATUS "^200" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000137"
SecRule ip:bf_counter "@gt 10" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=300,setvar:ip.bf_counter=0"
</Locationmatch>

但是我找不到 Joomla! 的类似规则,因为无论密码有效还是无效,响应状态都是“303 查看其他”。

有什么帮助吗?提前致谢!

答案1

以下是我的答案。

通过检查返回标头,我注意到 Joomla! 在登录正确时后端会返回一些 HTTP 标头,而在登录无效时则不会返回它们。

例如P3P登录成功后返回标头,因此我只需查找其长度> 0

SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:5000144
<Locationmatch "/administrator/index.php">
    SecRule ip:bf_block "@gt 0" "deny,status:401,log,id:5000145,msg:'ip address blocked for 5 minutes, more than 10 login attempts in 3 minutes.'"
    SecRule RESPONSE_HEADERS:P3P "streq 0" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000146"
    SecRule RESPONSE_HEADERS:P3P "!streq 0" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000147"
    SecRule ip:bf_counter "@gt 10" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=300,setvar:ip.bf_counter=0"
</locationmatch>

答案2

可接受答案的问题在于它没有考虑登录页面的刷新时间。因此,当用户刷新登录页面时,它将:1) 重置计数器(这很糟糕)或 2) 将刷新视为登录失败(这同样很糟糕)。

我们刚刚设计了一条基于“com_login”帖子值的规则来处理 Joomla 的暴力攻击。如果该值在帖子值中,则表示登录失败,如果不在,则表示登录成功。该规则可以在这里

相关内容