如何安装和配置 Fail2Ban 以保护 Linux 服务器如何安装和配置 Fail2Ban 以保护 Linux 服务器如何安装和配置 Fail2Ban 以保护 Linux 服务器如何安装和配置 Fail2Ban 以保护 Linux 服务器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何安装和配置 Fail2Ban 以保护 Linux 服务器

本详细指南将向您介绍什么是 Fail2Ban、如何配置它以及如何使用它在 Linux 系统上提供额外的安全层。

什么是 Fail2Ban?

如果您启用了 SSH,请检查您的 Linux 服务器的登录历史记录。您会惊讶地发现大量 IP 尝试通过 SSH 登录您的服务器。

如果您没有适当的机制来阻止这些登录尝试,您的系统很容易受到暴力攻击。基本上,脚本/机器人将通过尝试各种用户名和密码组合来继续尝试 SSH 连接您的系统。

这就是 Fail2Ban 这样的工具发挥作用的地方。 Fail2Ban 是一款免费的开源软件,有助于保护您的 Linux 服务器免受恶意登录。如果登录尝试失败一定次数,Fail2Ban 将禁止该 IP(一段时间)。

Fail2Ban 具有开箱即用的基本设置,但它也非常可配置。您可以根据自己的喜好对其进行调整,并根据需要创建过滤器和规则。

听起来不错?为什么不测试 Fail2Ban?阅读并遵循本文的其余部分,并亲自尝试 Fail2Ban。

在 Linux 上安装 Fail2Ban

您可以从所有主要 Linux 发行版的官方存储库中都可以找到 Fail2Ban 的事实来猜测它的受欢迎程度。这使得安装 Fail2Ban 成为一项简单的任务。

在 CentOS 和 Red Hat 上安装 Fail2Ban

您需要成为 root 或 sudo 用户才能在系统上安装新软件。

您需要确保您的系统是最新的并且安装了 EPEL 存储库。

sudo yum update && sudo yum install epel-release

现在您可以使用以下命令安装 Fail2Ban:

sudo yum install fail2ban

在 Ubuntu 和 Debian 上安装 Fail2Ban

首先,确保您的系统已更新:

sudo apt update && sudo apt upgrade -y

现在,使用以下命令安装 Fail2Ban:

sudo apt install fail2ban

了解 Fail2Ban 配置文件

Fail2Ban中有两个主要配置文件:/etc/fail2ban/fail2ban.conf和/etc/fail2ban/jail.conf。让我解释一下他们是做什么的。

/etc/fail2ban/fail2ban.conf:这是 Fail2Ban 守护进程的操作设置的配置文件。此处定义了日志级别、日志文件、套接字和 pid 文件等设置。

/etc/fail2ban/jail.conf:这就是所有魔法发生的地方。您可以在该文件中配置默认禁止时间、禁止 IP 之前的重试次数、白名单 IP、邮件发送信息等。基本上,您可以通过此文件控制 Fail2Ban 的行为。

现在,在您更改这些文件之前,Fail2Ban 建议使用 .local 文件为这些conf 文件制作一个副本。这是因为默认的conf文件可以在更新中被覆盖,并且您将丢失所有设置。

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

现在让我们了解一下jail.conf 文件。如果使用 less 命令来读取这个大文件,可能会显得相当混乱。 conf 文件试图用太多的注释来解释一切。那么,让我为您简化一下。

Jail.conf 文件分为多个服务。有一个[默认]部分,它适用于所有服务。然后您可以看到各种服务及其各自的设置(如果有)。所有这些服务都在括号中。您将看到 [sshd]、[apache-auth]、[squid] 等部分。

如果我删除注释,默认部分如下所示:

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

让我告诉你其中一些参数的含义。

  • bantime:设置禁令的时长。默认值为 10 分钟。

  • findtime:对 IP 执行操作的窗口。默认值为 10 分钟。假设某个 IP 在 10:30 尝试进行错误登录。如果同一IP在10点40分之前达到最大重试次数,则会被封禁。否则,10:40之后的下一次失败尝试将被计为第一次失败尝试。

  • maxretry:采取操作之前重试失败的次数

  • usedns:“警告”设置尝试使用反向 DNS 查找主机名并禁止其使用主机名。将其设置为 no 将禁止 IP,而不是主机名。

  • destemail:警报将发送到的电子邮件地址(需要配置)

  • 发件人:通知邮件中的发件人姓名

  • mta:用于通知电子邮件的邮件传输代理

  • banaction:该参数使用 /etc/fail2ban/action.d/iptables-multiport.conf 文件设置最大失败重试次数后的操作

  • 协议:禁止后将丢弃的流量类型

如果您想对任何监狱(或所有监狱)进行任何更改,例如最大重试次数、禁止时间、查找时间等,您应该编辑jail.local文件。

如何使用 Fail2Ban 保护 Linux 服务器

让我向您展示一些使用 Fail2Ban 强化 Linux 安全性的方法。

请注意,您需要是 root 用户或具有 sudo 访问权限才能运行fail2ban 命令。

在您的服务器上启用 Fail2Ban 并检查所有正在运行的监狱

您可以使用 systemd 命令在 Linux 服务器上启动并启用 Fail2Ban:

systemctl start fail2ban
systemctl enable fail2ban

启用 Fail2Ban 后,您可以使用 failed2ban-client 命令查看状态和活动的监狱:

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

如果您想知道,sshd监狱默认是启用的。

查看 Fail2Ban 日志

Fail2Ban 日志位于 /var/log/fail2ban.log。日志文件采用以下格式:

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

您可以看到,当 IP 超过最大重试阈值时,它会识别并禁止它们。

查看 Fail2Ban 禁止的 IP

一种方法是检查某个监狱的状态。您可以使用 Fail2Ban 客户端来实现此目的。

fail2ban-client status <jail_name>

例如,如果您必须查看 Fail2Ban 禁止的所有不良 ssh 登录,您可以按以下方式使用它。输出将显示失败的尝试总数和被禁止的 IP 总数。

root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

尝试从失败的登录中通过 SSH 登录的系统应该会收到如下错误

ssh: connect to host 93.233.73.133 port 22: Connection refused

如何使用 Fail2Ban 永久禁止 IP

现在您知道 Fail2Ban 对 IP 的禁令是暂时的。默认持续10分钟,攻击者可以在10分钟后尝试再次登录。

这会带来安全风险,因为攻击者可以使用脚本在 10 分钟间隔后尝试登录。

那么,如何使用 Fail2Ban 进行永久封禁?对此没有明确的答案。

从 Fail2Ban 0.11 版本开始,将自动计算禁止时间,并且持久 IP 的禁止时间将呈指数增长。

但如果您检查 Fail2Ban 版本,您可能正在运行 0.10 版本。

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

在早期版本中,您可以使用负禁止时间 (bantime=-1),这相当于永久禁止,但如果您尝试此方法,您可能会看到类似“Starting failure2ban: ERROR NOK: (”数据库磁盘映像格式错误',)'。

一种不太干净的解决方法是将禁令时间增加到 1 天、1 周、1 个月或 1 年。这可以避免该问题,直到您的系统上有新版本为止。

如何解除 Fail2Ban 封锁的 IP

首先检查IP是否被封锁。由于 Fail2Ban 在 iptables 上运行,因此您可以查看 iptable 以查看服务器禁止的 IP:

iptables -n -L

如果被禁止的 IP 太多,您可能必须使用 grep 命令。

如果您在输出中找到指定的 IP 地址,则表明该 IP 地址已被禁止:

因此,下一步就是找出哪个“监狱”正在禁止该 IP。您必须在此处使用 Grep 命令处理fail2ban 日志。

正如您在下面的输出中看到的,该 IP 已被 sshd Jail 禁止。

root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

现在您知道了阻止 IP 的监狱的名称,您可以使用fail2ban-client 取消禁止该 IP:

fail2ban-client set <jail_name> unbanip <ip_address>

如何在 Fail2Ban 中将 IP 列入白名单

如果你禁止自己,那也不是什么好事,对吗?要忽略某个 IP 地址被 Fail2Ban 当前会话禁止,您可以使用如下命令将该 IP 列入白名单:

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

您可以轻松地在 Linux 中找到您的 IP 地址。就我而言,是

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

如果你想永久将IP列入白名单,你应该编辑jail配置文件。转到所述监狱部分并添加ignoreip行,如下所示:

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

如果您想将系统上所有监狱的 IP 列入白名单,最好编辑 /etc/fail2ban/jail.local 文件并在 DEFAULT 部分下添加一行,就像我们上面看到的那样。

您必须重新启动 Fail2Ban 才能使此更改生效。

如何查看监狱的IP白名单

您可以使用以下命令查看监狱列入白名单的所有 IP:

fail2ban-client get <JAIL_NAME> ignoreip

它应该显示该监狱的 Fail2Ban 忽略的所有 IP:

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

如何从 Fail2Ban 白名单中删除 IP

如果要将IP从某个jail的白名单中删除,可以使用以下命令:

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

如果您想永久删除该 IP,您应该编辑 /etc/fail2ban/jail.local 文件。

还有什么?

您可以使用 Fail2Ban 做更多事情。本指南为您提供 Fail2Ban 入门的基础知识。我还没有触及操作、邮件通知、过滤器等主题。

了解 Fail2Ban 基础知识后,您就可以开始探索更多内容。目前,只需使用它并为 Linux 服务器上的 SSH 添加额外的安全层。

©2015-2025 艾丽卡 support@alaica.com