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

在基于 Ubuntu、Debian 和 RHEL 的 Linux 服务器上安装、配置和测试 Fail2Ban 的分步指南。
如何在 Linux 上安装和配置 Fail2Ban
Fail2Ban 监控服务器日志中的可疑活动,并通过更新防火墙规则自动禁止违规 IP。它能阻止暴力攻击,减少日志噪音,并在配置后安静地在后台运行。本指南涵盖 Ubuntu/Debian 上的安装、核心配置、监狱设置以及一些值得了解的高级选项。
前提条件
Fail2Ban 可在大多数 Linux 发行版上运行:Ubuntu、Debian、AlmaLinux、CentOS、RHEL、Rocky Linux 和 Fedora。您需要
- 系统已安装Python 3
- 用于安装软件包和更改防火墙的Root 或 sudo 访问权限
- 活动防火墙(iptables、nftables、ufw 或 firewalld)
- 记录登录失败尝试的日志文件
(基于 Debian 的系统为/var/log/auth.log,基于 RHEL 的系统为/var/log/secure)
在基于 RHEL 的系统上,首先启用 EPEL 资源库。安装 Fail2Ban 之前,请使用 ufwstatus或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)"。第二个命令会列出活动的 jail。使用sudo systemctl is-enabled fail2ban 确认Fail2Ban 已在启动时启用。
配置 Jails
默认设置
打开/etc/fail2ban/jail.local,调整[DEFAULT]部分。这些设置适用于所有 Jail,除非被覆盖:
| 参数 | 建议值 | 作用 |
|---|---|---|
bantime | 3600 | 阻止一个 IP 1 小时 |
查找时间 | 600 | 计算 10 分钟窗口内的故障次数 |
最大重试次数 | 3至5 次 | 触发禁令前的失败次数 |
忽略 IP | 127.0.0.1/8 ::1 | 从不被禁用的 IP |
将自己的管理 IP 添加到ignoreip中,这样就不会将自己锁定。例如:ignoreip = 127.0.0.1/8 ::1 203.0.113.50.
SSH 保护
在jail.local 中启用 SSH jail:
[sshd]
enabled = true检查logpath是否指向正确的发行版日志文件。如果已将 SSH 移至非标准端口(如 2222),请更新端口参数以匹配。
网络服务器保护
启用与网络服务器相匹配的监狱:
- Nginx:
[nginx-http-auth]针对身份验证失败,[nginx-botsearch]针对恶意机器人 - Apache
[apache-auth]用于验证,[apache-badbots]用于机器人
回收监狱
recidive]监狱可捕获在其他监狱中不断被禁用的 IP,并对其实施较长时间的惩罚,通常为一周(604800 秒)。这对轮换攻击方式的持久攻击者很有用。
更改后,重新加载:
sudo systemctl restart fail2ban
sudo fail2ban-client status测试和监控
测试禁令
在生产中使用 Fail2Ban 之前,请先进行测试。从远程计算机(非管理员 IP)尝试 SSH 登录,直到超过最大尝试次数。您应该会被阻止。用以下方法确认:
sudo fail2ban-client status sshd实时观察封禁情况:
tail -f /var/log/fail2ban.log如果不小心封禁了一个合法 IP,请解除封禁:
sudo fail2ban-client set sshd unbanip 203.0.113.50逐日监控
通过搜索日志查看封禁历史:
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 将它们存储在 SQLite 数据库中,地址是/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 会静默禁止。要获得电子邮件提醒,请在jail.local 的[DEFAULT]部分添加以下内容:
[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)saction_mwl操作会发送包含封禁详情、WHOIS 数据和触发封禁的日志行的电子邮件。如果只需要 WHOIS 数据,请使用action_mw。你需要安装 sendmail 等邮件传输代理,或通过msmtp 等配置 SMTP 中继。
对于 Slack 或 Discord 警报,可以创建一个脚本来发送 webhook,并通过/etc/fail2ban/action.d/ 中的自定义动作文件将其连接起来。
如果您正在寻找一台拥有完全 root 访问权限和未计量带宽的服务器来运行 Fail2Ban,请查看 FDC 的专用服务器。

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适用于任何规模。准备升级?
立即开启性能
iperf3 教程:在 Linux 和 Windows 上测试网络速度
10 分钟阅读 - 2026年5月7日