几日前分析网站日志,发现许多试图暴力破解后台密码的异常请求
一次一个IP,行为很有规律——
- POST /xmlrpc.php scheme:http 301
- GET /xmlrpc.php scheme:https 403
- POST /wp-login.php scheme:http 301
- GET /wp-login.php scheme:https 200
而且这些异常请求还有一个共同特点——没有HTTP_REFERER
,并且User-Agent
也是完全相同,都是Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
对于xmlrpc.php
——WordPress的Public API的攻击,我不太需要担心——除非攻击频率高到影响服务器性能。起初我通过禁止访问(403)该路径或限制访问该路径时的http body部分长度来对抗『一次多个密码组合』的暴力破解,但这使得JetPack和WordPress手机客户端不能正常工作;其后我开始使用WAF(ModSecurity2)并配合有关规则来对付暴力破解;此外,JetPack也提供对xmlrpc Brute Force的防范,因此攻击者会收到HTTP 403.
经过搜索发现,FireFox根本不存在40.1版本,所以直接把FireFox/40.1
设为User-Agent的屏蔽关键字即可
至于解决,在Apache的VirtualHost配置文件中添加如下字段——正则表达式^.*firefox\/40\.1.*$
在不区分大小写时可匹配FireFox/40.1
<VirtualHost *:443>
......
<Directory /var/www/hardrain980.com>
Allowoverride All
SetEnvIfNoCase User-Agent "^.*firefox\/40\.1.*$" BanUA
Order allow,deny
Allow from all
Deny from env=BanUA
</Directory>
</VirtualHost>