1. 程式人生 > 實用技巧 >記一次zabbix報警郵件無法接收的問題

記一次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目錄防止普通使用者無法呼叫。