120 lines
4.5 KiB
Bash
Executable File
120 lines
4.5 KiB
Bash
Executable File
#!/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;
|