如何在 Linux 上安装和配置 Fail2Ban
9 分钟阅读 - 2026年5月14日

在基于 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 status 或 systemctl 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] 部分。除非被覆盖,否则这些设置适用于所有监狱:
| 参数 | 推荐值 | 功能说明 |
|---|---|---|
bantime | 3600 | 将 IP 地址封禁 1 小时 |
findtime | 600 | 在10分钟内统计失败次数 |
maxretry | 3 至 5 | 触发封禁前的失败次数 |
ignoreip | 127.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-table 和 f2b-chain 。仅当您使用旧版系统或存在兼容性要求时,才继续使用 iptables。
电子邮件通知
默认情况下,Fail2Ban 会静默封禁。若要接收电子邮件提醒,请在 [DEFAULT] 部分中 jail.local:
[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)sThe action_mwl 操作会发送一封包含封禁详情、WHOIS 数据以及触发封禁的日志行的电子邮件。若仅需 WHOIS 数据,请使用 action_mw 仅需 WHOIS 数据时请使用。您需要安装 sendmail 等邮件传输代理,或通过 msmtp.
若需通过 Slack 或 Discord 接收警报,请编写一个发送 webhook 的脚本,并通过 /etc/fail2ban/action.d/.
如果您正在寻找一台具备完全 root 权限且带宽不限的服务器来运行 Fail2Ban,请查看 FDC 的专用服务器。

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?
立即开启性能Linux 内存管理:交换、OOM 杀手和 Cgroups
12 分钟阅读 - 2026年5月31日