Fail2Ban无法与s-nail联动发送邮件及服务启动失败问题求助
一、先解决Fail2Ban服务启动失败的问题
从日志里的ERROR Found no accessible config files for 'action.d/#sendmail-whois'可以看出,核心问题是action配置里出现了无效的文件引用,大概率是配置语法错误导致的,按以下步骤修复:
临时恢复基础配置
先把jail.local里的action改回默认值:action = %(action_)s然后重启服务:
sudo systemctl restart fail2ban确认服务能正常启动,这一步是为了排除其他干扰,先让服务跑起来。
检查action_mw的定义
打开/etc/fail2ban/jail.conf,找到action_mw的默认配置,正常应该是这样的:# ban & send an e-mail with whois report to the destemail. action_mw = %(action_)s %(mail-whois)s确认
%(mail-whois)s对应的文件/etc/fail2ban/action.d/mail-whois.conf存在,且没有被误修改成带#注释符号的内容。如果文件丢失,可以从Fail2Ban的安装包中恢复,或者手动创建。排查action文件的语法错误
打开mail-whois.conf,检查以下几点:- 所有变量(比如
<ip>、<destemail>)都正确用尖括号包裹 - 命令行的引号配对完整,没有遗漏
- 没有把文件名或命令写成
#sendmail-whois这类带注释符号的错误格式
- 所有变量(比如
二、配置Fail2Ban与s-nail联动发送邮件
你已经确认s-nail单独运行正常,接下来只需要让Fail2Ban正确调用它即可:
确认MTA配置无误
在jail.local的[DEFAULT]部分,保留以下配置(你已经设置过,确保没有写错):mta = mail destemail = mydestaddress@gmail.com sender = myaddress@gmail.com这里
mta = mail是对的,因为s-nail通常会软链接到系统的mail命令,和你单独测试的命令一致。调整action文件适配s-nail
编辑/etc/fail2ban/action.d/mail-whois.conf,找到actionban段落,修改邮件发送命令适配s-nail:- 去掉
mailx专属的'set escape'参数(s-nail不需要这个配置) - 确保命令格式和你单独测试的一致,修改后示例:
actionban = printf "Hi,\n\nThe IP <ip> has just been banned by Fail2Ban after <failures> attempts against <name>.\n\nHere is more information about <ip>:\n\n`whois <ip>`\n\nRegards,\nFail2Ban" | mail -s "[Fail2Ban] <name>: banned <ip> from <fq-hostname>" <destemail>
如果你习惯用长参数,也可以把
-s改成--subject,两者都被s-nail支持。- 去掉
测试联动效果
- 在
jail.local的[DEFAULT]部分改回:action = %(action_mw)s - 重启Fail2Ban:
sudo systemctl restart fail2ban,确认服务正常运行 - 手动触发ban事件:用错误密码尝试SSH登录3次(对应你的
maxretry=3) - 检查
/var/log/fail2ban.log是否有邮件发送记录,同时查看目标邮箱是否收到告警邮件
- 在
额外排查点
如果邮件还是没发送,补充检查:
- 查看系统邮件日志(比如
/var/log/maillog),确认s-nail是否有发送失败的记录 - 确保
whois命令已安装:执行whois 8.8.8.8,如果提示命令不存在,用包管理器安装(比如sudo dnf install whois或sudo apt install whois) - 确认Fail2Ban以root权限运行,确保它能执行
whois和mail命令
内容的提问来源于stack exchange,提问作者itarill

