Переезжаем с Яндекс.Почты на свой почтовый сервер. Часть 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 . Ищем нужную версию и скачиваем дистрибутив на сервер:
Распаковываем скачанный архив:
tar -xzvf zcs-*.tgz
Переходим в каталог:
cd zcs-*/
Запускаем установку:
Появится вопрос о принятии лицензионного соглашения – принимаем:
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 завершена