如何在Ubuntu14.04上使用Fail2Ban保护WordPress
介绍
WordPress 是一个非常强大的内容管理系统 (CMS),它是免费和开源的。 由于任何人都可以在 WordPress 上发表评论、创建帐户和发帖,因此许多恶意行为者创建了机器人和服务器网络,通过蛮力攻击危害 WordPress 网站并向其发送垃圾邮件。 Fail2ban 工具可用于防止未经授权访问您的 Droplet 和 WordPress 网站。 它会记录可疑或重复的登录失败,并通过修改您的 Droplet 的防火墙规则来主动禁止这些 IP。
在本指南中,我们将在 Ubuntu 14.04 LAMP 服务器上使用 Fail2ban 0.9.3 版,并通过使用垃圾邮件日志插件将其与 WordPress 集成。
先决条件
要完成本指南,您需要
- 一个Ubuntu 14.04 Droplet使用一键式WordPress实例或你自己的WordPress Droplet
- 为管理任务配置了 sudo 权限的非 root 用户。 您可以按照我们的 Ubuntu 14.04 初始服务器设置指南 了解如何设置。
- 按照此 如何在 Ubuntu 14.04 上安装和使用 Fail2ban 教程 设置和配置 Fail2ban。
- 遵循 如何在 Ubuntu 上的 WordPress 中配置安全更新和安装指南
第 1 步 – 安装 WordPress Fail2ban 插件
首先,通过在浏览器中访问 https://your_server_ip/wp-admin
并使用您在安装 WordPress 时创建的管理员凭据登录到您的 WordPress 站点。 登录后,您将看到以下屏幕,这是您的 WordPress 仪表板。
查看左侧边栏的单词 Plugins,它会出现在边栏的一半左右。 点击Plugins后,你会看到这个画面:
在靠近顶部的右侧部分,您可以单击 Add New。 这允许您向 WordPress 站点添加新插件,以自定义、保护或扩展您的站点。 在这种情况下,我们将搜索 Fail2ban 插件。 下一个屏幕将如下所示:
在搜索字段中输入 Fail2ban,然后按键盘上的 ENTER
。 结果应该返回一个显示一些插件的屏幕,其中要安装的是 WP fail2ban。
点击Install Now开始安装,会出现两个提示:Activate Plugin和Return to Plugin Installer。 选择 Activate Plugin,您的浏览器会将您返回到已安装插件的列表,列表中包含新的 WP fail2ban 插件。 这时候,你可以点击【X28X】查看详情【X44X】查看更多关于你的新插件的信息。 还有一个常见问题解答将帮助您了解如何启用功能,例如阻止可能用于向您的 WordPress 网站发送内容或评论的垃圾邮件的特定用户。
第 2 步 — 将 WordPress 过滤器应用于 Fail2ban
这个 WordPress 插件包括一个新的自定义 Fail2ban 过滤器。 在此步骤中,我们将安装该过滤器,以便 Fail2ban 可以正确解析和使用发送到 syslog 的身份验证日志。
首先,将过滤器从 WordPress 插件目录移动到适当的 Fail2ban 过滤器位置。 我们将使用“硬”WordPress 过滤器来获得更好的保护:
sudo cp /var/www/html/wp-content/plugins/wp-fail2ban/filters.d/wordpress-hard.conf /etc/fail2ban/filter.d/
使用新的 wordpress-hard.conf
过滤器,您可以通过编辑文件 /etc/fail2ban/jail.local
将 Fail2ban 指向适当的身份验证日志。 Fail2ban 中的监狱是指为 IP 地址提供过滤器的一系列规则和操作。
使用 nano 或您喜欢的文本编辑器打开文件 jail.local
。
sudo nano /etc/fail2ban/jail.local
文件打开后,滚动到底部并将以下行附加到末尾。 这些行启用插件,将过滤器设置为我们之前复制到 filters.d
目录的 wordpress-hard.conf
过滤器,为访问尝试设置适当的日志记录目标,并指定此流量将进入在 http
和 https
端口上。
[wordpress-hard] enabled = true filter = wordpress-hard logpath = /var/log/auth.log maxretry = 3 port = http,https
保存并关闭文件。
接下来,您可以通过在终端中运行以下命令来重新启动 Fail2ban 以确保新过滤器现在就位:
sudo service fail2ban restart
第 3 步 – 忽略计算机上的登录尝试
为了防止您或其他已知用户因意外身份验证失败而被禁止访问,我们建议您忽略您自己本地计算机的公共 IP 地址。
如果您使用的是基于 Linux 的操作系统,请使用以下命令:
curl ipecho.net/plain ; echo
否则,请访问 http://checkip.dyndns.org
以确定您计算机的公共 IP 地址。 如果您的 WordPress 网站的任何其他用户位于其他位置,您可能也希望找到他们的地址。
再次打开jail.local
进行编辑:
sudo nano /etc/fail2ban/jail.local
以下行将列出以本地服务器 IP (localhost) 开头的所有被忽略的 IP 地址,并用空格分隔您希望访问 WordPress 的已知主机的值。 将此添加到 DEFAULT 部分,在您在 WordPress 插件设置步骤中添加的 ignoreip 语句下。
ignoreip = 127.0.0.1/8 your_computer_ip
保存并退出您的编辑器。
第 4 步 - 测试过滤器
要测试过滤器是否正常工作,您可以退出 WordPress 站点的 wp-admin 站点并再次登录。
您可以使用此 Fail2ban 监狱状态来确保过滤器不会记录您的成功登录。
sudo fail2ban-client status wordpress-hard
您应该会看到与此类似的结果:
Status for the jail: wordpress-hard |- filter | |- File list: /var/log/auth.log | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0
如果您查看 auth.log
文件,您将在文件底部附近使用 tail
看到您成功登录,这将显示最后 10 行输出:
sudo tail /var/log/auth.log
成功的身份验证将如下所示:
Month Day Hour:Minute:Second your_server wordpress(your_server_ip)[PID]: Accepted password for admin from your_computer_ip
如果日志中出现未经授权的用户或身份验证失败,您的新插件将通过适当地更改防火墙规则来确保阻止此 IP 访问您的站点。
第 5 步 - 轮换您的日志文件
如果您发现您的 WordPress 站点收到大量未经授权的登录尝试,并且您的日志文件正在快速增长,您可以通过编辑文件 /etc/logrotate.conf
将日志文件轮换为新的。
sudo nano /etc/logrotate.conf
附加这些行,设置文件的最大大小、日志的权限和周数。 例如,您可以将 4 设置为文件在刷新之前将存在的周数:
/var/log/auth.log { size 30k create 0600 root root rotate 4 }
适当地保存并退出文件。
结论
按照本指南中的步骤,您安装并配置了 Fail2ban 插件,排除了您的本地 IP 地址,并测试了您的工作。 您还可以设置日志轮换以防止日志文件无限增长。 现在,您的 WordPress 实例对于未经授权的登录尝试、垃圾评论和对您网站的入侵更加强大和安全。