zimbra-script/zabbix_zimbra_domain_status.sh

120 lines
4.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
##############################################################################
#
# Определение корректности записей в DNS
# для доменов заведённых в Zimbra для Zabbix
#
# Автор: Сергей Калинин
# https://nuk-svk.ru
# svk@nuk-svk.ru
##############################################################################
#
# Использование:
#
# Получение списка доменов из zimbra и копирование его в файл:
# zabbix_zimbra_domain_status.sh discover
#
# Создание json-файла со списком доменов для службы обнаружения zabbix
# zabbix_zimbra_domain_status.sh discover-json
#
# Чтение JSON-файла и вывод на экран (в zabbix)
# zabbix_zimbra_domain_status.sh read-json-discover
#
# Получение MX записей из ДНС для всех доменов и копирование их в файл
# zabbix_zimbra_domain_status.sh get-domain-records _RECORD_TYPE_
# где
# _RECORD_TYPE_ - тип записи (MX, TXT (для spf))
#
# Получение MX записи из файла для домена
# zabbix_zimbra_domain_status.sh _ZIMBRA_DOMAIN_NAME_
# где
# _ZIMBRA_DOMAIN_NAME_ - имя домена возвращаемое командой 'zmprov gad'
#
#############################################################################
ZMCOMMAND="sudo -u zimbra /opt/zimbra/bin/zmprov"
EXTDNS=8.8.8.8
RECORD_TYPE=${2:-"MX"}
FILE_ZIMBRA_DOMAIN_STATUS='/tmp/zimbra_domain_status'
FILE_ZIMBRA_DOMAIN_STATUS_TXT='/tmp/zimbra_domain_status_txt'
FILE_ZIMBRA_DOMAIN_LIST='/tmp/zimbra_domain_list'
case "$1" in
discover)
$ZMCOMMAND gad > ${FILE_ZIMBRA_DOMAIN_LIST}
#;;
#discover-json)
# Return a list of running services in JSON
# And create JSON-file
DOMAIN_JSON="{\"data\":["
while read LINE; do
DOMAIN_JSON="${DOMAIN_JSON} {\"{#ZIMBRADOMAIN}\":\"$LINE\"},"
done < "${FILE_ZIMBRA_DOMAIN_LIST}"
echo $(echo $DOMAIN_JSON | sed 's/,\+$//') > ${FILE_ZIMBRA_DOMAIN_LIST}.json
#echo ${DOMAIN_JSON} > ${FILE_ZIMBRA_DOMAIN_LIST}.json
echo -e "]}" >> ${FILE_ZIMBRA_DOMAIN_LIST}.json
exit 0;
;;
read-json-discover)
# Read a JSON and return
if [ ! -f ${FILE_ZIMBRA_DOMAIN_LIST}.json ]; then
echo "File ${FILE_ZIMBRA_DOMAIN_LIST}.json not found"
exit 1
fi
while read LINE; do
echo ${LINE}
done < "${FILE_ZIMBRA_DOMAIN_LIST}.json"
;;
get-domain-records)
# Checking file with domains list
if [ ! -f ${FILE_ZIMBRA_DOMAIN_LIST} ]; then
echo "File ${FILE_ZIMBRA_DOMAIN_LIST} not found"
exit 1
fi
if [ "${RECORD_TYPE}" = "TXT" ]; then
### Getting TXT records
# Delete old file with domain status
if [ -f ${FILE_ZIMBRA_DOMAIN_STATUS_TXT} ]; then
rm -f ${FILE_ZIMBRA_DOMAIN_STATUS_TXT}
fi
# checking SPF records
while read LINE; do
REC=$(dig @${EXTDNS} ${RECORD_TYPE} ${LINE} | grep -i -E -o "spf1 .+")
echo "${LINE} ${REC}" >> "${FILE_ZIMBRA_DOMAIN_STATUS_TXT}"
done < ${FILE_ZIMBRA_DOMAIN_LIST}
else
### Geting MX records from DNS
# Delete old file with domain status
if [ -f ${FILE_ZIMBRA_DOMAIN_STATUS} ]; then
rm -f ${FILE_ZIMBRA_DOMAIN_STATUS}
fi
while read LINE; do
dig @${EXTDNS} ${RECORD_TYPE} ${LINE} | grep -i -E "^([a-z.]+?)\s+?([0-9]+?)\s+?IN\s+?MX\s+?([0-9]+?)" | awk '{print $1 " " $5 " " $6}' | sort -f >> "${FILE_ZIMBRA_DOMAIN_STATUS}"
done < ${FILE_ZIMBRA_DOMAIN_LIST}
fi
;;
*)
CHECK_DOMAIN=$1
if [ "$CHECK_DOMAIN" = "" ]; then
echo "No Zimbra DOMAIN specified..."
exit 1
fi
case "${RECORD_TYPE}" in
MX)
cat ${FILE_ZIMBRA_DOMAIN_STATUS} | grep -i -E "^${CHECK_DOMAIN}" | awk '{print $3 " " $2 }'
;;
TXT)
#cat ${FILE_ZIMBRA_DOMAIN_STATUS_TXT} | awk -v domain=^${CHECK_DOMAIN} 'match($0,domain) {print substr($0,length(domain)+1)}'
REC=$(dig @${EXTDNS} ${RECORD_TYPE} ${CHECK_DOMAIN} | grep -i -E -o "spf1 .+")
echo "${REC}"
;;
esac
;;
esac
exit 0;