天天看点

Nagios/Postfix 转发警报邮件到Office365

豆子最近用CentOS7配置了个Nagios服务器,监控服务器,交换机,打印机,Netapp等设备。Nagios的邮件我是通过sendmail转发到本地的一个Exchange服务器上的。

最近需求变化,SMTP的转发需要转到Office365上面,因为对Office365不太熟悉,我花了2个小时的时间来学习怎么处理这个问题。

Office365支持3种SMTP的转发场景。

<a href="https://technet.microsoft.com/en-us/library/dn554323%28v=exchg.150%29.aspx" target="_blank">https://technet.microsoft.com/en-us/library/dn554323%28v=exchg.150%29.aspx</a>

对于我来说,我的Nagios服务器不需要作为其他服务器的邮件转发,因此使用第二种方式 Client Submission SMTP 就可以了。简单的说就是,只要Office365上有的邮件账号,我让Nagios直接用这个账号发邮件就行了。

<a href="http://s3.51cto.com/wyfs02/M01/5D/D8/wKioL1Uls3uCT4lpAAU-3FOoTvg679.jpg" target="_blank"></a>

我公司的AD和邮件已经和Office365同步了,因此直接使用现有的邮件就可以了

<a href="http://s3.51cto.com/wyfs02/M01/5D/DC/wKiom1Ulsw7gdjVuAAFccSClVa0843.jpg" target="_blank"></a>

在配置客户端之前,先来试试看是否能够进行SMTP的Relay转发。传统的测试方式是Telnet连接,然后测试,Powershell4自带了Send-MailMessage的命令,因此可以直接运行测试。

如果没有问题,那应该很快就能收到,请注意发信人和验证用户,密码必须一致。不能说我用李四的邮箱账号验证,但是去拿张三的邮箱发信,除非设置了SendAs的权限。

测试命令截图

<a href="http://s3.51cto.com/wyfs02/M02/5D/D8/wKioL1UltP7gdp9EAAD_ns8-Amw979.jpg" target="_blank"></a>

现在看看客户端(Nagios)如何配置。

我之前使用的是Sendmail,但是在新版本里面,他会强制进行证书验证,不然直接报错。刚好最近考RHCE,豆子这次打算用Postfix试试看。

Postfix的空客户端转发我已经很熟悉了,参见

<a href="http://beanxyz.blog.51cto.com/5570417/1609531" target="_blank">http://beanxyz.blog.51cto.com/5570417/1609531</a>

这个转发给Office365的区别其实就是多配置一个用户名密码的验证文件,然后强制他从某个邮箱发送,而不是默认的user@myorigin 的格式。

首先创建一个用户名,密码的文件

1

<code>vim /etc/postfix/sasl_passwd</code>

然后添加以下信息

<code>[smtp.office365.com]:587 [email protected]:password</code>

方括号里面是office365的smtp地址,587是端口号, 后面是用来验证的邮箱用户名和密码

然后我们需要转化成postfix可以识别的格式

<code>postmap hash:/etc/postfix/sasl_passwd</code>

最后在主配置文件里面添加以下信息

2

3

4

5

<code>relayhost = [smtp.office365.com]:587</code>

<code>smtp_sasl_auth_enable = yes</code>

<code>smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd</code>

<code>smtp_tls_security_level = may</code>

<code>smtp_sasl_security_options = noanonymous</code>

IP协议记得改成ipv4,不然office365服务器默认是ipv6的地址,会报错

<code>inet_protocols=ipv4</code>

mydestination设为空

<code>mydestination=</code>

重启postfix,这样基本上就可以工作了。

可以测试下,比如指定从 [email protected]发个邮件给[email protected]

<code>echo 'test smtp' | mail -r [email protected] -s 'test email' [email protected]</code>

不出意外的话,应该可以收到了。 如果等了半天没反应,可以查看日志判断报错

比如

6

7

8

<code>[root@sydnagios postfix]# tail /var/log/maillog</code>

<code>Apr  9 09:22:53 sydnagios postfix/pickup[20595]: 8215039D9A9: uid=1001 from=&lt;[email protected]&gt;</code>

<code>Apr  9 09:22:53 sydnagios postfix/cleanup[44919]: 8215039D9A9: message-id=&lt;5525b84d.6PVA0r3rChf2lRe/%[email protected]&gt;</code>

<code>Apr  9 09:22:53 sydnagios postfix/qmgr[63629]: 8215039D9A9: from=&lt;[email protected]&gt;, size=748, nrcpt=1 (queue active)</code>

<code>Apr  9 09:23:03 sydnagios postfix/smtp[44921]: 8215039D9A9: to=&lt;[email protected]&gt;, 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 &lt;5525b84d.6PVA0r3rChf2lRe/%[email protected]&gt; [InternalId=20280835574078, Hostname=SIXPR04MB0462.apcprd04.prod.outlook.com] Queued mail for delivery)</code>

<code>Apr  9 09:23:03 sydnagios postfix/qmgr[63629]: 8215039D9A9: removed</code>

<code>Apr  9 09:24:42 sydnagios postfix/pickup[20595]: B3F7539D9A9: uid=1001 from=&lt;[email protected]&gt;</code>

<code>Apr  9 09:24:42 sydnagios postfix/cleanup[45911]: B3F7539D9A9: message-id=&lt;5525b</code>

Postfix没问题的话,最后修改以下Nagios的配置文件就行了。

打开 command.cfg

9

10

<code># 'notify-host-by-email' command definition</code>

<code>define command{</code>

<code>        </code><code>command_name    notify-host-by-email</code>

<code>        </code><code>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 [email protected] -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$</code>

<code>        </code><code>}</code>

<code># 'notify-service-by-email' command definition</code>

<code>        </code><code>command_name    notify-service-by-email</code>

<code>        </code><code>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 [email protected] -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$</code>

重启Nagios 

<code>systemctl restart Nagios</code>

大功告成!

本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1630221,如需转载请自行联系原作者

继续阅读