18

Переезжаем с Яндекс.Почты на свой почтовый сервер. Часть 2

Disclaimer
Я не претендую на истину в последней инстанции, выбор есть, и не маленький, можно хоть на голом postfix+postfix-admin+roundcube поднять, dovecot или mailcow. Каждый выбирает тот набор продуктов, какой он захочет.

Подготовка

Продолжаем устанавливать. Теперь ставим сам почтовый сервер – Zimbra. Он поддерживает RHEL-подобные системы 7 и 8 версии, а также Ubuntu LTS от 16.04 до 20.04. Я рассмотрю установку на Rocky Linux 8. Во время установки ОС надо обратить внимание на 2 вещи – корректный часовой пояс и включенную синхронизацию времени. Если Вы ошиблись с часовым поясом, то исправим его:

timedatectl set-timezone Asia/Krasnoyarsk

В данном случае мы задали Красноярское время.
Проверяем статус утилиты синхронизации времени:

systemctl status chronyd

Если она не запущена, то запускаем:

systemctl enable chronyd --now

Если не установлена, то устанавливаем и запускаем:

yum install chrony
systemctl enable chronyd --now

Если Вы решили использовать RHEL-подобную систему, то рекомендуется отключить SELinux. Для этого используем две команды:

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Для своей работы Zimbra OSE использует следующие порты:
25 — основной порт для обмена почтой по протоколу SMTP
80 — веб-интерфейс для чтения почты (http)
443 — SSL веб-интерфейс для чтения почты (https)
465 — безопасный SMTP для отправки почты с почтового клиента
993 — SSL IMAP для работы с почтовым ящиком с помощью клиента
995 — SSL POP3 для загрузки почты
7071 — для защищенного доступа к администраторской консоли
Т.к. у нас Zimbra будет работать в связке с PMG, то 25 порт заменится на 26.

Если Zimbra стоит за NAT’ом, то рекомендую не прокидывать порт 7071, а использовать его только внутри сети. Так безопаснее. В любом случае, необходимо открыть эти порты в файерволле:

firewall-cmd --permanent --add-port={26,80,443,465,993,995,7071}/tcp

firewall-cmd –reload

Для Zimbra важно, что бы её внешнее имя было прописано локально. Поэтому задаём имя сервера:

hostnamectl set-hostname mail.example.org

Теперь открываем файл hosts:

nano /etc/hosts

И добавляем:

IP_адрес mail.example.org mail

На этом подготовка завершена

Установка Zimbra

Страница загрузки находится по адресу https://www.zimbra.com/downloads/zimbra-collaboration-open-source . Ищем нужную версию и скачиваем дистрибутив на сервер:

wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-8.8.15_GA_4362.RHEL8_64.20220721104405.tgz

Распаковываем скачанный архив:

tar -xzvf zcs-*.tgz

Переходим в каталог:

cd zcs-*/

Запускаем установку:

./install.sh

Появится вопрос о принятии лицензионного соглашения – принимаем:

Do you agree with the terms of the software license agreement? [N] Y

Разрешаем использование репозитория Zimbra:

Use Zimbra's package repository [Y] Y

И соглашаемся на установку всех модулей, кроме zimbra-imapd:

Install zimbra-ldap [Y] Y
Install zimbra-logger [Y] Y
Install zimbra-mta [Y] Y
Install zimbra-dnscache [Y] Y
Install zimbra-snmp [Y] Y
Install zimbra-store [Y] Y
Install zimbra-apache [Y] Y
Install zimbra-spell [Y] Y
Install zimbra-convertd [Y] Y
Install zimbra-memcached [Y] Y
Install zimbra-proxy [Y] Y
Install zimbra-archiving [N] Y
Install zimbra-drive [Y] Y
Install zimbra-imapd (BETA - for evaluation only) [N] N
Install zimbra-network-modules-ng [Y] Y
Install zimbra-talk [Y] Y

Подтверждаем ранее введённые настройки:

The system will be modified. Continue? [N] Y

Начался процесс установки, ждём окончания.

Если Ваш сервер находится за NAT или Вы ещё не настроили домен, то появился сообщение, что нет записи MX:

It is suggested that the domain name have an MX record configured in DNS

Просто игнорируем его.

Установщик предложит поменять домен – не соглашаемся

Change domain name? [Yes] No

Далее установщик покажет меню настройки. Нас интересует строка Admin Password UNSET. Вводим 7, затем 4 и устанавливаем пароль администратора. Затем выходим из меню (r) и применяем настройки (a).

Сохраняем конфигурацию:

Save configuration data to a file? [Yes] Y

The system will be modified - continue? [No] Y

И ждём окончания установки. На запрос отправки уведомления об установке отвечаем по своему усмотрению (по умолчанию Да)

Notify Zimbra of your installation? [Yes]

В конце концов всё установится, и просто нажимаем Enter

Configuration complete - press return to exit

Установщик меняет пароль root, поэтому необходимо изменить его обратно:

passwd root

Небольшая донастройка

Вместе с Zimbra поставился пакет dnscache, установщик меняет DNS-сервера в сервере и перестаёт работать разрешение DNS имён. Исправим это. Для начала посмотрим, какой мастер DNS прописан в конфигурации:

su - zimbra -c "zmprov getServer 'mail.example.org' | grep DNSMasterIP"

В моём случае последний октет разный, пусть будет 127.0.0.48:

zimbraDNSMasterIP: 127.0.0.48

Удаляем данную запись:

su - zimbra -c "zmprov ms 'mail.example.org' -zimbraDNSMasterIP 127.0.0.48"

И добавляем свои DNS сервера:

su - zimbra -c "zmprov ms 'mail.example.org' +zimbraDNSMasterIP  IP_адрес"

Если сервер находится за NAT, то после настройки сервер не сможет принимать почту, а в логах можно увидеть ошибку delivery temporarily suspended: connect to 7025: Connection refused). Это происходит из-за попытки передать письмо из очереди в ящик по внешнему порту 7025, который недоступен из-за NAT. Исправим это:

su - zimbra -c "zmprov ms mail.example.org zimbraMtaLmtpHostLookup native"

su - zimbra -c "zmprov mcf zimbraMtaLmtpHostLookup native"

Т.к. Zimbra работает в связке с PMG, то добавим для SMTP 26 порт:

nano /opt/zimbra/common/conf/master.cf.in

И после строки

smtp inet n - n - 1 postscreen

Добавляем строку

26 inet n - n - - smtpd

После всех манипуляций перезапускаем службы:

su - zimbra -c "zmmtactl restart"

SSL сертификат Let’s Encrypt

Без этого сертификата не будут работать почтовые клиенты, а также, при входе через WEB, будет выскакивать назойливое сообщение о небезопасном подключении. Так приступим же к установке!

yum install certbot

Перед выпуском сертификата выполняем тестовый выпуск:

certbot certonly --dry-run --standalone -d mail.example.org

Если всё хорошо и ошибок нет, то выпускаем сертификат:

certbot certonly --standalone -d mail.example.org

В процессе будет запрошен e-mail администратора и два вопроса:
1) О согласии с лицензионным соглашением
2) О предоставлении своего почтового ящика для рассылки
Соглашаться ли со вторым пунктом – дело Ваше

После выпуска сертификата переходим в каталог Let’s Encrypt с Вашим доменом, качаем корневые сертификаты и формируем корректную цепочку, что бы Zimbra её приняла:

cd /etc/letsencrypt/live/mail.example.org/
wget -4 -O /etc/letsencrypt/live/mail.example.org/isrgrootx1.pem https://letsencrypt.org/certs/isrgrootx1.pem.txt
wget -4 -O /etc/letsencrypt/live/mail.example.org/letsencryptauthorityx3.pem https://letsencrypt.org/certs/letsencryptauthorityx3.pem.txt
cat /etc/letsencrypt/live/mail.example.org/isrgrootx1.pem > /etc/letsencrypt/live/mail.example.org/zimbra_chain.pem
cat /etc/letsencrypt/live/mail.example.org/letsencryptauthorityx3.pem >> /etc/letsencrypt/live/mail.example.org/zimbra_chain.pem
cat /etc/letsencrypt/live/mail.example.org/chain.pem >> /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem

Создадим папку letsencrypt в структуре каталогов Zimbra и скопируем туда полученные сертификаты:

mkdir /opt/zimbra/ssl/letsencrypt

cp /etc/letsencrypt/live/mail.example.org/* /opt/zimbra/ssl/letsencrypt/

Назначим права на эти файлы и проведем верификацию:

chown zimbra:zimbra -R /opt/zimbra/ssl/letsencrypt

su - zimbra -c "zmcertmgr verifycrt comm /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/zimbra_chain.pem"

Успешный вывод:

** Verifying '/opt/zimbra/ssl/letsencrypt/cert.pem' against '/opt/zimbra/ssl/letsencrypt/privkey.pem'

Certificate '/opt/zimbra/ssl/letsencrypt/cert.pem' and private key '/opt/zimbra/ssl/letsencrypt/privkey.pem' match.

** Verifying '/opt/zimbra/ssl/letsencrypt/cert.pem' against '/opt/zimbra/ssl/letsencrypt/zimbra_chain.pem'

Valid certificate chain: /opt/zimbra/ssl/letsencrypt/cert1.pem: OK

Переименовываем закрытый ключ, перемещаем в каталог коммерческих сертификатов, выполняем установку и перезапускаем службы Zimbra:

mv /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key

su - zimbra -c "zmcertmgr deploycrt comm /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/zimbra_chain.pem"

su - zimbra -c "zmcontrol restart"

Данный сертификат выпускается на 3 месяца. В последние дни сертификата его необходимо перевыпустить:

certbot renew

После чего повторяем все шаги, начиная с «После выпуска сертификата переходим в каталог Let’s Encrypt»

На этом установка Zimbra завершена