如何在 Linux 上安装和配置 Fail2Ban

9 分钟阅读 - 2026年5月14日

hero section cover
目录
  • 如何在 Linux 上安装和配置 Fail2Ban
  • 先决条件
  • 在 Ubuntu/Debian 上安装 Fail2Ban
  • 配置 Jails
  • 测试与监控
  • 高级配置
分享

在基于 Ubuntu、Debian 和 RHEL 的 Linux 服务器上安装、配置和测试 Fail2Ban 的分步指南。

如何在 Linux 上安装和配置 Fail2Ban

Fail2Ban 会监控服务器日志以检测可疑活动,并通过更新防火墙规则自动封禁违规 IP。它能阻止暴力破解攻击、减少日志冗余,配置完成后将在后台静默运行。本指南涵盖 Ubuntu/Debian 系统的安装、核心配置、jail 设置以及一些值得了解的高级选项。

先决条件

Fail2Ban 可在大多数 Linux 发行版上运行:Ubuntu、Debian、AlmaLinux、CentOS、RHEL、Rocky Linux 和 Fedora。您需要:

  • 系统已安装 Python 3
  • 用于安装软件包和修改防火墙的 root 或 sudo 权限
  • 一个正在运行的防火墙(iptables、nftables、ufw 或 firewalld)
  • 记录登录失败尝试的日志文件/var/log/auth.log 在基于 Debian 的系统上, /var/log/secure 在基于 RHEL 的系统上)

在基于 RHEL 的系统上,请先启用 EPEL 软件源。在安装 Fail2Ban 之前,请通过以下命令确认防火墙正在运行 ufw statussystemctl status firewalld.

在 Ubuntu/Debian 上安装 Fail2Ban

更新软件包并安装 Fail2Ban:

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

启用该服务使其在系统启动时自动运行,然后启动服务:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

将默认配置复制到本地覆盖文件中。请务必编辑 jail.local,而非 jail.conf,以免软件包更新覆盖您的设置:

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

验证所有服务是否正在运行:

sudo systemctl status fail2ban
sudo fail2ban-client status

第一个命令应显示“Active: active (running)”。第二个命令列出您的活动监狱。通过以下命令确认Fail2Ban已在启动时启用: sudo systemctl is-enabled fail2ban.

配置 Jails

默认设置

打开 /etc/fail2ban/jail.local 并调整 [DEFAULT] 部分。除非被覆盖,否则这些设置适用于所有监狱:

参数推荐值功能说明
bantime3600将 IP 地址封禁 1 小时
findtime600在10分钟内统计失败次数
maxretry35触发封禁前的失败次数
ignoreip127.0.0.1/8 ::1从未被封禁的IP

将您自己的管理IP添加到 ignoreip 以免将自己锁在门外。示例: ignoreip = 127.0.0.1/8 ::1 203.0.113.50.

SSH 保护

jail.local:

[sshd]
enabled = true

请确认 logpath 是否指向您发行版的正确日志文件。如果您已将 SSH 移至非标准端口(例如 2222),请更新 port 参数以匹配。

Web 服务器保护

启用与您的 Web 服务器匹配的沙箱:

  • Nginx[nginx-http-auth] 用于身份验证失败, [nginx-botsearch] 针对恶意机器人
  • Apache[apache-auth] 用于身份验证, [apache-badbots] 针对机器人

Recidive Jail

[recidive] 该隔离区会捕获在其他隔离区中屡次被封禁的IP地址,并施加更长的处罚,通常为一周(604,800秒)。这对那些不断变换攻击手段的顽固攻击者非常有效。

修改后,请重新加载:

sudo systemctl restart fail2ban
sudo fail2ban-client status

测试与监控

测试封禁

在生产环境中依赖 Fail2Ban 之前,请先进行测试。从远程机器(非您的管理员 IP)尝试 SSH 登录,直到超过 maxretry。此时您应被封禁。通过以下命令确认:

sudo fail2ban-client status sshd

实时查看封禁情况:

tail -f /var/log/fail2ban.log

若误封了合法IP,请解除封禁:

sudo fail2ban-client set sshd unbanip 203.0.113.50

日常监控

通过 grep 命令查看日志以审查封禁历史:

grep "Ban\|Unban" /var/log/fail2ban.log

有用的管理命令:

命令用途
fail2ban-client status列出所有活跃的监狱
fail2ban-client banned显示所有当前被封禁的 IP 地址
fail2ban-client set <jail> unbanip <IP>解除特定 IP 的封禁
fail2ban-client unban --all清除所有封禁
fail2ban-client set <jail> banip <IP>手动封禁一个IP

封禁状态在重启后仍会保留。Fail2Ban 将其存储在位于 /var/lib/fail2ban/fail2ban.sqlite3.

高级配置

切换至 nftables

nftables 是 iptables 的现代替代方案。它能在单一框架内同时处理 IPv4 和 IPv6,在面对大型封禁列表时具有更好的可扩展性,并内置速率限制功能。如果您使用的是 Ubuntu 22.04 及以上版本、Debian 11 及以上版本或任何新版发行版,这是更优的选择。

配置路径 jail.local:

[DEFAULT]
banaction = nftables-multiport

重启 Fail2Ban,然后通过 sudo nft list ruleset。您应看到 f2b-tablef2b-chain 。仅当您使用旧版系统或存在兼容性要求时,才继续使用 iptables。

电子邮件通知

默认情况下,Fail2Ban 会静默封禁。若要接收电子邮件提醒,请在 [DEFAULT] 部分中 jail.local:

[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)s

The action_mwl 操作会发送一封包含封禁详情、WHOIS 数据以及触发封禁的日志行的电子邮件。若仅需 WHOIS 数据,请使用 action_mw 仅需 WHOIS 数据时请使用。您需要安装 sendmail 等邮件传输代理,或通过 msmtp.

若需通过 Slack 或 Discord 接收警报,请编写一个发送 webhook 的脚本,并通过 /etc/fail2ban/action.d/.

如果您正在寻找一台具备完全 root 权限且带宽不限的服务器来运行 Fail2Ban,请查看 FDC 的专用服务器

background image
您的服务器是否阻碍了您的发展?

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?

立即开启性能

博客

本周特色

更多文章
为什么必须拥有功能强大且不计量的 VPS

为什么必须拥有功能强大且不计量的 VPS

非计费 VPS 以固定端口速度提供固定费率带宽。它与计费计划有何不同,什么时候会有回报,以及购买前需要检查什么。

7 分钟阅读 - 2025年5月9日

Linux 内存管理:交换、OOM 杀手和 Cgroups

12 分钟阅读 - 2026年5月31日

更多文章