Перейти к основному содержанию

ghettoVCB — чиним почту

Mail Почта

Настраивал я как-то резервное копирование виртуальных машин с помощью ghettoVCB  на отдельно стоящем гипервизоре ESXi 7. Всё отлично, резервное копирование работает, но почта не отправляется.

Резервное копирование виртуальных машин с помощью ghettoVCB

Скрипт ghettoVCB выполняет резервное копирование виртуальных машин, размещенных на серверах ESX(i) 3.x, 4.x, 5.x, 6.x, 7.x и 8.x, используя методологию, аналогичную инструменту VMware VCB. Скрипт создает моментальные снимки работающих виртуальных машин, делает резервные копии главных VMDK, затем удаляет моментальный снимок до следующего резервного копирования. выполняется на ESXi.

Разработчик скрипта указывает, что проблема может быть в медленном почтовом сервере, и предлагает некоторый путь решения, заключающийся в указании в конфигурационном файле параметра EMAIL_DELAY_INTERVAL, который устанавливает задержку в секундах при общении с почтовым сервером. Вот только этого недостаточно, письмо всё равно не отправляется.

Починим. Отредактируем файл ghettoVCB.sh. После внесения небольших изменений в код получил список ответов от почтового сервера при отправке письма:

220 mail.moipartner.ru ESMTP
250 Hello.
250 OK
250 OK
354 OK, send.

esxi

Получается, скрипт соединяется с сервером, общается без проблем, потом после получения ответа "354 OK, send." ничего не происходит. Такой ощущение, что связь рвётся. Лезу в код, нахожу функцию sendDelay() и смотрю.

sendDelay() {
    c=0
    while read L; do
    	[ $c -lt 4 ] && sleep ${EMAIL_DELAY_INTERVAL}
    	c=$((c+1))
    	echo $L
    done
}

esxi

Странная картина, первые пять команд отрабатывают с задержкой в EMAIL_DELAY_INTERVAL секунд (у меня в конфигурационной файле EMAIL_DELAY_INTERVAL=1). А остальные команды проходят без задержки. Естественно, они в какой-то момент отваливаются, почтовый сервер просто не успевает.

Переписываю функцию.

sendDelay() {
    while read L; do
        sleep ${EMAIL_DELAY_INTERVAL}
        echo $L
    done
}

esxi

Теперь задержка в 1 секунду будет на каждой строке. С учётом того, что в письме будет лог отправки, то письмо будет улетать около минуты. А то и больше, если лог большой.

Загружаю скрипт на сервер.

esxi

Пуляю бэкап. Ситуация меняется:

220 mail.moipartner.ru ESMTP
250 Hello.
250 OK
250 OK
354 OK, send.
250 Queued (50.456 seconds)
221 goodbye

Теперь вижу "250 Queued", это означает, что почтовый сервер принял письмо к отправке. Кстати, письмо отправлялось 50 секунд, но я это переживу. Заглядываю в свой почтовый ящик:

esxi

Письмо пришло!

Настройка Firewall

При бэкапе вы можете видеть в логе ошибку:

ERROR: Please enable firewall rule for email traffic on port 25

Проблема в том, что вы не настроили Firewall.

В гипервизоре ESXi имеется встроенный Firewall. В нём предустановлен ряд правил, удовлетворяющих разработанному функционалу. Однако, имеющиеся правила не всегда покрывают все необходимые порты, иногда требуется дополнительный функционал. Открываю на выход 25 порт. Создам собственный VIB пакет для внесения изменений в Firewall.

Для удобства всё описание вынесено в отдельную статью:

ESXi 7.0 Firewall — добавляем правило для исходящей почты

В статье подробно описана процедура создания и установки VIB пакета, можно скачать готовый. Собственно, пакет я назвал fw-mail. Скачать его можно в Сборке для VMware. Пакет добавляет правило firewall, которое позволяет отправлять уведомления на внешний почтовый сервер.

Копирую ZIP пакет на хост в папку /tmp.

mail

Запускаю службу SSH на хосте, подключаюсь. Проверяю содержимое папки tmp.

mail

ZIP файл присутствует. Разрешаю установку программ и драйверов со сторонними сертификатами. Для этого перед установкой выполняю команду:

esxcli software acceptance set --level=CommunitySupported

Устанавливаю пакет:

esxcli software vib install -d /tmp/fw-mail-1.0-1-offline_bundle.zip

mail

Пакет установлен. В списке установленных VIB пакетов имеется наш новый пакет.

esxcli software vib list | grep mail

mail

Наш XML файл появился в папке /etc/vmware/firewall.

mail

Теперь правило firewall никуда не должно пропасть после перезагрузки хоста. Проверяю — перезагружаю службу firewall.

esxcli network firewall refresh
esxcli network firewall ruleset list | grep Mail

mail

Networking → Firewall rules. Появилось новое правило:

  • Mail

mail

Включаю его.

mail

Actions → Enable.

mail

Доступ для отправки почты появился. Проверить можно с помощью nc.

nc -vz 192.168.1.11 25

esxi

Порт открыт.

 

Похожие материалы