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