記一次zabbix報警郵件無法接收的問題
學習zabbix報警媒介,嘗試呼叫shell指令碼來完成郵件的傳送操作時,在觸發動作後,報警郵件順利發出,但我所在的郵箱卻一直沒有收到報警郵件。
現象
在測試多次後檢視zabbix審計日誌時發現zabbix均已成功傳送郵件,但郵箱中一直沒有收到報警郵件。
分析
在伺服器上嘗試呼叫mailx程式,郵件順利傳送並在郵箱中可以看到報警郵件。
Ξ (bochs) ~ → echo "test content" | mailx -s "test title" [email protected]
Ξ (bochs) ~ →
伺服器可以順利的傳送郵件,但為什麼zabbix傳送的郵件遲遲收不到?我轉換了思路,不在使用最新版的4.4.5版本,改換成4.0LTS版本,發現問題依然存在,這時就能判斷不是zabbix程式的問題。
繼續想,會不會是zabbix沒有呼叫到指令碼呢,我在指令碼中又加入了時間:
#!/bin/bash export LANG="zh_CN.utf8" echo `date "+%Y-%m-%d %H:%M:%S"` 進入指令碼>> /tmp/mailx.log echo $1 echo $2 echo $3 SEND_TO=$1 SEND_SUBJECT=$2 FILE=/tmp/mailtmp.txt echo "$3" >$FILE dos2unix -k $FILE /usr/bin/mailx -s "$SEND_SUBJECT" $SEND_TO < $FILE echo `date "+%Y-%m-%d %H:%M:%S"` 退出指令碼>> /tmp/mailx.log
執行測試並檢視/tmp/mailx.log,發現zabbix順利進入了指令碼,並且指令碼中的引數也正確傳遞了
2020-02-02 09:44:22 進入指令碼
************@163.com
故障PROBLEM,伺服器:aliyun發生: 無法telnet zabbix_server的10051埠;巨集變數函式測試:巨集變數測試成功故障!
事件ID:93PROBLEM:1tzabbix server的10051埠:1巨集變數函式測試:巨集變數測試成功
2020-02-02 09:44:22 郵件成功傳送
將指令碼中的引數拿到命令列執行引數測試,發現郵件順利傳送。zabbix順利進入了指令碼但是沒傳送郵件,命令列確是能正常傳送。
解決
重新梳理了一遍思路後推測,會不會是zabbix無許可權呼叫mailx程式呢?為了驗證這個問題,我先將zabbix的預設shell切換為/bin/bash,以使我能順利的登入到zabbix使用者
usermod -s /bin/bash zabbix
su - zabbix #切換到zabbix使用者
呼叫指令碼進行測試發現重要的報錯資訊
-bash-4.2$ echo "11" | mailx -s "22" ############@163.com
-bash-4.2$ Error initializing NSS: Unknown error -8015.
. . . message not sent.
這個報錯是之前在root賬戶時從未發生的報錯,這時可以斷定是許可權問題了。檢視mailx程式的許可權是755,也就是說zabbix可以順利的呼叫到mailx程式進行郵件的傳送。
後來,終於找到了問題的所在,原來我的mailx配置檔案/etc/mail.rc中的祕鑰檔案位於/root目錄下
set from="###########@163.com"
set smtp="smtps://smtp.163.com:465"
set smtp-auth-user="###########@163.com"
set smtp-auth-password="############"
set smtp-auth="login"
set ssl-verify="ignore"
set nss-config-dir="/root/.certs"
我們知道普通使用者是肯定不能進入root使用者的家目錄的,這就導致了zabbix無法呼叫到證書,進而無法傳送郵件的
將祕鑰檔案拷貝到其他的目錄下,並將這個目錄授予777許可權,更改mailx的配置檔案。
cp -R /root/.certs /etc/zabbix && chmod 777 /etc/zabbix/.certs
這時測試郵件可以順利的傳送,在嘗試用zabbix觸發報警郵件,報警郵件順利傳送,郵箱中也有報警郵件了。
最後,將zabbix的預設shell換回/sbin/nolgin,防止惡意利用
usermod -s /sbin/nologin zabbix
總結
問題終於釐清,郵箱中順利的接受到了郵件。追根溯源才發現是許可權問題,下次有多使用者呼叫的檔案時應避免放到/root目錄防止普通使用者無法呼叫。