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

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

Fail2Ban是一个日志分析实用程序,可扫描各种进程的日志文件,并禁止IP地址出现太多密码错误。如果找到登录尝试,则Fail2Ban会向iptables添加新规则,以暂时或永久阻止攻击者的IP地址。您也可以通过电子邮件发送相同的内容。

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

先决条件

  1. 具有非sudo特权的非root用户的Fedora 33或基于CentOS 8的服务器。

  2. 安装Nano编辑器。用这个。

    $ sudo dnf install nano -y
    

安装Fail2Ban

要在CentOS 8上安装Fail2Ban,必须首先安装EPELYum存储库。

$ sudo dnf install epel-release

Fedora 33包含在Fail 2 Ban中。

运行以下命令以在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/ 目录。

这些配置按以下顺序应用:

  1. /etc/fail2ban/jail.conf
  2. etc/fail2ban/jail.d/*.conf,按字母顺序
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local,按字母顺序

jail.conf 包含 [DEFAULT] 各个部分之后是各个服务的各个部分。可以通过定义in来覆盖这两个部分。 .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 关闭编辑器,然后按 ÿ 如果要求您保存文件。这将设置新的默认值 bantime 将后端更改为所有服务 systemd 启用 `sshd 监狱。

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

$ sudo systemctl restart fail2ban

您可以使用查看新应用的设置 fail2ban-client 效用。

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

另外,您可以通过以下方法了解每个监狱的详细情况。

$ 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列入白名单/忽略该IP,以便它不会被Fail2ban阻止。

[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 使用上述命令中的jail名称编辑设置。

禁止时间和重试次数

共有三种设置,可让您设置禁止重试的时间和次数。

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

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

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

要自定义这些设置,请将以下行粘贴到 etcfail2banjail.local 下方档案 [DEFAULT] 部分。

bantime = 3600
findtime = 300
maxretry = 4

电子邮件提醒

要发送电子邮件警报,您必须首先安装邮件转发代理(MTA)。为了我们的目的,我们将安装 sendmail..

$ sudo dnf install sendmail

要接收电子邮件,请将以下代码添加到 etcfail2banjail.local 下方档案 [DEFAULT] 部分。

destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s

destemail 引用收件人电子邮件ID,这是电子邮件的收件人ID。 sendername 我正在使用Fail2Ban,因为它指的是发件人的名字。 mta 指使用的邮件转发代理。 sendmail 这里。如果您正在使用 Postfix,然后使用值 mail 对于 mta 变量。

action 指检测到入侵时采取的默认操作。默认值为 %(action_)s 这仅禁止用户。 %(action_mw)s 禁止并发送包含Whois报告的电子邮件。另一方面 %(action_mwl)s 禁止Whois报告并发送包含来自相关日志文件的信息的电子邮件。这也可以根据监狱的特定标准进行更改。

设立个别监狱

正如你已经知道的 [DEFAULT] 本部分适用于所有监狱,现在是时候看看一些特定的监狱及其设置。

SSHD监狱

已经定义 [sshd] 在我们的早期 jail.local 文件。您可以使用以下代码对其进行更多自定义。

[sshd]

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

在这种情况下,我们使用预定义的变量 ssh 对于作为默认SSH端口的端口。如果您使用其他SSH端口,则需要对其进行更改。 logpath 指要监视的日志文件的位置。 %(ssh_log)s 使用Fail2ban标准配置文件中定义的值(/etc/fail2ban/paths-common.conf)。

Nginx监狱

Nginx有几个可以与Fail2Ban一起使用的Jails。例如,如果一遍受密码保护的网站的一部分遭到了反复攻击,则可以使用 [nginx-http-auth]jail.local 一个文件。广告

[nginx-http-auth]
enabled = true

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

[nginx-badbots]
enabled  = true

还有其他Nginx Jail,但未使用Fail2Ban进行预配置。它们必须手动创建,并且大多数可以基于Fail2Ban随附的Apache。

Fail2Ban筛选器和Failregex

Fail2Ban配置具有另一个称为过滤器的设置。筛选器确定日志文件中的行是否指示身份验证失败。

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

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

$ ls /etc/fail2ban/filter.d

包含两个Nginx日志文件。 nginx-badbots.confnginx-http-auth.conf..

这些配置文件使用正则表达式(regex)解析日志文件。这些称为Failregex。您可以创建自己的正则表达式以自定义或创建新的过滤器。这些规范表达式不在本教程的讨论范围之内,在此不再详细讨论。

监视Fail2Ban日志和防火墙

您可以使用以下方法检查Fail2Ban的状态: systemctl 正如我之前提到的。

$ sudo systemctl status fail2ban

多一点细节 journalctl 命令。

$ sudo journalctl -b -u fail2ban

也可以使用 fail2ban-client 查询状态 fail2ban-server 或个别监狱。

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

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

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

您可以列出iptables中设置的当前规则。

$ sudo iptables -L

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

$ sudo iptables -S

结论

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

Sidebar