网站搜索

如何使用 Fail2ban 保护您的 Linux 服务器


在管理 Linux 服务器时,提高服务器安全性应该是您的首要任务之一。通过检查服务器日志,您可能经常会发现暴力登录、网络洪水、漏洞利用搜索等不同的尝试。

使用fail2ban等入侵防御软件,您可以检查服务器日志并添加额外的 iptables 规则来阻止有问题的 IP 地址。

另请阅读:如何在 CentOS/RHEL 8 上安装 Fail2Ban 来保护 SSH

本教程将向您展示如何安装 fail2ban 并设置基本配置以保护您的 Linux 系统免受暴力攻击。

要求

Fail2ban 是用 python 编写的,唯一的要求是安装 python:

  • Fail2ban 分支 0.9.x 需要 Python >=2.6 或 Python >=3.2
  • Fail2ban 分支 0.8.x 需要 Python >=2.4
  • 对您系统的 root 访问权限
  • 可选,iptables 或 showewall 和 sendmail

如何在 Linux 系统中安装 Fail2Ban

fail2ban的安装相对容易:

在 CentOS/RHEL 上安装 Fail2Ban

首先,更新您的软件包,启用 Epel 存储库并安装 fail2ban,如图所示。

yum update
yum install epel-release
yum install fail2ban

在 Debian/Ubuntu 上安装 Fail2Ban

首先,更新您的软件包并安装 fail2ban,如图所示。

apt-get update && apt-get upgrade -y
apt-get install fail2ban

或者,如果您希望启用邮件支持(用于邮件通知),您可以安装 sendmail。

yum install sendmail                   [On CentOS/RHEL]
apt-get install sendmail-bin sendmail  [On Debian/Ubuntu]

要启用 fail2bansendmail,请使用以下命令:

systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail

如何在 Linux 系统中配置 Fail2ban

默认情况下,fail2ban 使用首先读取的 /etc/fail2ban/ 中的 .conf 文件。但是,这些可以被位于同一目录中的 .local 文件覆盖。

因此,.local 文件不需要包含 .conf 文件中的所有设置,而只需包含您希望覆盖的设置。更改应在 .local 文件中进行,而不是在 .conf 中进行。这将防止在升级fail2ban数据包时覆盖更改。

出于本教程的目的,我们将现有的 fail2ban.conf 文件复制到 fail2ban.local

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

现在,您可以使用您喜欢的文本编辑器在 .local 文件中进行更改。您可以编辑的值有:

  • 日志级别 – 这是要记录的详细级别。可能的选项有:

    • 批判的
    • 错误
    • 警告
    • 注意
    • 信息
    • 调试
  • logtarget – 将操作记录在特定文件中。默认值为/var/log/fail2ban.log。但是,您可以将其更改为:

    • STDOUT – 输出任何数据
    • STDERR – 输出任何错误
    • SYSLOG – 基于消息的日志记录
    • 文件——输出到文件
  • socket – 套接字文件将放置的目录。
  • pidfile – pid 文件的位置。

配置Fail2ban jam.local

fail2ban 中最重要的文件之一是jail.conf,它定义了您的监狱。您可以在此处定义应启用fail2ban 的服务。

正如我们之前提到的,.conf 文件可以在升级过程中更改,因此您应该创建一个 jail.local 文件,在其中应用您的修改。

另一种方法是简单地复制 .conf 文件:

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

如果您使用 CentOSFedora,您需要将 jail.local 中的后端“自动”“systemd”

如果您使用Ubuntu/Debian,则无需进行此修改,即使它们也使用systemd

该监狱文件将默认为 DebianUbuntu 启用 SSH,但在 CentOS 上则不会。如果您想启用它,只需更改 /etc/fail2ban/jail.local 中的以下行:

[sshd]
enabled = true
禁止和重试次数

您可以配置 IP 地址被阻止的情况。为此,fail2ban 使用bantimefindtimemaxretry

  • 禁止时间 – 这是 IP 地址保持禁止状态的秒数(默认10 分钟)。
  • findtime – 在主机被禁止之前登录尝试之间的时间间隔。 (默认10 分钟)。换句话说,如果fail2ban设置为在3次登录尝试失败后阻止IP地址,则这3次尝试必须在findtime期间内完成(10< 分钟)。
  • maxretry – 应用禁令之前的尝试次数。 (默认3)。
白名单IP地址

当然,您需要将某些 IP 地址列入白名单。要配置此类 IP 地址,请使用您喜欢的文本编辑器打开 /etc/fail2ban/jail.local 并取消注释以下行:

ignoreip = 127.0.0.1/8  ::1

然后,您可以输入您想要忽略的 IP 地址。 IP 地址应以空格或逗号分隔。

电子邮件提醒

如果您希望在事件发生时收到邮件警报,则必须在 /etc/fail2ban/jail.local 中配置以下设置:

  • destemail – 邮件地址,您将在其中收到通知。
  • 发件人姓名 – 您在收到邮件时看到的发件人。
  • 发件人 –fail2ban 将发送电子邮件的电子邮件地址。

默认的mta邮件传输代理)设置为sendmail

为了接收邮件通知,您还需要更改“操作”设置:

Action = %(action_)s

对于其中之一:

action = %(action_mw)s
action = %(action_mwl)s
  • %(action_mw)s – 将禁止主机并发送包含 whois 报告的邮件。
  • %(action_mwl)s – 将禁止主机,提供 whois 信息以及日志文件中的所有相关信息。

附加 Fail2ban Jail 配置

到目前为止,我们已经了解了基本的配置选项。如果您想配置监狱,则需要在 jail.local 文件中启用它。语法非常简单:

[jail_to_enable]
. . .
enabled = true

您应该将 jail_to_enable 替换为实际的监狱,例如 “sshd ”。在 jail.local 文件中,将为 ssh 服务预定义以下值:

[sshd]

port = ssh
logpath = %(sshd_log)s

您可以启用过滤器,这将有助于识别日志中的一行是否失败。过滤器值实际上是对服务名称后跟 .conf 的文件的引用。例如:/etc/fail2ban/filter.d/sshd.conf

语法是:

filter = service

例如:

filter = sshd

您可以查看以下目录中的现有过滤器:/etc/fail2ban/filter.d/

使用fail2ban客户端

Fail2ban 附带一个客户端,可用于检查和更改当前配置。由于它提供了许多选项,您可以通过以下方式阅读其手册:

man fail2ban-client 

在这里您将看到一些可以使用的基本命令。要查看 fail2ban 或特定监狱的当前状态,您可以使用:

fail2ban-client status

结果将类似于:

对于个人监狱,您可以运行:

fail2ban-client status sshd

在下面的屏幕截图中,您将看到我故意多次登录失败,因此fail2ban可以阻止我尝试连接的IP地址:

结论

Fail2ban 是一个优秀的、记录齐全的入侵防御系统,它为您的 Linux 系统提供额外的安全性。它需要一些时间来习惯它的设置和语法,但是一旦你熟悉它,你就可以随意更改和扩展它的规则。