原因
运维工作中,当运维的网站或其它出现错误或被攻击时,就需要Linux系统将这些提醒信息及时的通知到相应的运维人员。QQ是常用的软件,将邮件发送到QQ邮箱可以更容易让运维人员获得提醒的信息。(当然也可以让Linux系统和短信、微信建立联系,以后我会单独写一篇博文)
但是,由于很多邮件服务商会把Linux发送的邮件当成垃圾处理,或者像阿里云ESC服务器,为了防止其服务器被当作垃圾邮件垃圾邮件发送服务器,直接就禁止了邮件端口25的使用。这样就致使Linux系统自带的prifix邮件服务无法直接将提醒邮件发送到QQ邮箱。
而且Linux系统的本地邮箱发件延迟,一般几个小时收不到报警邮件也是常规操作。针对以上的问题,用外部邮箱的方式就可以解决,使用外部邮箱(QQ、网易邮箱等)将Linux系统中的提醒信息进行转发。使用外部邮箱的话需要安装mailx工具。
部署
-
安装mailx服务
检查是否下载成功:
-
编辑mailx服务的配置文件
在配置文件的末尾加上以下配置:
获取邮箱授权码的方式:(以QQ邮箱为例)
TIPS:开启POP3/SMTP服务和IMAP/SMTP服务的作用:
简单的说,SMTP服务管"发",POP3/IMAP服务管"收"。
因为"/etc/mail.rc"配置文件中,我们配置了"set smpt =smpt.qq.com"。其中"smpt.qq.com"就是QQ的SMTP服务器的地址,用来发送Linux系统要发送的提醒信息;POP3服务和SMTP服务是对应的,当通过邮箱寄信给某人时,对方多半不会在线,所以就需要POP3服务先来替客户接收保存邮件。
按理说,配置到这里Linux系统就可以直接发送邮件到QQ邮箱了。但是就像开头提到的阿里云ECS服务器和腾讯云邮件服务器封禁了25端口,所以我们只能用TLS方式(TLS方式也就是使用SSL加密的方式,使用465或者其它端口来发送邮件)绕过25端口来发送邮件,所以必须先获得邮箱的SSL证书并存放到本地,最后一行的nss-config-dir就是用来存放QQ邮箱的SSL证书的路径。
利用ssl协议发送
- 部署的步骤和上面类似,只是要在"/etc/mail.rc"配置文件中加入下面的一些配置:
- 因为需要QQ邮箱的SSL证书,所以我们还需要动手获取QQ邮箱的证书保存到本地指定的目录中,以备调用和验证:
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/qq.crt
# openssl s_client -connect smtp.qq.com:465 连接到SMTP服务器,指定465端口
# 获取QQ邮箱的证书"qq.crt"
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb -i /etc/pki/nssdb/qq.crt
#certutil命令是对证书进行日常管理的命令行工具
#-A:将证书添加到数据库文件中(如果需要的话创建); -n:指定要要添加的证书的昵称; -t:设置证书信赖权限,“,,“参数表示不明确的信任,”C“表示受信任的CA颁发服务器证书; -d:指定认证文件所在的目录; -i:指定认证文件
certutil -L -d /etc/pki/nssdb
# -L:列出所有的证书;
为了防止出现一些发送邮件的警告提示,还需要进入"/etc/pki/nssdb"目录中执行如下命令:
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
#"P"代表是可信任的,"u"代表user cert
若是返回如下提示即表明配置成功:
**Notice: Trust flag u is set automatically if the private key is present.**
这是信任证书的标记操作。
3. 测试
echo "测试邮件" | mail -s "测试" XXX@qq.com