这是 Debian 12 系统下一个非常典型的兼容性小问题。
报错日志中,最核心的错误是这一行:
ERROR Failed during configuration: Have not found any log file for sshd jail
(错误:配置失败:没有找到 sshd 监狱的日志文件)
为什么会这样?
你的安装脚本里有一段逻辑:如果找不到 /var/log/secure(CentOS 常用),它就会默认将日志路径配置为 /var/log/auth.log。
但是,Debian 12 默认更改了日志管理方式。它现在默认使用 systemd-journald 来记录日志,不再预装 rsyslog。因此,你的系统里根本不存在 /var/log/auth.log 这个文件。Fail2ban 启动时找不到这个被硬性指定的日志文件,就直接崩溃退出了。
如何解决?
你有两种方法可以修复这个问题。推荐使用方法一,因为这是最快且最不需要修改脚本配置的方法。
直接用方法2就行,不用装软件.
方法一:安装传统的日志服务(最简单)
既然脚本需要 /var/log/auth.log,我们只需把生成这个文件的服务安装回来即可。
请在终端依次运行以下命令:
Bash
# 1. 安装 rsyslog 服务
apt-get update
apt-get install rsyslog -y
# 2. 启动并设置 rsyslog 开机自启
systemctl enable rsyslog --now
# 3. 重新启动 fail2ban
systemctl restart fail2ban
# 4. 查看 fail2ban 运行状态
systemctl status fail2ban
方法二:修改 Fail2ban 配置以适配 Debian 12(更现代化)
如果你不想额外安装 rsyslog,你可以手动修改刚刚脚本生成的配置文件,让 Fail2ban 直接读取 systemd 的日志。
-
编辑配置文件:
Bash
nano /etc/fail2ban/jail.local -
找到
[sshd]下面的logpath = /var/log/auth.log这一行。 -
将那一行删除或者用
#注释掉,然后替换为backend = systemd,修改后看起来像这样:Ini, TOML
[sshd] ignoreip = 127.0.0.1/8 enabled = true filter = sshd port = 22 maxretry = 5 findtime = 300 bantime = 600 banaction = iptables-allports action = %(action_mwl)s # logpath = /var/log/auth.log <-- 注释掉这行 backend = systemd <-- 添加这行 -
保存退出(在 nano 中按
Ctrl+O,回车确认,然后Ctrl+X退出)。 -
重启服务:
Bash
systemctl restart fail2ban
