如何使用 fail2ban 保护您的 Linux 服务器

已发表: 2022-01-29
在 Ubuntu 风格的 Linux 笔记本电脑上运行的风格化终端窗口。
Fatmawati Achmad Zaenuri/Shutterstock

使用fail2ban ,您的 Linux 计算机会自动阻止连接失败过多的 IP 地址。 这是自我调节的安全性! 我们将向您展示如何使用它。

安全 安全 安全

温莎公爵夫人沃利斯·辛普森曾经说过一句名言:“你永远不能太富有或太瘦。” 我们已经为我们的现代互联世界更新了这一点:您永远不会太小心或太安全。

如果您的计算机接受传入的连接请求,例如安全外壳 (SSH) 连接,或者充当 Web 或电子邮件服务器,您需要保护它免受暴力攻击和密码猜测者的攻击。

为此,您需要监控无法进入帐户的连接请求。 如果他们在短时间内多次未能进行身份验证,则应禁止他们进行进一步的尝试。

实际上可以实现的唯一方法是自动化整个过程。 通过一些简单的配置, fail2ban将为您管理监控、禁止和取消禁止。

广告

fail2ban与 Linux 防火墙iptables集成。 它通过向防火墙添加规则来强制禁止可疑的 IP 地址。 为了保持这个解释整洁,我们使用带有空规则集的iptables

当然,如果您担心安全性,您可能有一个配置了完善的规则集的防火墙。 fail2ban只添加和删除自己的规则——您的常规防火墙功能将保持不变。

我们可以使用以下命令查看我们的空规则集:

 sudo iptables -L 

相关: iptables 初学者指南,Linux 防火墙

安装fail2ban

在我们用来研究本文的所有发行版上安装fail2ban都很简单。 在 Ubuntu 20.04 上,命令如下:

 sudo apt-get install fail2ban 

在 Fedora 32 上,键入:

 须藤 dnf 安装 fail2ban 

在 Manjaro 20.0.1 上,我们使用了pacman

 sudo pacman -Sy fail2ban 

配置fail2ban

fail2ban安装包含一个名为 jail.conf 的默认配置文件。 升级fail2ban时会覆盖此文件,因此如果我们对此文件进行自定义,我们将丢失更改。

相反,我们会将 jail.conf 文件复制到一个名为 jail.local 的文件中。 通过将我们的配置更改放在 jail.local 中,它们将在升级过程中持续存在。 fail2ban自动读取这两个文件。

这是复制文件的方法:

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

现在在您喜欢的编辑器中打开文件。 我们将使用gedit

 sudo gedit /etc/fail2ban/jail.local
广告

我们将在文件中查找两个部分:[DEFAULT] 和 [sshd]。 不过,请注意找到实际的部分。 这些标签也出现在描述它们的部分的顶部附近,但这不是我们想要的。

/etc/fail2ban/jail.local 在 gedit 窗口中打开。

您会在第 40 行附近找到 [DEFAULT] 部分。这是一个包含大量评论和解释的长部分。

/etc/fail2ban/jail.local 在 gedit 窗口中打开并滚动到第 89 行。

向下滚动到第 90 行左右,您会发现以下四个您需要了解的设置:

  • ignoreip:永远不会被禁止的 IP 地址白名单。 他们有一张永久的“越狱免费”卡。 默认情况下,本地主机 IP 地址 ( 127.0.0.1 ) 及其 IPv6 等效地址 ( ::1 ) 都在列表中。 如果还有其他您知道永远不应禁止的 IP 地址,请将它们添加到此列表中,并在每个 IP 地址之间留一个空格。
  • bantime: IP 地址被禁止的持续时间(“m”代表分钟)。 如果您键入一个没有“m”或“h”(小时)的值,它将被视为秒。 值 -1 将永久禁止 IP 地址。 要非常小心,不要将自己永久锁定。
  • findtime:太多失败的连接尝试将导致 IP 地址被禁止的时间量。
  • maxretry: “太多失败尝试”的值。

如果来自同一 IP 地址的连接在 findtime 期间进行maxretry失败的连接尝试,则在findtime期间将被bantime 。 唯一的例外是ignoreip列表中的 IP 地址。

fail2ban将 IP 地址放入监狱一段时间。 fail2ban支持许多不同的监狱,每个监狱代表持有适用于单一连接类型的设置。 这使您可以对各种连接类型进行不同的设置。 或者您可以让fail2ban仅监控一组选定的连接类型。

您可能已经从 [DEFAULT] 部分名称中猜到了,但我们查看的设置是默认设置。 现在,让我们看看 SSH 监狱的设置。

相关:如何在 Linux 上使用 gedit 以图形方式编辑文本文件

配置监狱

Jails 允许您将连接类型移入和移出fail2ban's监控。 如果默认设置与您希望应用于监狱的设置不匹配,您可以为bantimefindtimemaxretry设置特定值。

广告

向下滚动到第 280 行,您将看到 [sshd] 部分。

/etc/fail2ban/jail.local 在 gedit 窗口中打开并滚动到第 280 行。

您可以在此处设置 SSH 连接监狱的值。 要将这个监狱包括在监控和禁止中,我们必须输入以下行:

 启用 = 真

我们也输入这一行:

 最大重试 = 3

默认设置为 5,但我们希望对 SSH 连接更加谨慎。 我们将其降为三个,然后保存并关闭文件。

我们将此监狱添加到fail2ban's监控中,并覆盖了其中一个默认设置。 监狱可以使用默认设置和监狱特定设置的组合。

启用fail2ban

到目前为止,我们已经安装并配置了fail2ban 。 现在,我们必须使其能够作为自动启动服务运行。 然后,我们需要对其进行测试以确保它按预期工作。

广告

要启用fail2ban作为服务,我们使用systemctl命令:

 sudo systemctl 启用 fail2ban

我们也用它来启动服务:

 sudo systemctl start fail2ban 

我们也可以使用systemctl服务的状态:

 sudo systemctl status fail2ban.service 

一切看起来都很好——我们得到了绿灯,所以一切都很好。

让我们看看fail2ban是否同意:

 sudo fail2ban-客户端状态

这反映了我们设置的内容。 我们启用了一个名为 [sshd] 的监狱。 如果我们在前面的命令中包含监狱的名称,我们可以更深入地查看它:

 sudo fail2ban-client 状态 sshd 

这列出了失败的数量和被禁止的 IP 地址。 当然,目前所有的统计数据都是零。

测试我们的监狱

在另一台计算机上,我们将向我们的测试机器发出 SSH 连接请求,并故意输入错误的密码。 每次连接尝试时,您都会尝试三次以正确获取密码。

广告

maxretry值将在三次失败的连接尝试后触发,而不是三次失败的密码尝试。 因此,我们必须输入错误的密码三次才能使连接尝试失败。

然后,我们将再次尝试连接并再次输入错误的密码三遍。 第三次连接请求的第一次错误密码尝试应该触发fail2ban.

在第三次连接请求的第一个错误密码之后,我们没有得到远程机器的响应。 我们没有得到任何解释; 我们只是冷遇。

您必须按 Ctrl+C 才能返回命令提示符。 如果我们再试一次,我们会得到不同的响应:

 ssh [email protected] 

以前,错误消息是“权限被拒绝”。 这一次,连接被彻底拒绝。 我们是不受欢迎的人。 我们被禁止了。

让我们再看一下 [sshd] 监狱的细节:

 sudo fail2ban-client 状态 sshd 

广告

3次失败,1个IP地址(192.168.4.25)被封禁。

正如我们之前提到的, fail2ban通过向防火墙规则集中添加规则来强制执行禁令。 让我们再看一下规则集(之前它是空的):

 sudo iptables -L 

INPUT 策略中添加了一条规则,将 SSH 流量发送到f2b-sshd链。 f2b-sshd链中的规则拒绝来自 192.168.4.25 的 SSH 连接。 我们没有更改bantime的默认设置,因此,在 10 分钟内,该 IP 地址将被取消禁止并可以发出新的连接请求。

如果您设置了更长的禁止持续时间(如几个小时),但希望允许 IP 地址更快地发出另一个连接请求,您可以提前假释。

我们键入以下内容来执行此操作:

 sudo fail2ban-client 设置 sshd unbanip 192.168.5.25 

在我们的远程计算机上,如果我们发出另一个 SSH 连接请求并输入正确的密码,我们将被允许连接:

 ssh [email protected] 

简单有效

越简单通常越好, fail2ban是解决棘手问题的优雅解决方案。 它只需要很少的配置,几乎不会给您或您的计算机带来任何操作开销。

相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑