如何在 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 上的安装、核心配置、监狱设置以及一些值得了解的高级选项。

前提条件

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 之前,请使用 ufwstatussystemctl 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,除非被覆盖:

参数建议值作用
bantime3600阻止一个 IP 1 小时
查找时间600计算 10 分钟窗口内的故障次数
最大重试次数35 次触发禁令前的失败次数
忽略 IP127.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-tablef2b-chain。如果系统较老或有兼容性要求,请坚持使用 iptables。

电子邮件通知

默认情况下,Fail2Ban 会静默禁止。要获得电子邮件提醒,请在jail.local[DEFAULT]部分添加以下内容:

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

action_mwl操作会发送包含封禁详情、WHOIS 数据和触发封禁的日志行的电子邮件。如果只需要 WHOIS 数据,请使用action_mw。你需要安装 sendmail 等邮件传输代理,或通过msmtp 等配置 SMTP 中继。

对于 Slack 或 Discord 警报,可以创建一个脚本来发送 webhook,并通过/etc/fail2ban/action.d/ 中的自定义动作文件将其连接起来。

如果您正在寻找一台拥有完全 root 访问权限和未计量带宽的服务器来运行 Fail2Ban,请查看 FDC 的专用服务器

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

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

立即开启性能

博客

本周特色

更多文章
Linux 服务器加固清单

Linux 服务器加固清单

加固 Linux 服务器的分步核对表。涵盖 SSH、防火墙、打补丁、文件权限、SELinux/AppArmor 和审计日志

15 分钟阅读 - 2026年5月8日

iperf3 教程:在 Linux 和 Windows 上测试网络速度

10 分钟阅读 - 2026年5月7日

更多文章