Fail2Ban邮件提醒需打通日志识别、动作触发、邮件发送三环节:必须配置SMTP链路(如mailx+腾讯邮箱)、显式启用action_mwl动作、定制mail-whois.conf模板以嵌入主机名、WHOIS、日志片段等上下文,同时验证logpath、过滤器和iptables规则是否生效。

确保邮件基础链路通达
Fail2Ban 本身不发邮件,它调用系统MTA(如 sendmail、postfix)或外部SMTP服务。直接依赖系统默认 sendmail 往往失败——尤其在云服务器上常无本地MTA。推荐使用轻量可靠的 mailx + 外部SMTP 方案:
- 安装 mailx:
sudo apt install mailutils(Debian/Ubuntu)或sudo yum install mailx(CentOS/RHEL) - 配置 SMTP 认证(以腾讯企业邮箱为例):
编辑/etc/mail.rc,写入:set from=admin@yourdomain.com<br>set smtp=smtps://smtp.exmail.qq.com:465<br>set smtp-auth-user=admin@yourdomain.com<br>set smtp-auth-password=你的应用专用密码<br>set smtp-auth=login<br>set ssl-verify=ignore
- 立即验证:
echo "测试" | mail -s "Fail2Ban邮件测试" your@email.com,收到即通
启用带上下文的告警动作
默认 action = %(action_)s 只封禁不通知;要发邮件,必须显式启用含邮件的动作模板,例如 action_mwl(Mail-Whois-Log):
- 在
/etc/fail2ban/jail.local的[DEFAULT]或具体 jail(如[sshd])中设置:mta = maildestemail = admin@yourdomain.comsender = fail2ban@yourdomain.comaction = %(action_mwl)s -
action_mwl会自动附加 WHOIS 查询结果和最近几行原始日志,比纯action_mw更具排查价值
定制告警内容提升实用性
原生邮件模板字段有限。修改 /etc/fail2ban/action.d/mail-whois.conf 中的 actionban,可加入关键现场信息:
- 用
<fq-hostname>显示服务器主机名,避免多台机器告警混淆 - 用反引号执行命令嵌入实时信息,例如:
攻击IP:<ip> (国家:`whois <ip> | grep 'country:' | cut -d: -f2`) - 截取相关日志片段:
`grep "<ip>" <logpath> | tail -n 3`,定位真实攻击行为 - 补充封禁依据:
触发规则:<name>,窗口内失败<failures>次(<findtime>s)
避免告警失效的几个硬性检查点
邮件没收到?大概率卡在这几个地方:
-
日志路径是否匹配:jail 中
logpath必须指向实际写入失败记录的日志(如 SSH 是/var/log/auth.log,Nginx 登录页可能是/var/log/nginx/error.log) -
过滤器是否生效:运行
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf,确认正则能正确提取<host></host> -
封禁动作是否执行成功:查
sudo iptables -L -n | grep “f2b-”,看到规则说明动作已触发;若无,检查banaction配置与系统防火墙类型(iptables/nftables)是否兼容 - 邮件被当垃圾邮件:使用企业邮箱域名发信,避免用 gmail/yahoo 等免费邮箱作 sender;首次测试后检查垃圾箱

















