fail2ban未封ip的主因是jail.local未创建且[sshd] enabled = false默认未启用;需手动复制配置、启用ssh监狱、确认logpath路径正确,并避免语法错误与日志格式变更。

Fail2ban 能有效防 SSH 暴力破解,但装完不配等于没装——jail.local 必须存在且启用 [sshd],否则服务跑着也白跑。
fail2ban 安装后为什么没封 IP?
常见现象是 systemctl status fail2ban 显示 active,但反复输错密码也没被封。根本原因是默认配置里 [sshd] 的 enabled = false,且未创建 /etc/fail2ban/jail.local 覆盖它。
- Debian/Ubuntu 直接运行:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local - RHEL/CentOS/Rocky 需先确认 EPEL 已启用,再安装,否则
dnf install fail2ban会失败 - 源码安装(如 CentOS 7)必须指定 Python 3 路径,
fail2ban-server启动时若调用系统默认的 Python 2,会直接报错退出 - 检查是否真在监控日志:
sudo fail2ban-client get sshd logpath应返回/var/log/auth.log(Debian)或/var/log/secure(RHEL),否则过滤器找不到失败记录
sshd 规则里 maxretry 和 findtime 怎么设才合理?
设太严(如 maxretry = 2)容易误封自己;设太松(如 findtime = 3600)又起不到防护作用。关键看你的运维习惯和日志节奏。
-
maxretry = 3是较稳妥起点:允许一次手误+一次粘贴错,第三次才触发 -
findtime = 600(10 分钟)匹配 SSH 登录失败的自然聚集特征,比 60 秒更抗抖动 -
bantime = 3600封 1 小时够用;若攻击持续,可改bantime = -1永久封(需配合定期清理) - 别碰
backend:默认systemd或auto即可,强行改成polling会增加 CPU 开销
fail2ban-client status sshd 返回空或报错
说明 jail 没真正加载,不是服务没启,而是配置解析失败。最常踩的坑是语法错误或路径不存在。
- 检查
/etc/fail2ban/jail.local是否有非法缩进或中文标点——fail2ban 不吃空格对齐,只认=前后空格 - 运行
sudo fail2ban-client -t测试配置语法,报错行会明确指出,比如Invalid value 'true ' for option 'enabled'(末尾多空格) -
logpath必须真实存在且 fail2ban 有读权限:sudo -u root ls -l /var/log/auth.log,否则启动日志里会出现Unable to read log file - 重启前务必
sudo systemctl daemon-reload,尤其改过 systemd service 文件时
真正难的不是装上 fail2ban,而是确保它盯的日志、用的过滤器、封的网络层三者对得上——sshd 过滤器依赖 auth.log 里的标准格式,如果你改过 sshd_config 的 LogLevel 为 VERBOSE 或关了 AuthenticationFailure 日志,那 fail2ban 就彻底瞎了。











