暴露给互联网的所有服务器都有遭受恶意软件攻击的风险。 例如,如果您有连接到互联网的软件,则攻击者可以利用蛮力尝试来访问应用程序。

Fail2ban是一个开源工具,可以通过监视服务日志中的恶意活动来帮助你保护Linux免受暴力攻击和其他自动攻击。它使用正则表达式来扫描日志文件。将对所有与模式匹配的记录进行计数,并且当它们的数量达到某个预定义的阈值时。

Fail2ban会在指定时间段内禁止有问题的IP。 默认使用系统防火墙阻止该IP的访问。 禁止期限到期后,IP地址将从禁止列表中删除。

本教程介绍了如何在Debian 10上安装和配置Fail2ban。包括将IP地址列入白名单,bantimefindtimemaxretry选项说明,开启电子邮件通知,以sshd服务作为示例启用Jail检测,使用Fail2ban客户端fail2ban-client 检查sshd服务的状态,禁止或者取消被限制的IP。

安装Fail2ban

Fail2ban包含在默认的Debian 10存储库中。 要安装它,请以具有sudo权限的用户运行以下apt命令

sudo apt update
sudo apt install fail2ban

安装完成后,Fail2ban服务将自动启动。 您可以通过检查服务状态来验证它:

sudo systemctl status fail2ban

输出将如下所示:

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-08-19 06:16:29 UTC; 27s ago
       Docs: man:fail2ban(1)
   Main PID: 1251 (f2b/server)
      Tasks: 5 (limit: 1079)
     Memory: 13.8M
     CGroup: /system.slice/fail2ban.service
             └─1251 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

至此,您已在Debian 10服务器安装并运行Fail2Ban。

Fail2ban配置

Fail2ban在安装时会创建两个默认的配置文件/etc/fail2ban/jail.d/defaults-debian.conf/etc/fail2ban/jail.conf。我们不建议直接修改这些文件,因为更新Fail2ban时它们可能会被覆盖。

Fail2ban将按以下顺序读取配置文件。每个.local文件都会覆盖.conf文件中的设置:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

每个.local文件都会覆盖.conf文件中的设置。配置Fail2ban的最简单方法是将jail.conf复制到jail.local并修改.local文件。你也可以从头开始构建.local配置文件。

.local文件不必包含.conf文件中的所有设置,只需包含您要覆盖的设置即可。使用以下cp命令。从默认的jail.conf文件创建一个.local配置文件:

sudo cp /etc/fail2ban/jail.{conf,local}

要开始配置Fail2ban服务器,请使用你喜欢的文本编辑器打开jail.local文件,在本教程我们将使用vim打开文件

sudo vim /etc/fail2ban/jail.local

该文件包含了说明每个配置选项的注释。 在此示例中,我们将更改基本的设置。

将IP地址列入白名单

白名单,顾名思义就是不会从这些IP检测是否是恶意的访问。如需你要创建白名单,可以将IP地址或者IP范围添加到ignoreip指令中。

在这里,您应该添加您的本地计算机IP地址以及您要列入白名单的所有计算机。取消以ignoreip开头的行注释,并添加您的IP地址,以空格分隔:

ignoreip = 127.0.0.1/8 ::1 123.123.123.123 192.168.1.0/24
/etc/fail2ban/jail.local

设置紧张时间与重试次数

bantimefindtimemaxretry选项的值定义了禁止时间和禁止条件。bantime是禁止持续的时间。如果未指定后缀,则默认为秒。默认情况下,bantime值设置为10分钟。通常,大多数用户都希望设置更长的禁止时间。你也可以根据您的喜好更改值bantime的值,要永久禁止IP,请使用负数:

bantime  = 1d
/etc/fail2ban/jail.local

findtime是设置失败次数之间的持续时间。 例如,如果将Fail2ban设置为在尝试五次失败后禁止IP(请参见下文maxretry),则这些失败必须在findtime时间内发生,即10分钟完成5次失败的尝试。

findtime  = 10m
/etc/fail2ban/jail.local

maxretry是允许IP失败尝试次数。 默认值设置为5,对于大多数用户来说应该够用。

maxretry = 5
/etc/fail2ban/jail.local

电子邮件通知

Fail2ban可以在IP被禁止时发送电子邮件警报。 要接收电子邮件,您需要在服务器上安装SMTP并更改默认的action,该action操作仅将IP禁止为%(action_mw)s,如下所示:

action = %(action_mw)s
/etc/fail2ban/jail.local

%(action_mw)s将禁止有问题的IP,并发送包含Whois报告的电子邮件。 如果要在电子邮件中包含相关日志,请将操作设置为%(action_mwl)s。您还可以调整发送和接收电子邮件地址:

destemail = [email protected]

sender = [email protected]
/etc/fail2ban/jail.local

Fail2ban Jail

Fail2ban使用Jail的概念,jail直接翻译就是囚牢。 Jail描述如何检测服务的条件。其中服务是系统的任意服务,比如sshd服务,Vsftpd服务等。条件是包括过滤器和操作。计算符合搜索模式的日志记录,并在满足预定条件时执行相应的操作。

Fail2ban附带许多Jail作为示例,系统每一项服务都可以找到对应Jail配置。 您还可以创建自己的Jail配置。默认情况下,在CentOS 8上没有启用Jail。 要启用Jail,您需要在添加enabled = true。 以下示例显示了如何为sshd服务启用Jail:

[sshd]
enabled   = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
/etc/fail2ban/jail.local

每次修改配置文件时,都必须重新启动Fail2ban服务,以使更改生效:

sudo systemctl restart fail2ban

Fail2ban客户端

Fail2ban附带了一个名为fail2ban-client的命令行工具,可用于与Fail2ban服务进行交互。要查看fail2ban-client命令的所有可用选项,请使用-h选项调用:

fail2ban-client -h

此工具可用于禁止/取消已被禁止的IP地址,更改设置,重新启动服务等等。 以下是一些示例。

检查sshd服务的状态

sudo fail2ban-client status sshd

删除已被限制IP

sudo fail2ban-client set sshd unbanip 23.34.45.56

禁止已被限制的IP

sudo fail2ban-client set sshd banip 23.34.45.56

结论

我们向您展示了如何在Debian 10上安装和配置Fail2ban。有关此主题的更多信息,请访问Fail2ban文档。如果您有任何疑问,请随时在下面发表评论。