如何在WordPress网站上设置fail2ban?

什么是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
分享你的喜爱

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注