Fail2ban是用Python语言编写的,它是一个免费的开源入侵防御系统( IPS ),可保护Linux服务器免受暴力攻击。
在指定次数的错误密码登录尝试后,客户端的IP地址将被禁止在指定时间段内访问系统,或直到系统管理员解除阻止为止。这样,Linux系统就可以免受来自单个主机的反复暴力攻击。
Fail2ban具有高度可配置性,可以设置为保护无数服务,例如SSH、vsftpd、Apache和Webmin。
在本指南中,小编将简单介绍在Rocky Linux和AlmaLinux系统上安装和配置Fail2ban的简单方法。Centos 8和RHEL 8系统参考:CentOS 8 | RHEL 8系统安装配置Fail2ban过程详解。
第 1 步:确保Firewalld正在运行
默认情况下,Rocky是运行Firewalld。但是,如果系统不是这种情况,请执行以下命令启动Firewalld:
$ sudo systemctl start firewalld
然后设置系统自动启动:
$ sudo systemctl enable firewalld
然后验证Firewalld的状态
$ sudo systemctl status firewalld
此外,还可以使用以下命令确认当前正在执行的所有Firewalld规则:
$ sudo firewall-cmd --list-all
第 2 步:在Rocky Linux系统中安装EPEL
作为安装fail2ban和其它必要软件包的要求,需要安装EPEL存储库,因为它为基于RHEL的发行版提供额外的高质量软件包。
$ sudo dnf install epel-release
第 3 步:在Rocky Linux系统中安装Fail2ban
安装 EPEL后,继续安装fail2ban和fail2ban-firewalld软件包。
$ sudo dnf install fail2ban fail2ban-firewalld
这将安装fail2ban服务器和firewalld组件以及其它依赖项。
完成fail2ban安装之后,启动fail2ban服务。
$ sudo systemctl start fail2ban
并使其在开机时自动启动。
$ sudo systemctl enable fail2ban
可以通过运行以下命令来验证fail2ban服务的状态:
$ sudo systemctl status fail2ban
输出确认Fail2ban正在按预期运行。
第 4 步:在Rocky Linux系统中配置Fail2ban
接下来需要配置fail2ban以使其按预期工作。理想情况下,可以编辑主配置文件 – /etc/fail2ban/jail.conf,但是,不建议使用这种方法。比较常用的办法是,将jail.conf配置文件的内容复制到jail.local文件。
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
现在,使用文本编辑器打开jail.local文件。
$ sudo vim /etc/fail2ban/jail.local
在[DEFAULT]部分下,确保具有以下设置。
bantime = 1h findtime = 1h maxretry = 5
属性的定义:
- bantime指令指定客户端在身份验证尝试失败后被禁止的持续时间。
- findtime指令是在发现重复错误密码登录尝试期限内会激活fail2ban
- maxretry参数是在远程客户端被阻止访问服务器之前尝试输入错误密码的最大次数。在这里,客户端将在5次身份验证失败后被锁定。
默认情况下,fail2ban与iptables 一起工作。但是,目前已经不用iptables,取而代之的是firewalld,因此需要将fail2ban配置为与firewalld一起工作,而不是iptables了。
使用以下命令运行:
$ sudo mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
要应用更改,请重新启动fail2ban:
$ sudo systemctl restart fail2ban
第 5 步:使用Fail2ban保护SSH服务
默认情况下,fail2ban不会阻止任何远程主机,直到你希望保护服务启用jail配置。jail配置在/etc/fail2ban/jail.d路径中指定,并将覆盖jail.local文件中指定的配置。
在本文中,将创建一 jail配置文件来保护SSH服务。因此,创建SSH jail文件。
$ sudo vim /etc/fail2ban/jail.d/sshd.local
接下来,粘贴以下行:
[sshd] enabled = true # Override the default global configuration # for specific jail sshd bantime = 1d maxretry = 3
在上面的配置中,远程主机在3次SSH登录尝试失败后将被禁止访问系统1天,保存更改并重新启动fail2ban服务。
$ sudo systemctl restart fail2ban
接下来,使用fail2ban-client命令行实用程序验证jail配置状态。
$ sudo fail2ban-client status
从输出中可以看到已经为一个名为“ sshd ”的服务配置了1个jail。
此外,可以使用get选项确认sshd jail的maxretry值。
$ sudo fail2ban-client get sshd maxretry 3
可以看到输出值是3,这与在sshd.local文件中指定的值是一致的。
第 6 步:测试Fail2ban配置
在为SSH服务设置了fail2ban并创建了一个jail配置文件之后,接下来将执行一个测试运行,并通过为每个密码提示指定一个错误的密码来模拟3次失败的登录。
因此,前往远程Linux服务器并尝试使用错误的密码进行登录,在3次尝试失败后,连接将被断开,并且任何后续的重新连接尝试都将被阻止,直到禁令持续时间结束。
要收集有关被阻止的客户端系统的信息,请检查jail状态。
$ sudo fail2ban-client status sshd
要从jail中解禁或删除已被禁用的客户端,请执行以下命令:
$ sudo fail2ban-client unban 192.168.2.102
再次检查jail状态以确保客户端未包含在禁止 IP 列表中。
$ sudo fail2ban-client status sshd
总结
从以上示例可以看出,Fail2ban是一个非常有用的Linux服务器工具,可以抵御试图破坏Linux系统的入侵者。此外,它与 Firewalld结合使用,在特定次数的失败登录尝试后在指定的时间内禁止客户端系统,这样做的目的是为Linux服务器提供额外的安全防护。
总之,如果想更好的保护Rocky Linux、AlmaLinux等Linux服务器的安全,那么强烈建议安装Fail2ban工具,具体的安装和配置方法可以参考上述过程。