Debian 系统下 Fail2ban 失效问题完整解决方案

——从日志丢失到过滤器模式调优

问题背景

Fail2ban 是一款通过监控日志自动封禁恶意 IP 的工具,但在实际使用中可能因配置错误或环境问题导致失效。
常见症状:

  • Fail2ban 服务运行正常,但无法封禁攻击 IP。
  • /var/log/auth.log 被删除或轮转后未正确恢复。
  • SSH 密钥登录失败未被识别(需切换过滤器模式)。

问题 1:auth.log 被删除或丢失

现象

Fail2ban 日志 (/var/log/fail2ban.log) 报错:ERROR No file found for /var/log/auth.log
auth.log文件不存在,导致 Fail2ban 无法读取登录日志。

解决方案

手动重建日志文件

sudo touch /var/log/auth.log
sudo chown syslog:adm /var/log/auth.log
sudo chmod 640 /var/log/auth.log

重启日志服务

# 重启 rsyslog(大多数 Debian 系统)
sudo systemctl restart rsyslog

# 验证日志生成
tail -f /var/log/auth.log

配置日志轮转保护(可选)
修改 /etc/logrotate.conf,禁止自动删除旧日志:

/var/log/auth.log {
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        systemctl restart rsyslog
    endscript
}

问题 2:Fail2ban 未封禁密钥登录失败

现象

  • SSH 密钥登录失败未被识别(如 Authentication refused: bad ownership or modes)。
  • fail2ban.log 中无匹配日志,但 auth.log 中存在相关错误。

原因
默认 sshd 过滤器使用 mode=normal,仅匹配基础错误类型。密钥登录失败日志需启用 mode=aggressive。
解决方案

  • 修改 Fail2ban 配置

编辑 /etc/fail2ban/jail.local,指定过滤器模式:

[sshd]
enabled = true
filter = sshd[mode=aggressive]  # 关键修改
port = ssh
logpath = /var/log/auth.log*
maxretry = 3
bantime = 3600
  • 验证正则匹配

使用 fail2ban-regex 测试日志匹配:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf --print-all-matched

3.重启服务

sudo systemctl restart fail2ban

问题 3:Fail2ban 权限不足

现象

  • fail2ban.log 报错:Permission denied 或 No such file or directory。

解决方案

1.将 Fail2ban 用户加入 adm组

sudo usermod -a -G adm fail2ban

2.验证权限

ls -l /var/log/auth.log
# 输出应为:-rw-r----- 1 syslog adm

高级配置

  • 自定义过滤器
    创建副本避免默认配置被覆盖:
    sudo cp /etc/fail2ban/filter.d/sshd.conf /etc/fail2ban/filter.d/sshd-custom.conf
    编辑 sshd-custom.conf,调整正则表达式后,在 jail.local中引用:
    [sshd]
    filter = sshd-custom
  • IP 白名单
    在jail.local 中添加可信 IP:
    [sshd]
    ignoreip = 192.168.1.0/24 8.8.8.8
  • 多监狱配置
    监控其他服务(如 Nginx):
    [nginx-badbots]
    enabled = true
    port = http,https
    filter = nginx-badbots
    logpath = /var/log/nginx/access.log

维护与监控

1.实时监控封禁记录

fail2ban-client status sshd
iptables -n -L f2b-sshd

2.日志分析工具
使用 fail2ban-client 或第三方工具(如 fail2ban-web)分析日志。

3.定期更新规则
关注 Fail2ban 社区和 GitHub,及时更新过滤器规则。

总结
通过排查日志丢失、调整过滤器模式、修复权限,可解决 Debian 系统下 Fail2ban 失效问题。关键点:

  • 确保 auth.log 存在且权限正确。
  • 针对密钥登录失败启用 mode=aggressive。
  • 定期检查 Fail2ban 日志和封禁状态。

附:常用命令速查表

重启服务

sudo systemctl restart fail2ban

查看封禁 IP

fail2ban-client status sshd

测试过滤器

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

手动封禁 IP

fail2ban-client set sshd banip 1.2.3.4

适用系统:Debian 10/11/12, Ubuntu 20.04+

— 感谢阅读 —

一起交流

分享你的思考,让讨论更进一步。