Installing and Configuring Fail2ban on Ubuntu
前言
Fail2ban 是免费的开源 IPS(入侵防御软件),可帮助管理员保护 Linux 服务器免受恶意登录和暴力攻击。 Fail2ban 是用 Python 编写的,带有针对 Apache2、SSH、FTP 等各种服务的过滤器。Fail2ban 通过阻止源攻击的 IP 地址来减少恶意登录尝试。
Fail2ban 的工作原理是扫描服务的日志文件 (e.f /var/log/auth.log) 并禁止显示恶意登录尝试的 IP 地址,例如太多不正确的密码、寻求漏洞利用等。Fail2ban 还支持多个防火墙后端,例如 iptables、 ufw 和 firewalld。还允许您为每次被阻止的登录尝试设置电子邮件通知。
在本教程中,我们将向您展示如何安装和配置 Fail2ban 以保护 Ubuntu 22.04 服务器。本指南还涵盖了用于管理 Fail2ban 服务和监狱的 fail2ban-client 的基本命令。
准备
- Ubuntu 服务器 22.04
- 具有 sudo 权限的非根用户。
防火墙
在开始安装 Fail2ban 之前,您需要在 Ubuntu 服务器上设置防火墙。
默认的 Ubuntu 服务器安装带有 UFW 防火墙,它比其他防火墙(如 iptables)更易于管理。
现在使用以下命令检查 UFW 防火墙状态。
1 |
|
如果您收到诸如 \Status: inactive\ 之类的输出消息,则您的 UFW 防火墙尚未启动。但是,如果您收到诸如 \Command ufw not found\ 之类的输出消息,则表明您的服务器上未安装 UFW 防火墙。
要安装 UFW 防火墙包,请运行下面的 apt 命令。
1 |
|
UFW 安装完成后,运行以下命令将 SSH 服务添加到 UFW 防火墙。
1 |
|
接下来,运行以下命令启动并启用 UFW 防火墙。
1 |
|
输入 y 确认并启动 UFW 防火墙。
最后,使用以下命令再次检查 UFW 防火墙。
1 |
|
您可以在下方看到 UFW 防火墙“状态:活动”,防火墙规则中添加了 SSH 端口 22。
安装 Fail2ban
安装和配置 UFW 防火墙后,现在您将在服务器上安装 Fail2ban 包。
运行以下命令来更新和刷新您的 Ubuntu 存储库。
1 |
|
现在使用以下命令安装 Fail2ban 包。
1 |
|
Fail2ban 安装完成后,启用 Fail2ban 服务并使用以下命令启动该服务。
1 |
|
1 |
|
设置开机自动启动
1 |
|
使用以下命令检查 Fail2ban 服务状态。
1 |
|
普通用户到这里就可以了,无须下面的配置
============
配置 Fail2ban(option)
所有 Fail2ban 配置都存储在 /etc/fail2ban 目录中。下面详细的Fail2ban配置你必须要知道:
- 配置fail2ban.conf是Fail2ban的主要配置。
- 配置jail.conf 是Fail2ban 监狱配置的一个例子。
- action.d 目录包含 fail2ban 操作设置,例如邮件设置和防火墙设置。
- 目录 jail.d 包含 fail2ban jail 的额外配置。
要开始配置 Fail2ban,您需要使用以下命令将默认监狱配置 jail.conf 复制到 jail.local。
1 |
|
现在使用 nano 编辑器编辑配置 jail.local。
1 |
|
首先,取消注释 ignoreip 选项并添加您的 IP 地址。 ignoreip 选项内的所有 IP 地址都不会被 Fail2ban 阻止。
1 |
|
于禁止设置,您可以根据需要更改配置。在这个例子中,global bantime 为 1day,findtime 为 10minutes,maxretry 为 5 次。
bantime选项是IP地址将被禁止访问服务器的时间。 findtime 选项是禁止操作之前失败次数之间的持续时间。而 maxretry 选项是 IP 地址被禁止的失败次数。
1 |
|
Fail2ban 的默认操作只是禁止 IP 地址。但您也可以在 IP 地址被禁止时设置邮件通知。
如下更改操作选项并更改默认发件人和目标邮件地址。
1 |
|
接下来,对于 UFW 防火墙集成,您需要将 banaction 选项更改为 ufw,如下所示。
1 |
|
最后,对于监狱配置。此部分是您添加服务并使用 fail2ban 保护它的地方。
在此示例中,我们将为 SSH 服务启用监狱,但我们也会覆盖 sshd 监狱的全局默认配置。 bantime 将是 1 周,最大失败重试次数为 3 次,查找时间为 10 分钟。
1 |
|
完成后保存并关闭文件。
现在运行以下命令重新启动 Fail2ban 服务并将新更改应用于 jail.local 配置。
1 |
|
您现在已经完成了 Fail2ban 配置,启用了电子邮件通知并启用了 sshd 监狱以保护 SSH 服务。
使用 Fail2ban-client 验证 Fail2ban 状态
ail2ban 提供了一个命令行 fail2ban-client 用于与 Fail2ban 服务进行交互。这允许您从命令行管理和配置 Fail2ban,还允许您管理 Fail2ban 监狱。
要验证 fail2ban 安装和配置,请运行以下命令的 fail2ban-client。
1 |
|
如果您收到诸如“服务器回复:pong”之类的输出消息,这意味着 Fail2ban 正在正常运行。
接下来,运行下面的 fail2ban-client 命令来检查 sshd jail 的状态。
1 |
|
下面你可以看到 sshd jail 的详细状态。这包括 SSH 服务的日志文件和 sshd jail 上被禁止的 IP 地址列表。
现在如果你想获得 sshd 监狱的详细配置,你可以使用 fail2ban-client 命令如下。
检查 sshd jail 的 bantime 配置。您将在几秒钟内获得 bantime 的输出。
1 |
|
检查 sshd jail 的 maxrtey 配置。你会看到这里的 maxretry 是 3,因为它被全局配置覆盖了,也就是 maxrety 5 次。
1 |
|
对于sshd jail中的banaction,可以使用以下命令。并且您应该将 ufw 的输出作为 sshd jail 的默认禁令。
1 |
|
对于此处的查找时间,您还将看到 sshd 监狱的覆盖值。此处的输出也将采用秒格式。
1 |
|
最后,您还可以使用以下命令检查 sshd jail 的默认 ignoreip。你会看到 ignoreip 与全局 Fail2ban 配置具有相同的值。
1 |
|
使用 Fail2ban-client 禁止和取消禁止 IP
关于 Fail2ban 的另一个重要事项是如何在 Fail2ban 上禁止和取消禁止 IP 地址。为此,您还可以使用 fail2ban-client 命令。
要在 sshd jail 上手动禁止 IP 地址,您可以使用下面的 fail2ban-client 命令。将 IP 地址更改为您要禁止的 IP 地址。
1 |
|
要从 sshd jail 中解禁 IP 地址,您可以使用下面的 fail2ban-client 命令。请务必将 IP 地址更改为您要取消禁止的 IP 地址。
1 |
|
现在,在您手动禁止 IP 地址或取消禁止 IP 地址后,您可以使用下面的 fail2ban-client 命令进行验证。
1 |
|
如果您手动禁止某个 IP 地址,请确保该 IP 地址在禁止 IP 地址列表中可用。但是,如果您取消禁止某个 IP 地址,请确保该 IP 地址从禁止 IP 地址列表中消失。
配置Fail2ban telegram 机器人通知
创建Telegram 机器人为关注@Botfather
,按提示操作即可,
可查找机器人Token,添加@userinfobot
查找自己聊天ID
在/etc/fail2ban/action.d/telegram.conf 文件并写入
1 |
|
在/etc/fail2ban/scripts/send_telegram_notif.sh脚本文件写入
1 |
|
给send_telegram_notif.sh脚本添加可执行权限
1 |
|
修改目录:/etc/fail2ban/jail.local配置文件,将启用的jail的action下添加一个telegram,如下
1 |
|
重启fail2ban验证
1 |
|
正常情况下,telegram可以接收通知了。
常用命令
激活fail2ban
1 |
|
1 |
|
检测生效脚本
1 |
|
检查启动状态
1 |
|
查看指定 Jail 规则下被封禁的IP情况
1 |
|
封禁/解封限制IP
1 |
|
1 |
|
添加/解除指定IP的忽略
1 |
|
验证自定义规则
1 |
|
LOG
为需要匹配的日志文件路径,REGEX
为正则表达式所在的文件路径(通常位于filter.d
文件夹内)以下为常用的
OPTIONS
1
2
3
4
5
6
7
8
9
10
11
12
13
14// Do not print any missed lines
--print-no-missed
// Do not print any ignored lines
--print-no-ignored
// Print all matched lines
--print-all-matched
// Print all missed lines, no matter how many
--print-all-missed
// Print all ignored lines, no matter how many
--print-all-ignored
查看fail2ban的日志
1 |
|
感谢
- Fail2ban
- 如何在 Ubuntu 22.04 上安装和配置 Fail2ban
- Chatgpt代码修正