Oracle Linux 8 使用 Firewalld 安装 Fail2ban

Fail2ban 是一个免费的开源防火墙软件解决方案,可保护我们的服务器免受暴力登录攻击。 它是一个入侵防御框架,可以持续监控不同服务的日志文件,检测失败的身份验证,并阻止使用 firewalld 或 iptables 的攻击。 Fail2ban 通过配置文件永久或临时阻止攻击者的 IP。 每当发生攻击时,它还会向我们发送电子邮件通知。 它主要用于 SSH 攻击,但是,它可以配置为适用于任何使用日志文件的服务。

在本指南中,我们将向我们展示 Oracle Linux 8 上使用 firewalld 安装 Fail2ban。

先决条件

  • 在 云平台上运行 Oracle Linux 8 的服务器
  • 在我们的服务器上配置的 root 密码

第 1 步 – 创建 云服务器

首先,登录到我们的 云服务器。 创建一个新服务器,选择 Oracle Linux 8 作为至少 2GB RAM 的操作系统。 通过 SSH 连接到我们的云服务器并使用页面顶部突出显示的凭据登录。

登录到服务器后,运行以下命令以使用最新的可用软件包更新基本系统。

dnf update -y

第 2 步 – 配置 Firewalld

默认情况下,Firewalld 预装在 Oracle Linux 8 中。我们可以使用以下命令检查它是否已安装:

dnf info firewalld

如果安装了 Firewalld,我们将获得以下输出:

Installed Packages
Name         : firewalld
Version      : 0.9.3
Release      : 7.0.2.el8
Architecture : noarch
Size         : 2.0 M
Source       : firewalld-0.9.3-7.0.2.el8.src.rpm
Repository   : @System
From repo    : anaconda
Summary      : A firewall daemon with D-Bus interface providing a dynamic firewall
URL          : http://www.firewalld.org
License      : GPLv2+
Description  : firewalld is a firewall service daemon that provides a dynamic customizable
             : firewall with a D-Bus interface.

接下来,验证 Firewalld 是否正在运行。

systemctl status firewalld

我们应该看到 Firewalld 服务被屏蔽:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

我们将需要取消屏蔽 Firewalld 服务。 我们可以使用以下命令取消屏蔽它:

systemctl unmask firewalld

接下来,启动 Firewalld 服务并使其在系统重新启动时启动:

systemctl start firewalld
systemctl enable firewalld

第 3 步 – 安装 Fail2Ban

默认情况下,Fail2ban 包不包含在 Oracle Linux 8 默认存储库中,因此我们需要将 EPEL 存储库安装到我们的系统中。 运行以下命令来安装 EPEL 存储库:

dnf install epel-release -y

接下来,运行以下命令在我们的服务器上安装 Fail2ban 软件包:

dnf install fail2ban fail2ban-firewalld -y

安装 Fail2ban 后,使用以下命令启动并启用 Fail2ban 服务:

systemctl start fail2ban
systemctl enable fail2ban

我们还可以使用以下命令验证 Fail2ban 版本:

fail2ban-client --version

样本输出:

Fail2Ban v0.11.2

第 4 步 – 配置 Fail2Ban

默认情况下,Fail2ban 配置为使用 Iptables 防火墙,因此我们需要配置 Fail2ban 以使用 Firewalld。

首先,使用以下命令重命名 Fail2ban 的 Firewalld 配置文件:

mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local

接下来,复制Fail2ban默认配置文件:

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

接下来,编辑 jail.local 文件:

nano /etc/fail2ban/jail.local

找到以下几行:

banaction = iptables-multiport
banaction_allports = iptables-allports

并将它们替换为以下行:

banaction = firewallcmd-rich-rules[actiontype=]
banaction_allports = firewallcmd-rich-rules[actiontype=]

保存并关闭文件,然后重新启动 Fail2ban 以应用更改:

systemctl restart fail2ban

此时,Fail2ban 已配置为与 Firewalld 一起使用。

第 5 步 – 使用 Fail2Ban 保护 SSH 服务

默认情况下,Fail2ban 未配置为阻止任何 IP 地址。 我们需要为要保护的每项服务启用特定的监狱。

要保护 SSHD 服务,请编辑 jail.local 文件:

nano /etc/fail2ban/jail.local

找出 [sshd] 部分并通过添加以下行来启用它:

[sshd]

enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 10m
findtime = 10m
maxretry = 5

保存并关闭文件,然后重新启动 Fail2ban 以应用更改:

systemctl restart fail2ban

我们现在可以使用以下命令验证 Fail2ban 状态:

systemctl status fail2ban

我们将获得以下输出:

● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-06-28 07:32:46 EDT; 3s ago
     Docs: man:fail2ban(1)
  Process: 3887 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS)
  Process: 3924 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 3925 (fail2ban-server)
    Tasks: 5 (limit: 11409)
   Memory: 17.1M
   CGroup: /system.slice/fail2ban.service
           └─3925 /usr/bin/python3.6 -s /usr/bin/fail2ban-server -xf start

Jun 28 07:32:46 oraclelinux8 systemd[1]: Starting Fail2Ban Service...
Jun 28 07:32:46 oraclelinux8 systemd[1]: Started Fail2Ban Service.
Jun 28 07:32:46 oraclelinux8 fail2ban-server[3925]: Server ready

第 6 步 – 验证 Fail2ban 防火墙

此时,Fail2ban 被配置为保护 SSH 服务。 现在,是时候检查 Fail2ban 是否有效。

首先,使用以下命令验证 jail 配置:

fail2ban-client status

我们应该看到以下输出:

Status
|- Number of jail:	1
`- Jail list:	sshd

现在,转到远程机器并尝试使用错误的密码连接到 SSH 服务器。 达到 maxretry “5” 次后,我们的 IP 地址将被 Fail2Ban 阻止。

现在,使用以下命令检查被 Fail2ban 阻止的 IP 地址:

fail2ban-client status sshd

我们应该得到以下输出:

Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	6
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	10.61.187.115

我们可以使用以下命令检查 Firewalld 添加的规则:

firewall-cmd --list-rich-rules

我们将获得以下输出:

rule family="ipv4" source address="10.61.187.115" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"

我们还可以查看 Fail2ban 日志以获取更多信息:

tail -f /var/log/fail2ban.log

样本输出:

2022-06-27 10:37:21,837 fail2ban.filter         [21186]: INFO    [sshd] Found 10.61.187.115 - 2022-06-27 10:37:21
2022-06-27 10:37:21,859 fail2ban.actions        [21186]: NOTICE  [sshd] Ban 10.61.187.115
2022-06-27 10:37:27,220 fail2ban.filter         [21186]: INFO    [sshd] Found 10.61.187.115 - 2022-06-27 10:37:27

本文记录了, Oracle Linux 8 上使用 Firewalld 安装 Fail2ban。我们还解释了如何使用 Fail2Ban 保护 SSH 服务。 我们现在可以在我们的服务器上实施 Fail2ban 以保护它免受暴力登录攻击。 在 的 VPS 主机上试一试!

© 版权声明
THE END
喜欢就支持一下吧
点赞11分享
评论 抢沙发

请登录后发表评论