天天看點

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,如需轉載請自行聯系原作者

繼續閱讀