如何在 CentOS 8 和 Fedora 33 上安装和配置 Fail2Ban如何在 CentOS 8 和 Fedora 33 上安装和配置 Fail2Ban如何在 CentOS 8 和 Fedora 33 上安装和配置 Fail2Ban如何在 CentOS 8 和 Fedora 33 上安装和配置 Fail2Ban
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

如何在 CentOS 8 和 Fedora 33 上安装和配置 Fail2Ban

发表 admin at 2025年2月28日
类别
  • 未分类
标签

本教程适用于这些操作系统版本

  • 中央操作系统 8
  • 中央操作系统 7

在此页

  1. 先决条件
  2. 安装 Fail2Ban
  3. 配置 Fail2Ban
    1. 配置jail.local
    2. 更多设置
    3. 白名单 IP
    4. 禁止时间和重试次数
    5. 电子邮件提醒

    1. SSHD 监狱
    2. Nginx 监狱

    Fail2Ban 是一个日志解析实用程序,它扫描各种进程的日志文件并禁止密码失败次数过多的 IP 地址。当尝试登录时,Fail2Ban 将向 iptables 添加新规则以暂时或永久阻止攻击者的 IP 地址。它还可以通过电子邮件提醒您。

    它主要专注于通过 SSH 检测入侵,但它可以配置为与任何使用日志文件的服务一起使用。

    先决条件

    1. A Fedora 33 or a CentOS 8 based server with a non-root user with sudo privileges.

    2. Install Nano editor because that's what we will use.

      $ sudo dnf install nano -y
      

    安装 Fail2Ban

    要在 CentOS 8 上安装 Fail2Ban,您需要先安装 EPEL Yum 存储库。

    $ sudo dnf install epel-release
    

    Fedora 33 附带 Fail2Ban。

    运行以下命令在 Fedora 33 和 CentOS 8 上安装 Fail2Ban。

    $ sudo dnf install fail2ban
    

    安装后,我们需要启用该服务。

    $ sudo systemctl enable fail2ban
    

    接下来,启动 fail2ban 服务。

    $ sudo systemctl start fail2ban
    

    您现在可以检查服务的状态,看它是否正常工作。

    $ sudo systemctl status fail2ban
    ? fail2ban.service - Fail2Ban Service
         Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
         Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
           Docs: man:fail2ban(1)
        Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
       Main PID: 19032 (f2b/server)
          Tasks: 3 (limit: 1125)
         Memory: 11.0M
            CPU: 96ms
         CGroup: /system.slice/fail2ban.service
                 ??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
    
    Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
    Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
    Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
    

    配置 Fail2Ban

    Fail2Ban 服务将其配置文件保存在 /etc/fail2ban 目录中。您会在其中遇到一个文件 jail.conf。该文件通常在软件包升级期间被覆盖,因此不应对其进行编辑。

    相反,所有配置都应该在一个我们称之为 jail.local 的新文件中完成。这两个文件中的设置可以通过 /etc/fail2ban/jail.d/ 目录中的文件进一步覆盖。

    配置按以下顺序应用:

    <开始>

  4. /etc/fail2ban/jail.conf
  5. etc/fail2ban/jail.d/*.conf,按字母顺序
  6. /etc/fail2ban/jail.local
  7. /etc/fail2ban/jail.d/*.local,按字母顺序

jail.conf 包含一个 [DEFAULT] 部分,后面是各个服务的部分。这些部分中的任何部分都可以通过在 .local 文件中定义来覆盖。

配置jail.local

我们将创建一个新的 jail.local 文件。

$ sudo nano /etc/fail2ban/jail.local

将以下代码粘贴到其中。

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd

[sshd]
enabled = true

按 Ctrl + X 关闭编辑器,并在提示保存文件时按 Y。这将为所有服务设置一个新的默认 bantime,将后端更改为 systemd 并启用 \sshd jail。

重新启动 Fail2ban 以实施新更改。

$ sudo systemctl restart fail2ban

我们可以使用 fail2ban-client 实用程序确认新应用的设置。

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

我们也可以通过以下方式具体获取各个jail的详细状态。

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

更多设置

jail.conf 提供了更多可以使用 /jail.local 文件自定义的设置。接下来我们将检查一些设置。

白名单IP

您可以使用以下代码将 IP 列入白名单/忽略被 Fail2ban 阻止的 IP。

[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89

如果你只想将某些监狱的 IP 列入白名单,你可以通过 fail2ban-client 来实现。

$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89

将上述命令中的 JAIL 替换为您要为其编辑设置的监狱名称。

禁止时间和重试次数

有 3 个设置可以设置禁令的时间和重试次数。

bantime - 是 IP 被禁止的时间长度(以秒为单位)。要设置永久禁止,请将此值设置为负数。默认值为 10 分钟或 600 秒。

findtime - 是在设置禁令之前登录尝试之间的时间长度。该值始终为秒数。例如,如果 Fail2ban 设置为在 5 次登录尝试失败后禁止 IP,则这 5 次尝试必须在设置的 10 分钟 bantime 限制内发生。

maxretry - 是在实施禁令之前从单个 IP 地址重试的次数。默认值为 3。

要自定义这些设置,请将以下行粘贴到 [DEFAULT] 部分下的 tc ail2ban\jail.local 文件中。

bantime = 3600
findtime = 300
maxretry = 4

电子邮件提醒

要发送电子邮件提醒,您需要先安装邮件传输代理 (MTA)。出于我们的目的,我们将安装 sendmail。

$ sudo dnf install sendmail

要接收电子邮件,请在 [DEFAULT] 部分下的 tc ail2ban\jail.local 文件中添加以下代码。

destemail = 
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s

destemail 指的是目标电子邮件 ID,这是您要在其中接收邮件的 ID,sendername 指的是发件人的姓名,因此我们为此使用 Fail2Ban。 mta 是指正在使用的邮件传输代理,这里是sendmail。如果您使用的是 Postfix,则为 mta 变量使用值 mail。

action 是指一旦检测到入侵就会执行的默认操作。默认值是 %(action_)s,它只禁止用户。 %(action_mw)s 将禁止并发送带有 Whois 报告的电子邮件;而 %(action_mwl)s 将禁止并发送一封电子邮件,其中包含 Whois 报告以及相关日志文件中的信息。这也可以在特定于监狱的基础上进行更改。

个别监狱的设置

正如我们已经知道的,[DEFAULT] 部分适用于所有 Jail,是时候研究一些特定的 Jail 及其设置了。

SSHD监狱

我们之前已经在 jail.local 文件中定义了 [sshd]。我们可以通过以下代码对其进行更多自定义。

[sshd]

enabled = true
port = ssh
logpath = %(ssh_log)s

在这种情况下,我们使用预定义变量 ssh 作为默认 SSH 端口的端口。如果您使用不同的 SSH 端口,您应该更改它。 logpath 是指要监视的日志文件的位置。 %(ssh_log)s 使用 Fail2bans 标准配置文件 (/etc/fail2ban/paths-common.conf) 中定义的值。

Nginx 监狱

Nginx 有几个 Jails 可以在 Fail2Ban 中使用。例如,如果您站点的密码保护部分反复受到攻击,您可以使用 jail.local 文件中的 [nginx-http-auth] 部分。

[nginx-http-auth]
enabled = true

我们还可以添加一个名为 [nginx-botsearch] 的部分来停止对不存在的文件夹或位置的请求。

[nginx-badbots]
enabled  = true

还有其他 Nginx 监狱,但它们没有预先配置 Fail2Ban。它们需要手动创建,其中大部分可以基于 Fail2Ban 附带的 Apache。

Fail2Ban 过滤器和 Failregex

Fail2Ban 配置中还有另一个设置称为过滤器。过滤器决定日志文件中的一行是否表示身份验证失败。

配置文件中的过滤器值是对位于 /etc/fail2ban/filter.d 目录中的文件的引用,其 .conf 扩展名已删除。

您可以通过检查目录来查看可用的过滤器类型。

$ ls /etc/fail2ban/filter.d

您将在其中看到 2 个 Nginx 日志文件; nginx-badbots.conf 和 nginx-http-auth.conf。

这些配置文件使用正则表达式(regex)来解析日志文件。这些被称为 Failregex。您可以通过编写自己的正则表达式来自定义或创建新的过滤器。我们不会深入介绍这些正则表达式,因为它们超出了本教程的范围。

监控 Fail2Ban 日志和防火墙

如前所述,您可以使用 systemctl 检查 Fail2Ban 的状态。

$ sudo systemctl status fail2ban

要获得更多细节,您可以使用 journalctl 命令。

$ sudo journalctl -b -u fail2ban

您还可以使用 fail2ban-client 查询 fail2ban-server 或个人监狱的状态。

$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name

您还可以查询 Fail2bans 日志文件。

$ sudo tail -F /var/log/fail2ban.log

您可以列出当前为 iptables 配置的规则。

$ sudo iptables -L

您还可以以反映启用这些规则所需的命令的格式列出 iptables 规则。

$ sudo iptables -S

结论

我们关于在基于 Fedora 33 或 CentOS 8 的服务器上安装和配置 Fail2Ban 的教程到此结束。如果您有任何问题,请在下面的评论中发表。

©2015-2025 Norria support@alaica.com