
嘿,你有没有试过半夜三点被服务器攻击的绝望?数据库正被撞库打得稀巴烂,你可能还在呼呼大睡,啥都不知道——结果系统自己就给那个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邮件