Nagios/Postfix 轉發警報郵件到Office365

豆子最近用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


wKioL1Uls3uCT4lpAAU-3FOoTvg679.jpg


我公司的AD和郵件已經和Office365同步了,所以直接使用現有的郵件就能夠了ide


wKiom1Ulsw7gdjVuAAFccSClVa0843.jpg



在配置客戶端以前,先來試試看是否可以進行SMTP的Relay轉發。傳統的測試方式是Telnet鏈接,而後測試,Powershell4自帶了Send-MailMessage的命令,所以能夠直接運行測試。post


若是沒有問題,那應該很快就能收到,請注意發信人和驗證用戶,密碼必須一致。不能說我用李四的郵箱帳號驗證,可是去拿張三的郵箱發信,除非設置了SendAs的權限。學習


測試命令截圖測試

wKioL1UltP7gdp9EAAD_ns8-Amw979.jpg


如今看看客戶端(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


大功告成!

相關文章
相關標籤/搜索