如何在 Ubuntu Server 16.04 上安装和配置 Fail2ban

你有没有登录到你的服务器并看到这样的消息?

Last failed login: Fri Dec 28 11:37:02 MST 2018 from 192.168.0.102 on ssh:notty
 There were 942 failed login attempts since the last successful login.
 Last login: Mon Dec 24 13:35:57 2018 from 192.168.0.101

这里发生了什么?

此消息通知我,当我注销时,有 942 次尝试通过 SSH 访问我的服务器失败! 这种类型的消息强烈表明我的服务器可能受到“暴力”攻击。 在这种情况下,攻击者将尝试反复随机猜测密码,直到他们幸运地得到正确的密码。 这是使用的原因之一一个安全的密码是如此重要!

不要害怕,Fail2ban 可以成为动态阻止这些类型的蛮力攻击的绝佳工具。 本教程将引导您完成安装和配置 Fail2ban 以帮助保护 sshd 免受暴力攻击。 让我们深入挖掘!

注意:本教程的其余部分要求您拥有 特权。 首先以 root 身份登录或在这些命令前面加上 sudo.

安装 Fail2ban

在 Ubuntu VPS 服务器上安装 Fail2ban 很简单。 运行以下两个命令来安装程序:

apt-get update
apt-get install fail2ban -y

我们将启动服务,因此它正在运行。

service fail2ban restart

最后,我们检查以确保重启后 Fail2ban 正在运行:

service fail2ban status

输出应显示 活跃(运行) 这表明服务已启动,我们已准备好进行配置。

配置Fail2ban

现在 Fail2ban 已安装并运行,我们可以为它保护的服务定义自定义规则,以及如何处理违规行为。

首先,为 Fail2ban 创建一个配置文件。 该文件默认不存在,但 Fail2ban 会查找该文件并读取其内容(如果存在):

touch /etc/fail2ban/jail.local

现在我们将打开配置文件进行编辑。 我们正在使用 作为我们的文本编辑器 example但请随意使用 纳米 或您最熟悉的任何文本编辑器。 (相关:如果您需要复习如何使用,请查看我们的有用教程 .) 运行以下命令打开文件进行编辑:

vi /etc/fail2ban/jail.local

粘贴以下内容,然后保存文件:

[DEFAULT]
 ignoreip = 127.0.0.1/8 ::1
 bantime = 3600
 findtime = 600
 maxretry = 5
 [sshd]
 enabled = true

让我们回顾一下我们刚刚设置的选项。 首先,我们告诉 Fail2ban 忽略 IP 地址 127.0.0.1 和 ::1。 这些分别是 localhost 的 IPv4 和 IPv6 地址。 对于其余的行,重要的是要了解 Fail2ban 在配置文件中读取时间为秒。 这些规则将禁止 IP 地址一小时{班时间 = 3600},如果他们犯了 5 个错误{最大重试 = 5}, 10 分钟内 {查找时间 = 600}。 最后,我们为 sshd 启用了 jail。 随意根据自己的喜好调整这些数字,但请考虑以下事项:

注意:将禁止时间设置为 -1 将导致永久禁止该 IP 地址。 如果您不小心阻止了您自己的服务器,您可能需要联系 Liquid Web 支持。 仔细考虑这些选项!

现在我们已经创建了要使用的配置,重新启动 Fail2ban 以便读取和使用我们的新规则:

service fail2ban restart

我们还将仔细检查以确保重启后 Fail2ban 正在运行:

service fail2ban status

注意:如果创建配置文件后Fail2ban没有成功启动,可能是配置文件有错别字 /etc/fail2ban/jail.local. 检查文件内容,然后重试!

Fail2ban 用法

至此,您已经成功安装并配置了Fail2ban,恭喜! 在本教程的其余部分,我们将向您展示如何使用该程序以及如何管理 IP 块。

运行以下命令检查 Fail2ban 的状态:

fail2ban-client status

示例输出显示当前配置的监狱数量。 现在我们只为 sshd

Status
 |- Number of jail:    1
 `- Jail list:    sshd

我们还可以轮询各个监狱的详细状态。 该命令将检查状态 sshd 我们刚刚配置的监狱:

fail2ban-client status sshd

示例输出显示没有 IP 被阻止,看起来不错!

Status for the jail: sshd
 |- Filter
 |  |- Currently failed:    0
 |  |- Total failed:    0
 |  `- File list:                 /var/log/auth.log
 `- Actions
 |- Currently banned:    0
 |- Total banned:    0
 `- Banned IP list:

现在,对于 example,我将失败五次尝试通过 SSH 连接到我的服务器。 在第五次尝试失败后,我的 IP 应该会被自动屏蔽! 以下显示了我在第五次尝试失败后尝试通过 SSH 连接到服务器时工作站的输出:

ssh [email protected]
 ssh: connect to host 192.168.0.101 port 22: Connection refused

这 ”连接被拒绝”消息表明服务器的防火墙现在正在阻止我们。

回到服务器上,让我们通过运行再次检查 SSH 监狱的状态:

fail2ban-client status sshd

输出显示我的IP确实被封了! 查看状态,我们可以看到我的工作站的 IP 地址已添加到“禁止IP列表”。

Status for the jail: sshd
 |- Filter
 |  |- Currently failed:    1
 |  |- Total failed:    1
 |  `- File list:                 /var/log/auth.log
 `- Actions
 |- Currently banned:    1
 |- Total banned:    1
 `- Banned IP list:    192.168.0.102

最后,我们将演示如何删除被禁止的 IP。 如果您的客户端意外阻止自己尝试输入错误的密码,这将很有帮助。 该命令的语法如下:

fail2ban-client set <JAIL NAME> unbanip <IP ADDRESS>

为了 example,此命令将从 sshd 监狱中删除 192.168.0.102。

fail2ban-client  set sshd unbanip 192.168.0.102

让我们仔细检查一下我们的工作,确保我的 IP 地址已成功解锁:

fail2ban-client status sshd
Status for the jail: sshd
 |- Filter
 |  |- Currently failed:    1
 |  |- Total failed:    6
 |  `- File list:                 /var/log/auth.log
 `- Actions
 |- Currently banned:    0
 |- Total banned:    1
 `- Banned IP list:

本教程到此结束! 我们在本教程中只讨论了保护 sshd,但 Fail2ban 可用于帮助保护各种其他服务,例如 httpd。 我们鼓励您进一步阅读,看看它有什么能力! 请记住,虽然 Fail2ban 很棒,但它并不能替代一套强大的防火墙规则。 但是,如果配置正确,Fail2ban 是一个很好的工具,可以帮助进一步加强服务器的安全性。 玩得开心快乐 IP 封锁!

Hosting™ 中最有帮助的人

我们以成为 Hosting™ 中最乐于助人的人而自豪! 我们的支持人员随时为您提供帮助 Cloud或 VPS 服务器全年 365 天、每周 7 天、每天 24 小时发布。

我们可以通过我们的票务系统 [email protected]、电话(800-580-4986)或通过 在线聊天 无论您喜欢什么方法。 我们为您努力工作,以便您可以放松。