网站搜索

如何设置 IPS (Fail2ban) 以防御不同的攻击


IPS(入侵防御系统)是一种用于网络安全的技术,用于检查网络流量并通过检测恶意输入来防止不同的攻击。除了像入侵检测系统那样检测恶意输入之外,它还可以防止网络受到恶意攻击。它可以防止网络遭受暴力破解、DoS(拒绝服务)、DDoS(分布式拒绝服务)、漏洞利用、蠕虫、病毒和其他常见攻击。 IPS 放置在防火墙后面,它们可以发送警报、丢弃恶意数据包并阻止违规 IP 地址。在本教程中,我们将使用 Fail2ban(入侵防御软件包)来添加针对不同暴力攻击的安全层。

Fail2ban 如何运作

Fail2ban 读取日志文件(例如 /var/log/apache/error_log)并获取尝试过多失败密码或寻求漏洞利用的违规 IP。基本上,Fail2ban 会更新防火墙规则以阻止服务器上的不同 IP。 Fail2ban 还提供过滤器,我们可以将其用于特定服务(例如 apache、ssh 等)。

安装 Fail2ban

Ubuntu 上没有预装 Fail2ban,因此在使用它之前,我们必须先安装它。

ubuntu@ubuntu:~$ sudo apt-get update -y

ubuntu@ubuntu:~$ sudo apt-get install fail2ban

安装 Fail2ban 后,使用命令行启动并启用 Fail2ban 服务。

ubuntu@ubuntu:~$ sudo systemctl start fail2ban

ubuntu@ubuntu:~$ sudo systemctl enable fail2ban

现在检查fail2ban服务的状态以确认它是否启动。

ubuntu@ubuntu:~$ sudo systemctl status fail2ban

为 SSH 配置 Fail2ban

我们可以通过修改/etc/fail2ban/jail.conf文件来配置Fail2ban。在修改之前,请备份该文件。

ubuntu@ubuntu:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

现在我们将配置 Fail2ban 以防止 sshd 服务受到恶意输入。在您喜欢的编辑器中打开 /etc/fail2ban/jail.local 文件。

ubuntu@ubuntu:~$ sudo nano /etc/fail2ban/jail.local

转至 [default] 部分并在 [default] 部分下输入配置参数。

[DEFAULT]

ignoreip = 127.0.0.1/8 192.168.18.10/32

bantime = 300

maxretry = 2

findtime = 600

ignoreip 是由空格字符分隔的 cidr 掩码、IP 地址或 DNS 主机的列表。将您信任的IP添加到此列表中,这些IP将被列入白名单,即使它们对服务器进行暴力攻击也不会被fail2ban阻止。

bantime 是指在对服务器进行特定次数的失败尝试后,IP 将被阻止的时间。

maxretry 是 IP 被 failed2ban 阻止一段特定时间后的最大失败尝试次数。

findtime 是主机进行maxretry 失败尝试的时间量,它将被阻止。

配置完上述参数后,现在我们将配置要应用上述规则的服务。默认情况下,Fail2ban针对不同的服务预定义了过滤器,因此我们不需要为服务输入任何特定条目。我们只在配置文件中启用或禁用不同的服务。在您喜欢的编辑器中打开 /etc/fail2ban/jail.local 文件。

ubuntu@ubuntu:~$ sudo nano /etc/fail2ban/jail.local

在文件中找到 [sshd] 部分,并在该部分中输入以下参数。

[sshd]

enable = true

port = ssh

filter = sshd

logpath = /var/log/auth.log

maxretry = 3

enabled 定义此服务是否受fail2ban 保护。如果enabled为true,则该服务受到保护;否则,它不受保护。

port 定义服务端口。

filter 指的是fail2ban将使用的配置文件。默认情况下,它将使用 /etc/fail2ban/filter.d/sshd.conf 文件进行 ssh 服务。

logpath定义了日志的路径,fail2ban将进行监控以保护服务免受不同的攻击。对于 ssh 服务,身份验证日志可以在 /var/log/auth.log 中找到,因此,fail2ban 将监视此日志文件,并通过检测失败的登录尝试来更新防火墙。

maxretry 定义在被fail2ban阻止之前尝试登录失败的次数。

对fail2ban应用上述配置后,重新启动服务以保存更改。

ubuntu@ubuntu:~$ sudo systemctl restart fail2ban.service

ubuntu@ubuntu:~$ sudo systemctl status fail2ban.service

测试 Fail2ban

我们配置了fail2ban来保护我们的系统免受对ssh服务的暴力攻击。现在我们将从另一个系统在我们的系统上进行失败的登录尝试,以检查fail2ban是否正常工作。现在进行一些失败的登录尝试后,我们将检查fail2ban 日志。

ubuntu@ubuntu:~$ cat /var/log/fail2ban.log

我们可以看到,登录尝试失败后,该IP已被fail2ban封锁。

我们可以使用以下命令获取启用了fail2ban的所有服务的列表。

ubuntu@ubuntu:~$ sudo fail2ban-client status

上图显示我们只对sshd服务启用了fail2ban。我们可以通过在上面的命令中指定服务名称来获取有关 sshd 服务的更多信息。

ubuntu@ubuntu:~$ sudo fail2ban-client status sshd

Fail2ban 在 bantime 后会自动解封被封禁的 IP 地址,但我们可以使用命令行随时解封任何 IP。这将为fail2ban提供更多控制。使用以下命令取消禁止 IP 地址。

ubuntu@ubuntu:~$ sudo fail2ban-client set sshd unbanip 192.168.43.35

如果您尝试取消禁止fail2ban未阻止的IP地址,它只会告诉您该IP未被阻止。

ubuntu@ubuntu:~$ sudo fail2ban-client set sshd unbanip 192.168.43.35

结论

对于系统管理员或者安全工程师来说,维护服务器的安全是一个很大的挑战。如果您的服务器受密码保护,而不是受公钥和私钥对保护,那么您的服务器更容易受到暴力攻击。他们可以通过应用不同的密码组合进入您的系统。 Fail2ban 是一个可以限制攻击者对您的服务器发起不同类型攻击的工具,包括暴力攻击和 DDoS 攻击。在本教程中,我们讨论了如何使用 Fail2ban 来保护我们的服务器免受不同的攻击。我们还可以使用Fail2ban来保护其他服务,例如apache、nginx等。

相关文章: