如何配置 Fail2ban 来保护您的 Linux 服务器

最后更新: 九月3, 2026

IT 专业人员在现代化数据中心使用笔记本电脑工作,非常适合介绍服务器安全。

将 Linux 服务器暴露在网络中,就好比放置了一块吸引机器人的磁铁。如果您没有配置任何安全措施,您的日志中可能已经记录了成千上万次的登录失败尝试;不断有自动化程序尝试各种用户名和密码组合,试图通过暴力破解攻击来控制您的机器。

这时 Fail2ban 就派上用场了,它就像一个不知疲倦的守卫者。严格来说,它并非防火墙,而是通过分析系统日志来阻止入侵。一旦检测到有人试图强行闯入,它就会使用 iptables 或 nftables 等工具屏蔽其 IP 地址,从而将入侵者拒之门外。接下来,我们将介绍如何配置它,让你的服务器固若金汤。

Fail2ban究竟是什么?它是如何工作的?

简而言之,Fail2ban 是一个守护进程,它会持续监控您服务的日志文件。当它发现符合预定义规则(称为过滤器)的可疑模式时,就会开始统计失败次数。如果某个 IP 地址在一定时间内达到允许的尝试次数上限,程序就会执行相应的操作,通常是将该 IP 地址添加到防火墙的黑名单中。

这些配置被组织成所谓的“监狱”(jail)。监狱本质上是一组应用于特定服务(例如 SSH、Apache 或 MySQL)的规则。这样,您可以对远程访问设置非常严格的策略,而对 Web 服务器设置更宽松的策略,从而确保入侵者被自动阻止,而无需您每五分钟手动检查一次日志。

  Linux 的最佳 Web 资源:完整指南

网络攻击的标志,图中一人手持黑客面具,旁边是 Linux 服务器机架。

根据您的 Linux 发行版进行安装

根据您使用的系统不同,安装命令略有差异,但几乎所有官方存储库中通常都有提供。

  • 在 Ubuntu 和 Debian 系统上: 很简单,你只需要运行 sudo apt update 接下来 sudo apt install fail2ban.
  • 在 Rocky Linux 或 AlmaLinux 系统上: 由于这些是企业版发行版,您必须首先启用 EPEL 存储库。 sudo dnf install epel-release 然后使用以下命令安装软件包 sudo dnf install fail2ban fail2ban-firewalld.
  • 在 Alpine Linux 系统中: 使用 APK 管理器 sudo apk add fail2ban 而且,由于它使用 OpenRC,因此您必须启用它。 sudo rc-update add fail2ban default 并以……开始 sudo rc-service fail2ban start.

数据中心服务器机架的专业细节图,蓝色灯光代表服务器基础设施。

主配置:.local 文件的秘密

一个非常常见的错误是直接编辑文件。 jail.conf千万别这么做!系统更新时,该文件可能会被覆盖。正确的做法是创建一个名为 `.txt` 的副本。 jail.local您在第二个文件中添加的任何参数都将优先于原始文件,您的更改将被覆盖。 免受更新影响.

首先,您可以使用以下命令克隆原始文件: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 然后用你喜欢的编辑器打开它,例如 nano 或 vim。在“部分”中 [默认] 在这里,您需要定义系统的整体行为:

  • 禁令时间: 恶意 IP 地址冻结的时间长度。单位可以是秒,也可以用“m”表示分钟(例如,10m)。
  • 查找时间: Fail2ban 检查错误的时间间隔。如果某人在一小时内失败 5 次,但检查时间为 10 分钟,则不会被封禁。
  • 最大重试次数: 系统提示之前允许的失败尝试次数 够了,封禁该IP地址。.
  • 忽略 IP: 避免被封禁至关重要。您必须在此处输入您的 公用IP地址 或者您的 VPN 范围。
  资质认证:提升个人形象的完整指南

光纤网络电缆连接到企业服务器的特写镜头,展示了网络连接性和安全性。

逐步保护特定服务

完成常规设置后,就可以激活您最关心的服务的隔离区了。为了使保护措施生效,您必须进行以下设置。 enabled = true 在其各自的章节中 jail.local.

SSH 访问(最关键的一点)

端口 22 是首要目标。一个稳健的配置将定义 maxretry = 3bantime = 3600 (一小时)。Fail2ban 将读取该文件。 /var/log/auth.log (在 Debian/Ubuntu 系统上) /var/log/secure (在 CentOS/RHEL 上)检测身份验证失败并关闭攻击者的访问权限。

Web服务器(Apache和Nginx)

如果您拥有网站或在线商店,机器人会尝试访问敏感路径,例如: /wp-admin o /login.php您可以在以下位置创建自定义筛选器: /etc/fail2ban/filter.d/ 检测这些模式。例如,为了 保护 WordPress监控 403 错误或失败尝试 wp-login.php如果 IP 地址超过 Apache 或 Nginx jail 中设置的限制,则将其屏蔽。

数据库和FTP

对于 MySQL,您可以监控该短语的错误日志。 用户访问被拒绝对于 FTP(例如 ProFTPD),确保以下几点至关重要: logpath 请确保日志文件的实际路径与 Fail2ban 的日志文件路径一致,因为如果 Fail2ban 找不到日志文件,则保护功能将无法正常工作。

使用 fail2ban-client 进行高级管理

您并非总是需要编辑文件并重启服务才能进行快速更改。该命令 fail2ban-client 它允许您通过控制台即时管理系统。

要查看哪些监狱处于活动状态以及有多少 IP 地址被阻止,请使用 sudo fail2ban-client status如果您想深入了解某项服务(例如 SSH),请运行 sudo fail2ban-client status sshd此外,如果因疏忽而导致 您已屏蔽一位同事 或者,您可以使用以下命令快速自行释放 IP 地址。 sudo fail2ban-client set sshd unbanip IP_A_DESBLOQUEAR.

维护和故障排除

如果您发现 Fail2ban 没有按预期进行阻止,首先应该查看该工具自身的日志文件。 /var/log/fail2ban.log。 使用 tail -f 您可以实时查看哪些人被禁言以及原因。

  Chrome 远程桌面:个人电脑的终结?

请记住,Fail2ban 会将锁定状态存储在 SQLite 数据库中。 /var/lib/fail2ban/fail2ban.sqlite3因此,如果您重启服务器,被封禁的 IP 地址将被解封。 将继续处于封锁状态 直到您的处罚期结束。每当您更改配置文件时,请务必使用以下命令应用更改: sudo systemctl restart fail2ban.

部署此工具可将您的服务器从易受攻击的目标转变为自动化堡垒,通过在网络层拦截恶意流量来降低 CPU 负载,让您高枕无忧,因为您无需担心僵尸网络无法通过暴力破解入侵。通过结合使用 .local 文件、管理特定 jail 以及持续的日志监控,您可以构建一个纵深防御系统,这对于任何 Linux 系统管理员来说都至关重要。