当前位置:首页>Linux>告别手动查日志!Linux用msmtp实现日志自动邮件告警

告别手动查日志!Linux用msmtp实现日志自动邮件告警

  • 2026-09-06 12:29:21
告别手动查日志!Linux用msmtp实现日志自动邮件告警

嘿,你有没有试过半夜三点被服务器攻击的绝望?数据库正被撞库打得稀巴烂,你可能还在呼呼大睡,啥都不知道——结果系统自己就给那个IP拉黑了,还顺手发个邮件提醒你。哎,这感觉简直不要太爽!

上一篇安全无小事,自动化防护是未来趋势——Fail2ban 正是您服务器安全的得力助手!介绍了Fail2ban如何安装与使用,今天就手把手教你用msmtp发送Fail2ban日志告警,让它直接往你QQ邮箱塞警报。真·超简单,几步搞定,不用再半夜爬起来盯着日志看,省得头发掉得比服务器还快。来,一起搞起来!

第一步:先把“邮差”请进门——安装邮件发送工具

要发送邮件,你的系统得有能发邮件的工具。这里我推荐用msmtp,比postfix轻量,配置简单。

# 对于Debian/Ubuntu系:sudo apt updatesudo apt install msmtp msmtp-mta mailutils -y# 对于RHEL/CentOS系:sudo yum install msmtp mailx -y

为什么装msmtp-mta?这个包会自动把系统的sendmail命令指向msmtp,这样其他程序调用sendmail就等于用msmtp发送了。

第二步:告诉“邮差”去QQ邮箱的路怎么走——配置msmtp

这里需要你的QQ邮箱授权码(注意:不是QQ邮箱登录密码)。如果你没开过,去QQ邮箱网页版:设置 → 账号与安全 → 安全设置 → POP3/IMAP/SMTP/Exchange/CardDAV 服务 → 生成授权码,会得到一串16位字母的授权码。

第三步:确认工具安装情况

先看看msmtp到底装上了没:

# 查看msmtp是否安装成功rpm -qa | grep msmtp# 查看安装的文件都在哪rpm -ql msmtp# 检查是否有示例配置文件find /usr/share -name "*msmtp*" 2>/dev/null

通常CentOS的msmtp会提供示例配置在 /usr/share/doc/msmtp-版本号/ 目录下,我这里安装的是1.8.10。

第四步:手动创建配置文件

在CentOS上,msmtp 安装后不会自动创建 /etc/msmtprc 配置文件,可手动创建它。这跟Debian/Ubuntu不一样,有点坑人。创建配置文件:

# 复制系统自带的示例配置作为模板sudo cp /usr/share/doc/msmtp-1.8.10/msmtprc-system.example /etc/msmtprc# 编辑配置文件 或 使用第五步方法写入 sudo vim /etc/msmtprc

第五步:写入正确的QQ邮箱配置

把原文件内容全部替换为下面这个(注意替换你的实际信息):

sudo tee /etc/msmtprc > /dev/null << 'EOF'account defaulthost smtp.qq.comport 465from 你的QQ邮箱user 你的QQ邮箱password QQ邮箱16位授权码tls ontls_starttls offauth ontls_trust_file /etc/pki/tls/certs/ca-bundle.crtlogfile /var/log/msmtp.logEOF
几个关键点:

port 465:QQ邮箱SSL加密端口

tls_starttls off:这个必须关掉,否则连不上QQ邮箱

password:去QQ邮箱 设置 → 账户与安全 → 安全设置 → POP3/IMAP → 生成授权码

第六步:设置文件权限

# 设置配置文件权限(保护你的邮箱授权码)sudo chmod 600 /etc/msmtprc# 创建日志文件sudo touch /var/log/msmtp.logsudo chmod 666 /var/log/msmtp.log

第七步:验证配置文件语法是否正确

# 测试配置文件是否能被解析msmtp --file=/etc/msmtprc --version

第八步:测试发邮件

# 测试:直接发送echo -e "Subject: 测试邮件\n\n这是来自CentOS 7的测试邮件" | msmtp -v 你的QQ邮箱# 查看日志sudo tail -f /var/log/msmtp.log

成功的关键点

  • 注释必须独占一行,不能和配置在同一行

  • 每行只能有一个配置指令

  • tls_starttls off 必须写对(注意是 off 不是 no 或 false)

  • 只能有一个 account default 定义

  • 权限必须是 600,否则会拒绝读取

第九步:配置Fail2ban使用邮件通知

现在配置Fail2ban:

sudo vim /etc/fail2ban/jail.local# 如果没有,创建它sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

确保有这些配置:

sudo tee /etc/fail2ban/jail.local > /dev/null << 'EOF'[DEFAULT]bantime = 3600findtime = 600maxretry = 5ignoreip = 127.0.0.1/8sender = 你的QQ邮箱destemail = 你的QQ邮箱mta = sendmailaction = %(action_mw)s[sshd]enabled = trueport = sshlogpath = %(sshd_log)smaxretry = 5EOF

第十步:让大爷行动起来——重启Fail2ban

systemctl restart fail2ban

第十一步:检查 sendmail 链接是否正确

# 检查 sendmail 是否指向 msmtpls-la /usr/sbin/sendmailwhich sendmail# 如果 sendmail 不是指向 msmtp,手动创建链接ln-sf /usr/bin/msmtp /usr/sbin/sendmail
第十二步:做个“坏事”测试一下

为了触发警报,你可以:

从另一台电脑(比如手机热点)多次输错SSH密码到你服务器。

或者更安全的方式,手动封禁一个测试IP,触发通知:

sudo fail2ban-client set sshd banip 192.168.1.122

过几分钟,检查你的QQ邮箱,应该会收到类似这样的邮件:

主题:[Fail2Ban] SSH: banned 192.168.1.122 from 你的服务器名称正文:Hi,The IP 192.168.1.122 has just been banned by Fail2Ban after0 attempts against sshd.Here is more information about 192.168.1.122 :missing whois programRegards,Fail2Ban

如果收不到邮件,按顺序检查:

先看msmtp和fail2ban日志:

sudo tail -f /var/log/msmtp.logsudo tail -f /var/log/fail2ban.log

再发送测试邮件,观察日志输出。

再检查权限问题:

ls -la /etc/msmtprcls -la /var/log/msmtp.log

常见问题:

问题1:SELinux阻止(很常见!)

# 查看SELinux日志sudo ausearch -m avc -ts recent# 暂时禁用SELinux测试(生产环境慎用)sudo setenforce 0# 测试邮件# 如果成功,说明是SELinux问题# 恢复SELinuxsudo setenforce 1# 添加SELinux策略sudo semanage fcontext -a -t etc_t "/etc/msmtp(/.*)?"sudo restorecon -Rv /etc/msmtp

问题2:防火墙阻止:

# QQ邮箱使用465端口,确保防火墙允许sudo firewall-cmd --add-port=465/tcp --permanentsudo firewall-cmd --reload

问题3:证书问题:

# 更新CA证书sudo yum install ca-certificates -yupdate-ca-trust

最后的重要提醒

监控邮箱别用自己的主力邮箱:因为警报可能会很多(尤其在刚配置好时,会抓到一堆历史攻击),建议专门注册个邮箱收告警。

定期检查:确保邮件通知一直在工作,别等出事才发现邮件早就不发了。

配置成功后,你的服务器保安大爷正式成为一个“会打电话报警的保安”。半夜三更有IP在暴力破解你服务器时,Fail2ban一封邮件发到你手机,你就能安心睡觉了——因为你知道坏蛋已经被关进小黑屋了。

#Linux自动发送邮件 #Fail2ban发送日志邮件 #msmtp邮件

【如有疏漏,敬请指正!】

最新文章

随机文章