什么是Fail2ban
Fail2ban是一个工具,你可以用它来减少攻击对你的服务器的影响。通常情况下,您将其配置为监控日志文件中的可疑活动。 一旦该活动超过一个阈值,你可以让它采取某种行动,如在防火墙中阻止源IP地址。 这是一个早期阻止攻击的好方法,但并不能完全防止它们。
为什么用它来保护WordPress
由于WordPress非常流行,WordPress经常成为自动攻击的目标。 我们经常看到针对xmlrpc.php或wp-login.php的暴力攻击,这些攻击依赖于大量的请求,希望最终能有一个成功。 使用强大的密码,特别是有管理权限的账户,对减少攻击的风险非常重要。 Fail2ban可以用来减缓攻击者的速度。 这有两个原因:它使他们不太可能成功;它减少了处理这些请求给服务器带来的负载。
其他选择
- 使用外部Web应用防火墙(WAF),如Sucuri或Cloudflare。
- 使用网站服务器配置选项来限制请求,如Nginx的limit_req。
- WordPress安全插件,如Wordfence。
尽可能在上游阻止攻击总是有利于节省资源,所以我们通常倾向于使用网络应用程序防火墙或网络服务器配置,而不是使用fail2ban或WordPress插件,但每个网站、服务器和客户都是不同的,所以这将取决于所使用和需要的确切配置。
安装和配置fail2ban(适用于Ubuntu)
sudo apt-get install fail2ban
Fail2ban的工作原理是有一个引用日志文件的监狱文件,一个过滤器和一个动作。 默认情况下,fail2ban会保护sshd。 如果你以其他方式限制SSH访问,那么你可能想把它关掉。 你可以通过在/etc/fail2ban/jail.local中创建以下内容来做到这一点
[sshd]
enabled = false
Fail2ban并没有为WordPress提供一个过滤器。 我想感谢这两篇文章提供了一个好的起点。 我们经常看到对’//xmlrpc.php’(注意双斜杠)的请求,所以对下面的内容进行了调整,以标记它们。 由于这是在检测任何对wp-login/xmlrpc的请求,当合法的管理员用户登录时,它将会被标记出来。 我们将在监狱的配置中考虑到这一点。
你可以在/etc/fail2ban/filter.d/wordpress.conf中创建这个过滤器。
[Definition]
failregex = ^<HOST> .* "(GET|POST) /+wp-login.php HTTP.* 200
^<HOST> .* "(GET|POST) /+xmlrpc.php HTTP.* 200
jail文件有大部分的配置选项。
- logpath,在这里是指Apache访问日志的路径
- action,如果你使用的是不同的防火墙,或者想用电子邮件代替,可以在/etc/fail2ban/action.d/中查看可用的选项,调整这个。
- maxretry,在findtime秒内禁止的请求的数量。
- bantime,禁止的秒数,在这个动作中,它们在iptables中被阻止的时间。
- 如前所述,该过滤器将同时捕获恶意和合法用户。 我们将maxrety配置得相当高,bantime配置得相对较低,以尽量减少合法用户被封的概率和影响。 虽然这允许攻击者每10秒发出一个请求,但这只是他们在没有fail2ban的情况下发出请求的一小部分。
你可以以/etc/fail2ban/jail.d/wordpress.conf的形式创建jail文件。
[wordpress]
enabled = true
port = http,https
filter = wordpress
action = iptables-multiport[name=wordpress, port="http,https", protocol=tcp]
logpath = /var/log/apache2/all-sites-access.log
maxretry = 12
findtime = 120
bantime = 120
重新启动fail2ban以载入你的新配置
sudo systemctl restart fail2ban
检查你的fail2ban设置
查看jails
sudo fail2ban-client status
显示关于WordPress jails的信息
sudo fail2ban-client status wordpress
列出F2B-wordpress的iptables链(这将在fail2ban第一次阻止一个IP时创建,并包含被阻止的IP)。
sudo iptables -v -n -L f2b-wordpress
sudo ip6tables -v -n -L f2b-wordpress
查看日志,以查看任何被禁止或标记的IP
sudo less /var/log/fail2ban.log