网站搜索

如何使用 Fail2Ban 保护 SSH:初学者指南


深入研究我们的初学者指南,了解如何使用 Fail2Ban 保护 SSH,以保护您的服务器免受未经授权的访问和暴力攻击。

我们将从一个比喻开始。想象一座堡垒;虽然它的高墙和坚固的大门是为了阻止不受欢迎的访客而建造的,但总会有人试图攀登墙壁或强行打开大门。

同样,我们的数字堡垒,尤其是服务器,面临着持续的威胁。其中一个入口就是安全外壳 (SSH),这是一种允许安全远程访问的协议。因此,正如大门需要警卫和监控系统一样,SSH 也需要针对潜在入侵者的保护措施。

输入 Fail2Ban——您服务器的警惕哨兵。它是防止未经授权的访问尝试(尤其是暴力破解)的最有效防护措施之一。

什么是 Fail2Ban?

Fail2Ban 是一款开源软件工具,可防止暴力服务器攻击等自动化恶意活动。

它最有价值的事情之一就是它的主动行动。换句话说,Fail2Ban 提供了一种实时识别和阻止潜在威胁的方法,而不是等待攻击。

Fail2Ban 的美妙之处在于它的简单性和适应性。虽然它经常用于保护 SSH,但其功能并不限于该协议。 Fail2Ban 可以配置为监视任何服务的日志文件,为 FTP、SMTP、Web 服务器等服务提供多功能解决方案。

此外,它占用的资源很少,因此不会对服务器的性能造成负担——这是处理大量事务或交互的服务器的一个关键考虑因素。

Fail2Ban 的工作原理

首先,我们简单解释一下什么是暴力破解。这是一种网络攻击,攻击者试图通过系统地尝试所有可能的密码或加密密钥组合直到找到正确的组合来获得对系统或服务的未经授权的访问。

在这方面,Fail2Ban 会监视服务器日志以查找指示此类攻击的特定模式,例如,短时间内重复尝试失败的登录。

根据称为“过滤器”的预定义或自定义规则,Fail2Ban 可以识别暗示攻击的模式并自动触发某些预定义的操作。最常见的一种是暂时禁止攻击者的 IP 地址、强制执行防火墙规则并防止进一步的恶意尝试。

Fail2Ban 的一个关键功能是“监狱”的概念——将过滤器与操作结合起来的服务器服务的特定监控策略。您可以为不同的服务设置不同的监狱(例如,一个用于 SSH,另一个用于 FTP 等)。

每个监狱指定要监视的日志文件、要查找的模式以及检测到这些模式时要采取的操作。

被封禁一段时间后,该 IP 地址会自动解封,允许因忘记密码等原因而被暂时封禁的合法用户重试。

安装 Fail2Ban

现在让我们安装 Fail2Ban,如您所见,这非常简单。请使用适合您所使用的 Linux 发行版的命令。

Debian/Ubuntu

sudo apt install fail2ban

这里不需要采取进一步的操作,因为该服务在安装后会自动激活。

RHEL/Rocky Linux/Alma Linux/Fedora

由于 Fail2Ban 驻留在 EPEL 存储库中,因此您必须首先将其添加到您的系统(如果尚未这样做):

sudo dnf install epel-release

然后安装 Fail2Ban 并启用该服务在启动时启动:

sudo dnf install fail2ban
sudo systemctl enable fail2ban

开放SUSE

sudo zypper in fail2ban

为 SSH 配置 Fail2Ban

安装后,主配置文件是“/etc/fail2ban/jail.conf。 ” 但是,最佳实践不建议直接修改它。相反,我们将通过创建一个扩展名为“.local”的新文件来复制它。 “ 为什么?这很简单——这可以避免升级时的合并问题。那么,让我们开始吧。

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

当 Fail2Ban 服务重新启动时,首先读取“jail.conf”文件,然后读取“jail.local”,后面的设置会覆盖前面的设置。

现在,让我们开始有趣的部分——配置 Fail2Ban。使用您喜欢的终端文本编辑器打开“jail.local”文件。

sudo nano /etc/fail2ban/jail.local

向下滚动直到找到“[sshd]”部分,它看起来与下面的类似。

将“[sshd]”部分的现有内容替换为:

[sshd]

enabled = true
port    = ssh
backend = systemd
maxretry = 3
findtime = 300
bantime = 3600
ignoreip = 127.0.0.1

最终版本应如下所示。需要知道这些选项的含义吗?不要害怕——我们已经在下面进一步详细解释了每一项。

  • 启用 – 确定监狱是否处于活动状态。
  • 端口 – 指定您要监控的端口。接受任何端口号或服务名称,例如“ssh”、“22”、“2200”等。
  • 后端 – 指定用于获取文件修改的后端。由于所有现代 Linux 系统都依赖于 systemd 的日志服务,因此我们将其指定为后端。
  • maxretry – 某个 IP 在被禁止之前尝试失败的次数。
  • findtime – “maxretry”登录失败将导致禁止的时间范围(以秒为单位)。我们指定了 300 秒,即 5 分钟。
  • bantime – IP 应保持禁止状态的持续时间(以秒为单位)。在我们的例子中,我们设置了 3600 秒,这意味着在接下来的一小时内,来自该 IP 地址的任何后续请求(不仅仅是到 SSH 端口)都将被阻止。
  • ignoreip – 允许您将应忽略的 IP 地址列入白名单。这可确保给定的 IP 地址,即使超过“maxretry”中指定的失败尝试次数,也不会被阻止。

就是这样。保存文件并退出,然后重新启动 Fail2Ban 服务。

sudo systemctl restart fail2ban

然后,确保服务一切正常。

sudo systemctl status fail2ban

测试与监控

尝试通过 SSH 从另一台计算机多次登录到刚刚安装和配置 Fail2Ban 的服务器。第三次尝试失败后,您的访问应该被阻止。

您可能已经想知道如何监控内部发生的情况。好消息是 Fail2Ban 拥有用于此目的的优秀集成工具。要查看当前被阻止的 IP 地址,请运行以下命令:

sudo fail2ban-client status sshd

如果我们进一步查看 iptables 规则,我们会发现 Fail2Ban 创建了一条链(“f2b-sshd”),并在其中插入了相关 IP 地址。在“bantime”选项中指定的超时期限过后,它们将自动从那里删除。

sudo iptables -L -n

要手动取消禁止所有监狱中的所有 IP 地址,请执行以下命令:

sudo fail2ban-client unban --all

仅对于单独的地址,您的命令应该是:

sudo fail2ban-client unban <ip-address>

当然,fail2ban-client 命令还有许多其他选项,为您提供了巨大的可能性和灵活性。如果您想详细了解它们,请查看此处。

重要的是要记住

虽然 Fail2Ban 是一款优秀的软件,但当您的 SSH 服务器配置为仅公钥身份验证时,它的用处就不大了,因为无法使用密码登录。 更多相关信息请参见此处。

此外,请记住,它并不能取代 VPN 为您提供的访问服务器的安全性。因此,除非绝对必要,否则请避免将您的服务暴露在互联网上。

结论

保护服务器的安全始终应该是重中之重。由于 SSH 是许多攻击者的常见入口点,因此需要特别注意。

通过本指南,我们逐步完成了安装和配置 Fail2Ban 的简单步骤,以监控和保护 SSH 免受重复的恶意登录尝试。

通过设置此工具,您可以添加一个重要的安全层来防止潜在的入侵。因此,保持安全,保持更新,并始终积极主动地制定服务器的防御策略。

感谢您抽出时间!最后,我们建议您查看 Fail2Ban GitHub 页面以获取更多帮助或有价值的信息。

相关文章: