帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何使用fail2ban保护你的Linux服务器安全

如何使用fail2ban保护你的Linux服务器安全

发布时间:2020年06月08日 10:41:31    来源: A5互联

使用fail2ban,你的Linux服务器会自动屏蔽连接失败次数过多的IP地址。这是一个自我调节的安全系统,这里将向您展示如何使用它。

如果你的服务器开放了进入的连接请求,例如Secure Shell (SSH)连接,或作为Web、电子邮件服务器,你需要保护它免受暴力破解和密码破解。

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

实际实现这一目标的唯一方法是将整个过程自动化。只需进行一点简单的配置,fail2ban就能为你管理监控、禁止和解除禁止。

fail2ban与Linux防火墙iptables集成。它通过在防火墙上添加规则来执行对可疑IP地址的禁止。

为了让描述更加简洁,我们使用带有空规则集的iptables。如果你担心安全问题,你可能已经在防火墙上配置了一个完善的规则集。 fail2ban只添加和删除它自己的规则--你的常规防火墙功能将保持不变。

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

sudo iptables -L

一、安装fail2ban

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

sudo apt-get install fail2ban

在Fedora 32上,输入:

sudo dnf install 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]. 不过要注意找到实际的部分。这些标签也会出现在靠近顶部描述它们的部分,但这不是我们想要的。

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

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

ignoreip: 永远不会被禁止的IP地址白名单。该本地主机的IP地址 (127.0.0.1)是在列表中默认情况下,其IPv6相当于沿(::1)。如果您有不能被禁止的IP地址,请将它们添加到此列表中,并在每个IP地址之间留一个空格。

bantime:禁止IP地址的持续时间(“ m”代表分钟)。如果输入的值不带“ m”或“ h”(代表小时),则将其视为秒。值-1将永久禁止IP地址。要非常小心,不要讲自己误封了哦。

findtime:尝试失败的连接次数过多会导致IP地址被禁止的时间。

maxretry: “尝试失败次数过多”的值。

如果来自同一IP地址的maxretry连接在该findtime时间段内尝试失败的连接,则在的持续时间内将其禁止bantime。唯一的例外是ignoreip列表中的IP地址。

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

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

三、配置封建规则

Jails可让您将连接类型移入和移出fail2ban's监视。如果默认设置不匹配要应用于Jail,您可以设置特定值bantime,findtime和maxretry。

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

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

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

enabled = true

我们还输入以下行:

maxretry = 3

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

我们将此Jail添加到fail2ban's监视中,并覆盖了默认设置之一。Jail可以结合使用默认设置和特定于Jail的设置。

四、启用fail2ban

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

要启用fail2ban即服务,我们使用以下systemctl命令:

sudo systemctl enable fail2ban

我们还使用它来启动服务:

sudo systemctl start fail2ban

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

sudo systemctl status fail2ban.service

终端窗口中的sudo systemctl status fail2ban.service。

一切看起来都很好-我们已经开绿灯,所以一切都很好。

让我们看看是否 fail2ban 同意:

sudo fail2ban-client status

这反映了我们的设置。我们启用了一个名为[sshd]的Jail。如果在前面的命令中包含Jail的名称,我们可以对其进行更深入的研究:

sudo fail2ban-client status sshd

此列表列出了失败的数量和被禁止的IP地址。当然,目前所有统计信息均为零。

五、测试我们的Jail

在另一台服务器上,我们将向测试服务器发出SSH连接请求,并故意输入密码。您将进行三次尝试以在每次连接尝试中正确获取密码。

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

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

在第三个连接请求上输入了第一个不正确的密码后,我们没有收到远程服务器的响应。

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

ssh dave@ubuntu20-04.local

以前,错误消息是“权限被拒绝”。这次,连接被完全拒绝。

让我们再次查看[sshd]Jail的详细信息:

sudo fail2ban-client status sshd

有3个失败,并且一个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 set sshd unbanip 192.168.5.25

在我们的远程服务器上,如果我们发出另一个SSH连接请求并输入正确的密码,则可以连接:

ssh dave@ubuntu20-04.local

越简单越好,而 fail2ban 是解决一个棘手问题的最佳方案。它只需要很少的配置,而且几乎不需要任何操作费用,对您或您的服务器来说都是如此。