豆子最近用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
大功告成!