豆子最近用CentOS7配置了个Nagios服务器,监控服务器,交换机,打印机,Netapp等设备。Nagios的邮件我是经过sendmail转发到本地的一个Exchange服务器上的。ios
最近需求变化,SMTP的转发须要转到Office365上面,由于对Office365不太熟悉,我花了2个小时的时间来学习怎么处理这个问题。shell
Office365支持3种SMTP的转发场景。vim
https://technet.microsoft.com/en-us/library/dn554323%28v=exchg.150%29.aspx 服务器
对于我来讲,个人Nagios服务器不须要做为其余服务器的邮件转发,所以使用第二种方式 Client Submission SMTP 就能够了。简单的说就是,只要Office365上有的邮件帐号,我让Nagios直接用这个帐号发邮件就好了。app
我公司的AD和邮件已经和Office365同步了,所以直接使用现有的邮件就能够了ide
在配置客户端以前,先来试试看是否可以进行SMTP的Relay转发。传统的测试方式是Telnet链接,而后测试,Powershell4自带了Send-MailMessage的命令,所以能够直接运行测试。post
若是没有问题,那应该很快就能收到,请注意发信人和验证用户,密码必须一致。不能说我用李四的邮箱帐号验证,可是去拿张三的邮箱发信,除非设置了SendAs的权限。学习
测试命令截图测试
如今看看客户端(Nagios)如何配置。ui
我以前使用的是Sendmail,可是在新版本里面,他会强制进行证书验证,否则直接报错。恰好最近考RHCE,豆子此次打算用Postfix试试看。
Postfix的空客户端转发我已经很熟悉了,参见
http://beanxyz.blog.51cto.com/5570417/1609531
这个转发给Office365的区别其实就是多配置一个用户名密码的验证文件,而后强制他从某个邮箱发送,而不是默认的user@myorigin 的格式。
首先建立一个用户名,密码的文件
vim /etc/postfix/sasl_passwd
而后添加如下信息
[smtp.office365.com]:587 nagios@xxx.com:password
方括号里面是office365的smtp地址,587是端口号, 后面是用来验证的邮箱用户名和密码
而后咱们须要转化成postfix能够识别的格式
postmap hash:/etc/postfix/sasl_passwd
最后在主配置文件里面添加如下信息
relayhost = [smtp.office365.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_tls_security_level = may smtp_sasl_security_options = noanonymous
IP协议记得改为ipv4,否则office365服务器默认是ipv6的地址,会报错
inet_protocols=ipv4
mydestination设为空
mydestination=
重启postfix,这样基本上就能够工做了。
能够测试下,好比指定从 nagios@xxx.com发个邮件给abc@test.com
echo 'test smtp' | mail -r nagios@xxx.com -s 'test email' abc@test.com
不出意外的话,应该能够收到了。 若是等了半天没反应,能够查看日志判断报错
好比
[root@sydnagios postfix]# tail /var/log/maillog Apr 9 09:22:53 sydnagios postfix/pickup[20595]: 8215039D9A9: uid=1001 from=<nagios@aus.ddb.com> Apr 9 09:22:53 sydnagios postfix/cleanup[44919]: 8215039D9A9: message-id=<5525b84d.6PVA0r3rChf2lRe/%nagios@aus.ddb.com> Apr 9 09:22:53 sydnagios postfix/qmgr[63629]: 8215039D9A9: from=<nagios@aus.ddb.com>, size=748, nrcpt=1 (queue active) Apr 9 09:23:03 sydnagios postfix/smtp[44921]: 8215039D9A9: to=<italerts@aus.ddb.com>, relay=smtp.office365.com[132.245.164.34]:587, delay=9.6, delays=0.01/0/9/0.59, dsn=2.6.0, status=sent (250 2.6.0 <5525b84d.6PVA0r3rChf2lRe/%nagios@aus.ddb.com> [InternalId=20280835574078, Hostname=SIXPR04MB0462.apcprd04.prod.outlook.com] Queued mail for delivery) Apr 9 09:23:03 sydnagios postfix/qmgr[63629]: 8215039D9A9: removed Apr 9 09:24:42 sydnagios postfix/pickup[20595]: B3F7539D9A9: uid=1001 from=<nagios@aus.ddb.com> Apr 9 09:24:42 sydnagios postfix/cleanup[45911]: B3F7539D9A9: message-id=<5525b
Postfix没问题的话,最后修改如下Nagios的配置文件就好了。
打开 command.cfg
# 'notify-host-by-email' command definition define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -r nagios@XXX.com -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$ } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -r nagios@XXX.com -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$ }
重启Nagios
systemctl restart Nagios
大功告成!