Initial release
commit
4815dae33e
|
@ -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 - переключение отправки почты с одного сервера на другой и возврат в исходное состояние.
|
|
@ -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
|
|
@ -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;
|
|
@ -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 <maxxer@yetopen.it>
|
||||||
|
# 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;
|
|
@ -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
|
|
@ -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}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue