Fail2ban 是 Linux 轻量级入侵防护工具,通过监控日志、识别失败行为(如 5 次 SSH 登录失败)、调用防火墙自动封禁实现防护;支持一键安装、jail.local 配置、多服务扩展及邮件通知。

Fail2ban 是 Linux 上最实用的轻量级入侵防护工具,核心逻辑就三步:盯日志、认坏人、自动拉黑。它不依赖复杂规则引擎,靠精准匹配失败行为(比如 5 次 SSH 登录失败)触发防火墙封禁,对暴力破解、爬虫试探、恶意扫描这类常见攻击效果直接且可靠。
装好就能用:不同系统一键安装
别碰源码编译,包管理器安装最稳:
- Ubuntu/Debian:运行 sudo apt update && sudo apt install -y fail2ban
- CentOS/RHEL 7/8:先开 EPEL:sudo yum install -y epel-release,再装:sudo yum install -y fail2ban
- CentOS/RHEL 9 或 AlmaLinux/Rocky 9+:用 dnf:sudo dnf install -y fail2ban
装完立刻启用并启动服务:sudo systemctl enable --now fail2ban。此时默认已加载 SSH 防护,但还没生效——得配好才能真正拦人。
关键一步:配置 jail.local 而非 jail.conf
/etc/fail2ban/jail.conf 是只读模板,直接改它下次升级可能被覆盖。正确做法是创建或编辑 /etc/fail2ban/jail.local:
- 复制模板:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 编辑本地文件:sudo nano /etc/fail2ban/jail.local
在 [DEFAULT] 段设全局底线:
[DEFAULT] ignoreip = 127.0.0.1/8 192.168.0.0/16 bantime = 3600 findtime = 600 maxretry = 5
再启用 SSH 防护(Debian/Ubuntu 示例):
[sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log
如果是 CentOS/RHEL,把 logpath 改成 /var/log/secure。改完执行 sudo fail2ban-client reload 生效。
封得准、解得稳:验证与调参要点
别信“配完就安全”,必须验证日志路径和正则是否真能抓到攻击:
- 查当前状态:sudo fail2ban-client status sshd(看 failed 数和 banned IP)
- 手动测试匹配:sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf,输出里 “Lines: X lines, 0 ignored, Y matched” 才算有效
- 封禁时间太短?改 bantime;误伤内网用户?确认 ignoreip 包含你自己的网段
常见误封原因:logpath 错(如 Ubuntu 写了 secure)、filter 名拼错(如写成 ssh)、SELinux 或 firewalld 干扰(RHEL 系统需额外放行 fail2ban 自身通信)。
不止封 IP:邮件通知与多服务扩展
加邮件提醒,让攻击一发生你就知道:
- 确保系统有发信能力(如已装 postfix 或 sendmail)
- 在 jail.local 的 [DEFAULT] 下加:
destemail = your@email.com sender = fail2ban@yourserver.com action = %(action_mwl)s
想防 Nginx 登录爆破?照着抄就行:
- 新建过滤器:sudo nano /etc/fail2ban/filter.d/nginx-login.conf,填入匹配 401/403 的正则
- 在 jail.local 里加一段:
[nginx-login] enabled = true filter = nginx-login logpath = /var/log/nginx/access.log maxretry = 5 bantime = 7200
改完 reload,fail2ban 就同时盯 SSH 和 Nginx 了。








