使用fail2ban保护wordpress
Wordpress是个很好用的BLOG系统(或者说是一个CMS系统),功能强大,插件和主题丰富。但是用过的人也都知道,黑产的人也最爱攻击它。
我是很早就启用了Limit Login Attempts插件(原来的名字好像有点差别),所以一直还好,但是攻击也从来没停过。
因为之前用的web日志处理是Webalizer,比较简单,也不常去看。后来因为版本冲突的原因,不能用很久,就更加没关注日志了。去年上了一套ELK来统计日志,就看的多了一些,每天最多的访问量就是那些攻击wp的日志,烦得很,决定着手处理一下。
fail2ban是个安全利器,不过原来只用了自带的ssh和nginx-botsearch,还没自定义过,这次准备拿这个试试。
看了一下文档,也不复杂,主要就是需要自定义一个filter和一个jail,但终归还是懒得自己写,还是搜个现成的吧,于是找到这个:《Using Fail2ban on wordpress wp-login.php and xmlrpc.php》。
首先新建一个filter:/etc/fail2ban/filter.d/wordpress.conf
,这个跟原文是一样的:
[Definition]
failregex = ^<HOST> .* "POST .*wp-login.php
^<HOST> .* "POST .*xmlrpc.php
ignoreregex =
再建一个jail:/etc/fail2ban/jail.d/wordpress.conf
,这个我根据自己的情况稍微改了一点:
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
/xxxx/nginx/*access.log
maxretry = 5
findtime = 1800
除了log文件的路径不同以外,主要是去掉了那个action,直接按默认封IP的方式操作,原文这样封端口真是太客气了。而且我的限制条件也定得更严厉一些。
重启fail2ban即可。
日常的管理可以使用fail2ban-client
命令,如:
fail2ban-client status wordpress
需要补充一点的是,fail2ban会自己加一些iptables项目,所以如果你用了iptables-restore
重设iptables配置之后,必须重启一下fail2ban服务,否则jail功能就失效了。
2020-11-26更新
在一台Ubuntu Server 20.04上安装fail2ban时碰到不能启动的问题,报告找不到sshd的日志文件,一看/var/log
下面果然没有auth.log
。
最后找到的解决方案是修改fail2ban的后端,改为使用systemd。方法是新建一个配置文件:/etc/fail2ban/paths-overrides.local
,内容为:
[DEFAULT]
default_backend = systemd
重启fail2ban即可。
推送到[go4pro.org]