嵌入式开发交流网论坛

标题: 「干货分享」手把手教你如何使用Fail2Ban保护Linux服务器 [打印本页]

作者: JasonSWK    时间: 2020-6-9 00:04
标题: 「干货分享」手把手教你如何使用Fail2Ban保护Linux服务器
导语:解决问题肯定是越简单越好,而Fail2Ban就是解决棘手问题的一种优雅的解决方案,它只需很少的配置,几乎不会给您或您的计算机带来任何操作开销。
使用Fail2Ban,您的Linux计算机会自动阻止连接失败过多的IP地址。这是自我调节的安全性!我们将向您展示如何使用它。


[attach]44622[/attach]

提醒:不熟悉Fail2Ban的朋友请跳到文末,查看本文对Fail2Ban的简介。
安全、安全、安全!重要的事情说三遍
温莎公爵夫人沃利斯·辛普森( Wallis Simpson) 曾说过一句著名的话:“你永远不会太富或太瘦。” 我们已针对现代互联世界更新了此内容:您永远不能太小心或太安全。
如果您的计算机接受传入的连接请求(例如Secure Shell(SSH)连接)或者充当Web或电子邮件服务器,则需要保护它免受暴力攻击和密码猜测者的攻击。
为此,您需要监视无法进入帐户的连接请求。如果他们在短时间内反复未能通过身份验证,则应禁止他们进行进一步尝试。实际上可以实现的唯一方法是使整个过程自动化。只需进行一些简单的配置,即可为您fail2ban管理监视,禁止和取消禁止。
Fail2Ban与Linux防火墙集成iptables。iptables通过向防火墙添加规则来强制实施对可疑IP地址的禁止。当然,如果您担心安全性,则可能已为防火墙配置了填充良好的规则集。Fail2Ban仅添加和删除其自己的规则-您的常规防火墙功能将保持不变。
我们可以使用以下命令查看空规则集:
sudo iptables -L
[attach]44623[/attach]

安装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]。但是请小心找到实际的部分。这些标签也出现在描述它们的部分的顶部附近,但这不是我们想要的。
[attach]44624[/attach]

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

向下滚动到第90行,您将发现以下四个需要了解的设置:
1.ignoreip:永远不会被禁止的IP地址白名单。他们拥有永久的“摆脱Jails”卡。该本地主机的IP地址 (127.0.0.1)是在列表中默认情况下,其IPv6相当于沿(::1)。如果您知道永远不应禁止其他IP地址,请将它们添加到此列表中,并在每个IP地址之间留一个空格。
2.bantime:禁止IP地址的持续时间(“ m”代表分钟)。如果键入的值不带“ m”或“ h”(代表小时),则将其视为秒。值-1将永久禁止IP地址。要非常小心,不要将自己永久锁定在自己的面前。
3.findtime:尝试失败的连接次数过多会导致IP地址被禁止的时间。
4.maxretry:“尝试失败次数过多”的值。
如果来自同一IP地址的maxretry连接在该findtime时间段内尝试失败的连接,则在持续时间内将其禁止bantime。唯一的例外是ignoreip列表中的IP地址。
Fail2Ban将IP地址放入Jails一段时间。fail2ban支持许多不同的Jails,每个Jails代表适用于单个连接类型的设置。这使您可以对各种连接类型进行不同的设置。或者,您可以Fail2Ban仅监视一组选定的连接类型。
您可能已经从[DEFAULT]部分的名称中猜到了,但是我们看到的设置是默认设置。现在,让我们看一下SSH Jails的设置。
配置Jails
Jails可让您将连接类型移入和移出Fail2Ban's监视。如果默认设置不匹配要应用于Jails,您可以设置特定值bantime,findtime和maxretry。
向下滚动到第280行,您将看到[sshd]部分。
[attach]44626[/attach]

您可以在此处设置SSH连接Jails的值。要将这个Jails包括在监视和禁止中,我们必须输入以下行:
enabled=true
我们还输入以下行:
maxretry = 3
默认设置为5,但我们希望在使用SSH连接时更加谨慎。我们将其降为三,然后保存并关闭文件。
我们将此Jails添加到Fail2Ban's监视中,并覆盖了默认设置之一。Jails可以结合使用默认设置和特定于Jails的设置。
启用Fail2Ban
到目前为止,我们已经安装Fail2Ban并配置了它。现在,我们必须使它能够作为自动启动服务运行。然后,我们需要对其进行测试以确保其可以正常工作。
要启用Fail2Ban即服务,我们使用以下systemctl命令:
sudo systemctl enable fail2ban
我们还使用它来启动服务:
sudo systemctl start fail2ban
[attach]44627[/attach]

我们也可以使用来检查服务的状态systemctl:
sudo systemctl status fail2ban.service
[attach]44628[/attach]

一切看起来都很好-我们已经开绿灯,所以一切都很好。
让我们看看Fail2Ban是否同意:
sudo fail2ban-client status
[attach]44629[/attach]

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

此列表列出了失败的数量和被禁止的IP地址。当然,目前所有统计信息均为零。
测试Jails
在另一台电脑上,我们会向测试机发出 ssh 连接请求,故意输错密码。每次连接尝试都会有三次尝试获得正确的密码。maxretry 值会在三次连接尝试失败后触发,而不是三次密码尝试失败。
因此,我们必须输入错误的密码三次才能失败连接尝试一次,然后再次尝试连接,再输入错误的密码三次。第三个连接请求的第一次错误密码尝试应该触发Fail2Ban。
[attach]44631[/attach]

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


以前,错误消息是“权限被拒绝”。这次,连接被完全拒绝。我们是不受欢迎的角色。我们被禁止了。
让我们再次查看[sshd]Jails的详细信息:
sudo fail2ban-client status sshd
[attach]44632[/attach]

有3个失败,并且一个IP地址(192.168.4.25)被禁止。
如前所述,Fail2Ban通过将规则添加到防火墙规则集来实施禁令。让我们再来看一下规则集(以前是空的):
sudo iptables -L
[attach]44633[/attach]

规则已添加到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
[attach]44634[/attach]

总结:解决问题肯定是越简单越好,而Fail2Ban就是解决棘手问题的一种优雅的解决方案:它只需很少的配置,几乎不会给您或您的计算机带来任何操作开销。
补充说明:Fail2Ban简介
Fail2Ban是一款入侵防御软件,可以保护服务器免受暴力攻击。它是用Python编程语言编写的,基于auth日志文件工作,默认情况下它会扫描所有auth日志文件,/var/log/auth.log、/var/log/apache/access.log等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。通常,Fail2Ban用于更新防火墙规则,用于在指定的时间内拒绝IP地址。它也会发送邮件通知。Fail2Ban为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios等。Fail2Ban能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险,因为它只是服务器防止暴力攻击的安全手段之一。




欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) Powered by Discuz! X3.2