转载请注明文章出处:https://itlanyan.com/wordpress-prevent-password-brute-force/

之前 “谈谈如何在服务端阻止恶意扫描” 提到过主机防护,主要是防止不法分子进行批量攻击。本站用的WordPress,为了防止别人通过 wp-login.php 入口进行暴力破解,于是修改该文件将请求重定向到CentOS的镜像下载页面。然而因为WordPress默认开通自动更新功能,新版发布后 wp-login.php 的修改就被抹除,又变成登录入口文件。在主题中做修改也有类似的缺点。

今天早晨收到大量邮件,提示有人多次尝试用密码登录博客站点。被邮件烦到了,自己也有点心虚,于是琢磨怎么弄个一劳永逸的办法。然后想到可以在Nginx里做重定向啊!WordPress更新覆盖文件的缺点一下就没有了。

说动手就动手,在Nginxserver配置块中新增配置项:

server {
  ...
  location = /wp-login.php {
    redirect ^ http://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso permanent;
  }
  ...
}

重启Nginx,用curl尝试请求”https://itlanyan.com/wp-login.php“和”https://tlanyan.pp.ua“,提示都重定向到CentOS的镜像下载地址。符合预期,非常棒!

上述配置解决了wp-login.php的困扰,不过还是陆续收到提示暴力破解的邮件。打开Nginx的日志,发现原来暴力破解入口不是wp-login.php,而是xmlrpc.phpxmlrpc.php是对外开放的rpc接口,例如app发表文章、管理站点就会用到。要阻止这个入口被恶意访问,解决办法同样可以是进行重定向:

server {
  ...
  location = /wp-login.php {
    redirect ^ http://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso permanent;
  }
  location = /xmlrpc.php {
    redirect ^ http://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso permanent;
  }
  ...
}

Ping Back功能用的也是xmlrpc.php这个页面,以上配置会导致其他站点的Ping失败。有无Ping对我而言不是那么重要,因此关闭对我来说没有影响。

经过以上配置,既防止他人恶意访问返回冰冷的404页面,也很好的解决了安全问题。世界终于清净,一片祥和。