From 4815dae33ea1df0a3c3e4dd5e417a8d552b4e068 Mon Sep 17 00:00:00 2001 From: Sergey Kalinin Date: Fri, 15 Jan 2021 18:51:12 +0300 Subject: [PATCH] Initial release --- README.md | 10 +++ delete-closed-accounts.sh | 69 ++++++++++++++++++ zabbix_zimbra_domain_status.sh | 119 +++++++++++++++++++++++++++++++ zabbix_zimbra_service_check.sh | 121 ++++++++++++++++++++++++++++++++ zimbra_clear_mail_queue.sh | 48 +++++++++++++ zimbra_create_users_from_csv.sh | 28 ++++++++ zimbra_disable_pop3_access.sh | 39 ++++++++++ zimbra_get_list_users.sh | 47 +++++++++++++ zimbra_mta_relay_change.sh | 46 ++++++++++++ 9 files changed, 527 insertions(+) create mode 100644 README.md create mode 100755 delete-closed-accounts.sh create mode 100755 zabbix_zimbra_domain_status.sh create mode 100755 zabbix_zimbra_service_check.sh create mode 100755 zimbra_clear_mail_queue.sh create mode 100755 zimbra_create_users_from_csv.sh create mode 100755 zimbra_disable_pop3_access.sh create mode 100644 zimbra_get_list_users.sh create mode 100755 zimbra_mta_relay_change.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..104cb7b --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# Скрипты для работы с zimbra https://www.zimbra.org/ + +- delete-closed-accounts.sh - удаление закрытых почтовых аккаунтов. +- zabbix_zimbra_domain_status.sh - мониторинг корректности записей в DNS для всех почтовых доменов +- zabbix_zimbra_service_check.sh - проверка почтовых сервисов +- zimbra_clear_mail_queue.sh - удаление из почтовой очереди сообщений и отправка данных в zabbix +- zimbra_create_users_from_csv.sh - создание пользователя в зимбре из файла +- zimbra_disable_pop3_acces.sh - отключение доступа по pop3 для пользователей у кого он включен +- zimbra_get_list_users.sh - получение участников почтового списка рассылки +- zimbra_mta_relay_change.sh - переключение отправки почты с одного сервера на другой и возврат в исходное состояние. \ No newline at end of file diff --git a/delete-closed-accounts.sh b/delete-closed-accounts.sh new file mode 100755 index 0000000..151e63f --- /dev/null +++ b/delete-closed-accounts.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +############################################################################## +# +# Удаление закрытых учетных записей почты через определенное время +# Удаление происходит через месяц после увольнения (на основе комментария) +# +# Автор: Сергей Калинин +# https://nuk-svk.ru +# svk@nuk-svk.ru +############################################################################## + +# Список учётных записей со статусом "Закрыта" (closed) +zmaccts | grep closed | grep @ | while read ACCOUNT_STRING +do + #ACCOUNT=`echo ${ACCOUNT_STRING} | grep @ | awk '{ print $1 }'` + # Квота + #QUOTA_TOTAL=`zmprov ga ${ACCOUNT} | grep "zimbraMailQuota" | cut -d ":" -f2` + # Использовано из квоты + #QUOTA_USAGE=`zmmailbox -z -m ${ACCOUNT} gms` + # Сервер с ящиком + #HOSTED_ON=`zmprov ga ${ACCOUNT} | grep zimbraMailHost | awk -F: '{ print $2 }'` + #echo "-------" + #echo ${ACCOUNT_STRING} + ACCOUNT=`echo ${ACCOUNT_STRING} | awk -F' ' '{print $1}'` + ACCOUNT_CREATE_DATE=`echo ${ACCOUNT_STRING} | awk -F' ' '{print $3 " " $4}'` + ACCOUNT_CREATE_DATE=$(date -d "${ACCOUNT_CLOSE_DATE}" +%s) + # Дата и время последнего заходя в ящик + #LAST_ON=`echo ${ACCOUNT_STRING} | grep zimbraLastLogonTimestamp: | awk -F: '{ print $2 }' ` + LAST_LOGON_DATE=`echo ${ACCOUNT_STRING} | awk -F' ' '{print $5 " " $6}'` + + if [ "${LAST_LOGON_DATE}" != "never " ]; then + LAST_LOGON_DATE_SEC=`date -d "$LAST_LOGON_DATE" +%s` + else + LAST_LOGON_DATE_SEC='0' + fi + + #echo "${ACCOUNT} ${ACCOUNT_CLOSE_DATE} ${ACCOUNT_CREATE_DATE} ${LAST_LOGON_DATE} ${LAST_LOGON_DATE_SEC}" + + NOW_DATE_SEC=$(date +%s) + NOW_DATE=$(date +%d%m%Y) + + # Описание + DESCRIPTION=`zmprov ga ${ACCOUNT} | grep description | awk -F: '{ print $2 }' ` + # Дата увольнения + FIRED_DATE=`echo ${DESCRIPTION} | grep -i 'увольнение' | cut -d ' ' -f2 ` + DAY=`echo ${FIRED_DATE} | cut -c 1,2` + MONTH=`echo ${FIRED_DATE} | cut -c 3,4` + YEAR=`echo ${FIRED_DATE} | cut -c 5,8` + FIRED_DATE_SEC=$(date -d "${YEAR}${MONTH}${DAY} 23:59" +%s) + + #echo "${NOW_DATE} ${NOW_DATE_SEC} ${ACCOUNT}; Close: ${ACCOUNT_CREATE_DATE} ${ACCOUNT_CREATE_DATE}; Last: ${LAST_LOGON_DATE} ${LAST_LOGON_DATE_SEC}; ${DESCRIPTION}; Fired: ${FIRED_DATE} ${FIRED_DATE_SEC}" + + #Дата удаления (дата увольнения + 1 месяц) + if [ "${LAST_LOGON_DATE_SEC}" -gt 0 ]; then + DELETE_DATE=$(date +%Y%m%d -d "${YEAR}${MONTH}${DAY} + 1 month") + else + DELETE_DATE=$(date +%Y%m%d -d "${YEAR}${MONTH}${DAY}") + fi + + DELETE_DATE_SEC=$(date +%s -d "${DELETE_DATE} 23:59") + + if [ "${DELETE_DATE_SEC}" -le "${NOW_DATE_SEC}" ]; then + # Удаление ящика + #echo "${NOW_DATE}: Удаление: ${ACCOUNT}; ${QUOTA_USAGE}; ${HOSTED_ON}; ${LAST_ON}; ${DESCRIPTION}; ${FIRED_DATE}; ${DELETE_DATE}" + zmprov da ${ACCOUNT} + echo "Date: ${NOW_DATE}; Account: ${ACCOUNT}; Create date: ${ACCOUNT_CREATE_DATE}; Last logon: ${LAST_LOGON_DATE}; ${DESCRIPTION}; Fired: ${FIRED_DATE}; Deleted: ${DELETE_DATE}" + fi +done \ No newline at end of file diff --git a/zabbix_zimbra_domain_status.sh b/zabbix_zimbra_domain_status.sh new file mode 100755 index 0000000..af606c5 --- /dev/null +++ b/zabbix_zimbra_domain_status.sh @@ -0,0 +1,119 @@ +#!/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; diff --git a/zabbix_zimbra_service_check.sh b/zabbix_zimbra_service_check.sh new file mode 100755 index 0000000..9250884 --- /dev/null +++ b/zabbix_zimbra_service_check.sh @@ -0,0 +1,121 @@ +#!/bin/bash + +################################################ +# Get and checking Zimbra services. +# +# Author: Sergey Kalinin +# https://nuk-svk.ru +# svk@nuk-svk.ru +################################################ +# +# Discover services and making JSON file for Zabbix +# ./zabbix_zimbra_service_check.sh discover +# +# Get status for all zimbra services and create file for next tasks +# ./zabbix_zimbra_service_check.sh get-all-status +# +# Read JSON for send into zabbix +# ./zabbix_zimbra_service_check.sh read-json-discover +# +# Checking service +# ./zabbix_zimbra_service_check.sh _ZIMBRA_SERVICE_NAME_ +# +# Where _ZIMBRA_SERVICE_NAME_ - name of zimbra service returned by command "zmcontrol status" +# +################################################### +# Based on: +# +# Zabbix script to check Zimbra services and perform service discovery. +# Supports Zimbra 8.6 and "two-worded" service names +# Author: Lorenzo Milesi +# Copytight: YetOpen S.r.l. 2015 +# License: GPLv3 +# +################################################### + +# uncomment for debug +#set -x + +COMMAND="sudo -u zimbra /opt/zimbra/bin/./zmcontrol" + +FILE_ZIMBRA_SERVICE_STATUS='/tmp/zimbra_service_status' +FILE_ZIMBRA_SERVICE_LIST='/tmp/zimbra_service_list' + +# Maximum file age in seconds (20 min) +MAXAGE=1200 + +case "$1" in + version) + # Return zimbra version + VERS=$($COMMAND -v) + if [ $? -eq 0 ] ; then + echo $VERS + exit 0; + fi + # error + exit 1; + ;; + discover) + # Return a list of running services in JSON + # And create JSON-file + echo "{" > ${FILE_ZIMBRA_SERVICE_LIST}.json + echo -e "\t\"data\":[\n" >> ${FILE_ZIMBRA_SERVICE_LIST}.json + SRVCS=$($COMMAND status | grep -v Host | awk '{$(NF--)=""; print}' | sed 's/^/\t{ \"{#ZIMBRASERVICE}\":\"/' | sed 's/\ $/\" },/') + # Remove last comma from the sting, to make a good JSON + echo $(echo $SRVCS | sed 's/,\+$//') >> ${FILE_ZIMBRA_SERVICE_LIST}.json + echo -e "\n\t]\n" >> ${FILE_ZIMBRA_SERVICE_LIST}.json + echo "}" >> ${FILE_ZIMBRA_SERVICE_LIST}.json + exit 0; + ;; + read-json-discover) + # Read a JSON and return + if [ ! -f ${FILE_ZIMBRA_SERVICE_LIST}.json ]; then + echo "File ${FILE_ZIMBRA_SERVICE_LIST}.json not found" + exit 1 + fi + + while read LINE; do + echo ${LINE} + done < "${FILE_ZIMBRA_SERVICE_LIST}.json" + ;; + get-all-status) + $COMMAND status| grep -v Host | /usr/bin/tr -d "\t" > ${FILE_ZIMBRA_SERVICE_STATUS} + ;; + *) + # move on... + CHECK=$1 + + if [ "$CHECK" = "" ]; then + echo "No Zimbra service specified..." + exit 1 + fi + + if [ ! -f $FILE_ZIMBRA_SERVICE_STATUS ]; then + echo "File $FILE_ZIMBRA_SERVICE_STATUS not found" + exit 1 + fi + #check if cached status file size > 0 + # and age of file + if [ -s ${file} ]; then + OLD=`stat -c %Z $FILE_ZIMBRA_SERVICE_STATUS` + NOW=`date +%s` + #echo $OLD + + # if older then maxage, update file + if [ `expr $NOW - $OLD` -gt ${MAXAGE} ]; then + echo "File $FILE_ZIMBRA_SERVICE_STATUS is to old" + exit 1 + fi + fi + + STATUS="$(cat $FILE_ZIMBRA_SERVICE_STATUS | grep -w "$CHECK" | awk '{print $NF}')" + + if [ "$STATUS" != "Running" ]; then + echo 0 + else + echo 1 + fi + ;; +esac + +exit 0; diff --git a/zimbra_clear_mail_queue.sh b/zimbra_clear_mail_queue.sh new file mode 100755 index 0000000..5de3f50 --- /dev/null +++ b/zimbra_clear_mail_queue.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +############################################################№ +# Удаление из почтовой очереди сообщений зависших с ошибкой: +# "lost connection with 127.0.0.1" +############################################################# +# Автор: Сергей Калинин +# https://nuk-svk.ru +# svk@nuk-svk.ru +############################################################################## + +# Количество сообщений после которого нужно бить тревогу +MESSAGE_COUNT=30 +ZIMBRA_BIN_PATH="/opt/zimbra/common/sbin/" +ZABBIX_SENDER="/usr/bin/zabbix_sender" +MAIL_SERVER=${HOSTNAME} + +TODAY=$(date +"%d") + +# получаем список потребных сообщений из очереди +MESSAGE_LIST=$(${ZIMBRA_BIN_PATH}/postqueue -p | grep -A 1 -B 1 "lost connection with 127.0.0.1") +#MESSAGE_LIST=$(cat /tmp/queue | grep -A 1 -B 1 "lost connection with 127.0.0.1") + +# считаем их количество иесли превышает установленное значение завершаем скрипт с ошибкой +MSG_COUNT=$(echo "${MESSAGE_LIST}" | cut -d " " -f 1 | grep -E "[A-Z0-9].+" | wc -l) +# отправлям данные в заббикс +${ZABBIX_SENDER} -c /etc/zabbix/zabbix_agentd.conf -s "${MAIL_SERVER}" -k queue.error.message.count -o $MSG_COUNT + +if [ "${MSG_COUNT}" -ge "${MESSAGE_COUNT}" ]; then + echo "Many error messages" + exit 1 +fi + +# Удаление сообщений старше 1 дня +echo "${MESSAGE_LIST}" | while read LINE; do + MSG_DAY=$(echo ${LINE} | grep -E "^[A-Z0-9].+" | awk '{print $3,$4,$5,$6}') + if [[ -n ${MSG_DAY} ]]; then + # определяем дату (число) сообщения + MSG_DAY=$(date -d "$(echo ${LINE} | grep -E "^[A-Z0-9].+" | awk '{print $3,$4,$5,$6}')" +%d) + #echo $MSG_DAY + if [ ${MSG_DAY} != ${TODAY} ]; then + MESSAGE_ID=$(echo "${LINE}" | cut -d " " -f 1 | grep -E "[A-Z0-9].+") + # echo "$MSG_DAY $MESSAGE_ID" + # Delete messages + ${ZIMBRA_BIN_PATH}/postsuper -d $MESSAGE_ID + fi + fi +done diff --git a/zimbra_create_users_from_csv.sh b/zimbra_create_users_from_csv.sh new file mode 100755 index 0000000..7c70dea --- /dev/null +++ b/zimbra_create_users_from_csv.sh @@ -0,0 +1,28 @@ +#!/usr/bin/bash +#################################################### +# +# Создание юзеров в почте из csv +# +# Формат файла: +# ---------- +# Наименование 1;user1@example.com;password1 +# Наименование 2;user2@example.com;password2 +# Наменование 3;user2@example.com;password3 +# ... +##################################################### +# Автор: Сергей Калинин +# https://nuk-svk.ru +# svk@nuk-svk.ru +##################################################### + +ZMPROV=/opt/zimbra/bin/zmprov + +while read LINE; do + #echo $LINE + name=$(echo ${LINE} | cut -d ";" -f 1) + email=$(echo ${LINE} | cut -d ";" -f 2) + pass=$(echo ${LINE} | cut -d ";" -f 3 | tr -d "\r\n") + login=$(echo ${email} | cut -d "@" -f 1) + ${ZMPROV} ca ${email} ${pass} zimbraCOSid "11ababa-22-ccc-2222aaa" sn "${login}" cn "${email}" displayName "${name}" zimbraPasswordMustChange FALSE zimbraFeaturePop3DataSourceEnabled FALSE zimbraPop3Enabled FALSE zimbraMailQuota 5728640000 + +done < ${1} \ No newline at end of file diff --git a/zimbra_disable_pop3_access.sh b/zimbra_disable_pop3_access.sh new file mode 100755 index 0000000..99342cb --- /dev/null +++ b/zimbra_disable_pop3_access.sh @@ -0,0 +1,39 @@ +#!/usr/bin/bash + +######################################################### +# +# Получение списка учёток с включенным доступом по POP3 +# и выключение доступа +# +######################################################### +# Автор: Сергей Калинин +# https://nuk-svk.ru +# svk@nuk-svk.ru +######################################################### + + +# Получаем список аккаунтов со статусом "active" +/opt/zimbra/bin/zmaccts | /usr/bin/grep -E "active" | grep -E "@(domain1|domain2|domain3)\.ru" | awk '{print $1}' | while read ACCOUNT; do + # для каждого аккаунта получаем настройки доступа + ACCOUNT_STR=$(/opt/zimbra/bin/zmprov ga ${ACCOUNT} zimbraFeaturePop3DataSourceEnabled zimbraPop3Enabled) + #echo ${ACCOUNT_STR} + POP3_EXT_ACCESS=$(echo $ACCOUNT_STR | grep -E -i -o "zimbraFeaturePop3DataSourceEnabled:\s+(TRUE)" | awk '{print $2}') + + # и если статус TRUE, генерим команду для изменения + if [ ${POP3_EXT_ACCESS} ]; then + POP3_EXT_DISABLED_CMD="zimbraFeaturePop3DataSourceEnabled FALSE" + fi + + POP3_ACCESS=$(echo $ACCOUNT_STR | grep -E -i -o "zimbraPop3Enabled:\s+(TRUE)" | awk '{print $2}') + + if [ ${POP3_ACCESS} ]; then + POP3_DISABLED_CMD="zimbraPop3Enabled FALSE" + fi + + # если хоть одна из настроек была включена (статус TRUE) то выполняем команду. + echo "$ACCOUNT, POP3=${POP3_ACCESS}, POP3_EXT=${POP3_EXT_ACCESS}" + if [[ $POP3_EXT_ACCESS || ${POP3_ACCESS} ]]; then + /opt/zimbra/bin/zmprov ma ${ACCOUNT} ${POP3_EXT_DISABLED_CMD} ${POP3_DISABLED_CMD} + fi + +done diff --git a/zimbra_get_list_users.sh b/zimbra_get_list_users.sh new file mode 100644 index 0000000..4ba7d62 --- /dev/null +++ b/zimbra_get_list_users.sh @@ -0,0 +1,47 @@ +#!/usr/bin/bash + +#################################################################### +# +# Получение списка пользователей участников списка(ов) рассылки +# +#################################################################### +# Автор: Сергей Калинин +# https://nuk-svk.ru +# svk@nuk-svk.ru +#################################################################### +# +# Использование: +# +# get_lists_users.sh mail-lists.txt +# +# Где mail-lists.txt файл с перечислением списков рассылки +# +# Формат файла: +# ---------- +# list1@example.com +# list2@example.com +# ... +# ----------- +# +# На выходе будет CSV формата: +# ---------- +# Список - list1@example.com; +# user1@example.com +# user2@example.com +# ... +# Список - list2@example.com; +# user1@example.com +# user3@example.com +# ... +# +#################################################################### + +IN_FILE=$1 + +while read LIST_NAME; do + echo "Список - $LIST_NAME;" + /opt/zimbra/bin/zmprov gdl $LIST_NAME | grep zimbraMailForwardingAddress | cut -d":" -f 2 | tr -d " "| while read USER; do + NAME=$(/opt/zimbra/bin/zmprov ga $USER | grep displayName | cut -d":" -f 2) + echo "$USER;$NAME" + done +done < $IN_FILE \ No newline at end of file diff --git a/zimbra_mta_relay_change.sh b/zimbra_mta_relay_change.sh new file mode 100755 index 0000000..9611a24 --- /dev/null +++ b/zimbra_mta_relay_change.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +################################################ +# +# Включение отправки исходящей почты +# через другой сервер +# +# Автор: Сергей Калинин +# https://nuk-svk.ru +# svk@nuk-svk.ru +################################################ +# +# Использование: +# - включение отправки через релей: +# +# ./zimbra_mta_relay_change TARGET_HOST RELAY_HOST +# +# - отключение отправки через релей +# +# ./zimbra_mta_relay_change TARGET_HOST +# +############################################### + + +ZIMBRA_BIN=/opt/zimbra/bin +TARGET_HOST=${1} +RELAY_HOST=${2} + +if [ -z "$1" ]; then + echo "usage for enable relay sending:" + echo " ./zimbra_mta_relay_change TARGET_HOST RELAY_HOST" + echo "" + echo "usage for disable relay sending:" + echo " ./zimbra_mta_relay_change TARGET_HOST" + exit +fi +if [ -z "$2" ]; then + $ZIMBRA_BIN/zmprov ms "${TARGET_HOST}" zimbraMtaRelayHost "" + $ZIMBRA_BIN/zmprov ms "${TARGET_HOST}" zimbraMtaMyDestination "localhost" +else + $ZIMBRA_BIN/zmprov ms "${TARGET_HOST}" zimbraMtaRelayHost "${RELAY_HOST}:25" + $ZIMBRA_BIN/zmprov ms "${TARGET_HOST}" zimbraMtaMyDestination "localhost ${RELAY_HOST}" +fi + +$ZIMBRA_BIN/zmmtactl stop +$ZIMBRA_BIN/zmmtactl start