打击暴力破解

几日前分析网站日志,发现许多试图暴力破解后台密码的异常请求

一次一个IP,行为很有规律——

  1. POST /xmlrpc.php scheme:http 301
  2. GET /xmlrpc.php scheme:https 403
  3. POST /wp-login.php scheme:http 301
  4. 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>