fail2ban需手动配置启用,关键在jail.local中设置enabled=true、正确logpath、ignoreip及findtime/maxretry匹配;验证必须用fail2ban-client status sshd和iptables检查,而非仅看systemctl状态。

fail2ban 不是“装上就自动防爆破”的开关,它默认不启用任何服务防护,必须显式开启并指定日志路径——否则 systemctl status fail2ban 显示 active,但实际对 sshd 完全无感。
jail.local 必须存在,且不能只改 jail.conf
fail2ban 启动时优先读取 /etc/fail2ban/jail.local;如果不存在,它会 fallback 到 jail.conf,但该文件在包升级时可能被覆盖。
直接编辑 jail.conf 是运维事故高发区。
- 用
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local创建基础副本 - 确保
[DEFAULT]段里有ignoreip = 127.0.0.1/8 ::1 YOUR_TRUSTED_IP(多个 IP 用空格分隔) -
bantime建议设为1h或86400(秒),避免用600这类易混淆的数字单位 -
findtime和maxretry要匹配:比如findtime = 10m+maxretry = 5,比findtime = 600+maxretry = 3更易读、不易错
CentOS/RHEL 系日志路径是 /var/log/secure,Ubuntu/Debian 是 /var/log/auth.log——配错路径,fail2ban 就像瞎子。
[sshd] 段里 enabled = true 是硬性前提
很多用户改完参数重启服务,发现攻击 IP 依然畅通无阻,根本原因是 [sshd] 下没写 enabled = true,或写成了 enable = true(少一个 d)。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 必须确保该段以
[sshd]开头(不是[ssh]或[ssh-iptables]) - 必须包含
enabled = true(注意是布尔值,不是字符串"true") -
filter = sshd表示使用/etc/fail2ban/filter.d/sshd.conf的正则规则,别手误改成ssh -
logpath必须与系统实际日志位置一致,否则fail2ban-client status sshd会显示Number of detected files: 0
fail2ban-client 是唯一可信的验证手段
别信 systemctl status fail2ban 的 “active (running)” ——它只说明进程活着,不说明规则生效。
- 查看是否加载了
sshdjail:fail2ban-client status - 查看具体 jail 状态:
fail2ban-client status sshd,输出中要有Number of detected files: 1和Currently banned: X - 手动触发一次封禁测试(从另一台机器连续输错 SSH 密码 5 次),再执行:
sudo iptables -L -n | grep ^REJECT,应看到类似REJECT all -- 192.168.1.100 0.0.0.0/0 reject-with icmp-host-prohibited的规则
backend = auto 大多数情况够用,但若服务器启用了 systemd-journald 且没开 ForwardToSyslog=yes,auto 可能 fallback 到轮询模式,延迟升高;此时可显式设为 systemd。
fail2ban 的核心逻辑极简:日志行匹配 → 计数 → 达阈值 → 执行 action → 到期清理。所有问题几乎都卡在「日志路径不对」「jail 没 enable」「ignoreip 漏写自己 IP」这三处。调通之后,它很稳;调不通时,它一声不吭。

















