Disclaimer
Я не претендую на истину в последней инстанции, выбор есть, и не маленький, можно хоть на голом postfix+postfix-admin+roundcube поднять, dovecot или mailcow. Каждый выбирает тот набор продуктов, какой он захочет.
Итак, раз обещал инструкцию по относительно простому развёртыванию почтового сервера, то надо исполнять. Статья получилась длинной, так что пришлось разбить на 3 части. Выбор мой пал на Zimbra 8 OSE, потому что ранее уже работал с ним, достался в наследство от прошлого системного администратора у одного из клиентов. Да, последняя версия 8.8.15 и больше выпускать не будут, но есть форк – Carbonio, но он пока не совсем стабильный и использовать полусырой продукт в продакшне не очень-то и хочется. Надеюсь, за пару лет его хорошо допилят и можно будет переезжать на него.
Перед Zimbr’ой было решено поставить Proxmox Mail Gateway – у него более продвинутый антиспам с кучей настроек, из коробки есть TLS и DKIM, да и в целом более современный продукт защиты почтового сервера.
Весь этот набор я, обычно, ставлю на Proxmox VE – гипервизор, в котором создаю 2 виртуалки, одну для Zimbr’ы, вторую для PMG. Во первых, не надо плодить лишнего железа, а во вторых будет проще перенести виртуалки на другой сервер, если с железом что-то случится, чем заново всё поднимать и раскатывать из бэкапов. Ну и сами бэкапы виртуалок тоже просто делать, буквально пару кликов мышки.
Весь этот набор, на одной из последних инсталляций, крутится на HP Proliant DL320 G6 с процессором Intel Xeon E5630 и 32 GB RAM с 50 средне-активными ящиками, примерно по 30 писем в день на каждом. Для PMG выдано 4 потока процессора и 4 GB RAM, для Zimbra 4 потока и 8 GB RAM. В принципе, хватает. И да, я знаю, что сервер старый. Все риски с заказчиком проговорили, таков путь его бюджет.
Как ставить PVE и PMG есть куча статей в инете, здесь я расскажу про настройку PMG, установку и настройку Zimbra, а так же настройку домена.
Самое главное – у почтового сервера должен быть белый IP-адрес. Сервер не обязательно должен смотреть напрямую в интернет, можно через роутер пустить, но тогда необходимо прокинуть порты на него.
Для начала определимся в типах записи домена
А – служит для преобразования имени хоста в IP-адрес
MX – определяет, на каком хосте находится почтовый сервер, а так же порядок его использования
TXT – общая текстовая информация, в данном случае служит для настройки записей SPF, DMARC и DKIM
PTR – обратная запись DNS. Служит для проверки нахождения почтового сервера на конкретном IP-адресе
SPF – служит для проверки, с каких почтовых серверов разрешена отправка писем
DMARC – указывает, что делать с письмами, если записи SPF и DKIM окажутся некорректными
DKIM – служит для подписания писем закрытым ключом, таким образом, сервер-получатель знает, что письмо отправлено именно с Вашего почтового сервера, а не с фишингового.
Наш почтовый сервер будет иметь домен mail.example.org. Для начала, необходимо запросить у провайдера/хостера (смотря где находится сервер) прописать PTR-запись на Ваш IP-адрес вида mail.example.org
Затем идём в управление DNS-зонами домена (если используете DNS регистратора) и добавляем следующие записи:
1) Создаём домен mail.example.org, делаем запись типа А с IP-адресом сервера.
2) Переходим в домен example.org, добавляем записи MX с приоритетом 10 и адресом mail.example.org и TXT запись со значением v=spf1 mx –all.
3) Создаём домен _dmarc.example.org и добавляем туда TXT запись со значением v=DMARC1; p=none
Обновление DNS-записей домена может доходить до суток, но на моей практике всё обновлялось в течении 30 минут.
После установки PMG заходим по SSH и, первым делом, отключаем коммерческий репозиторий и добавляем бесплатный:
rm /etc/apt/sources.list.d/pmg-enterprise.list
touch /etc/apt/sources.list.d/pmg-no-subscription.list
Заходим в pmg-no-subscription.list:
nano /etc/apt/sources.list.d/pmg-no-subscription.list
Выходим с сохранением (Ctrl+X) и обновляем систему:
apt update && apt upgrade –y
Если в списке обновляемых файлов было ядро (pve-kernel-*), то перезагружаем PMG после обновления, что бы он загрузился на новом ядре:
Проверяем, что бы имя сервера соответствовало его локальному IP-адресу
В этом файле должна быть запись вида IP_адрес mail-gw.example.org mail-gw, при этом IP_адрес НЕ 127.0.0.1.
После всех описанных процедур заходим браузером на https://ip:8006 и вводим логин-пароль, который указали при установке
Идём во вкладку Configuration-Network/Timeи, при необходимости, правим часовой пояс, время и настройки DNS
Затем идём в Options и правим настройки отчётов
А теперь переходим к настройке самого релея. Идём в Configuration – Mail Proxy и указываем в поле Default Relay адрес почтового сервера, на который PMG будет пересылать всю почту
Далее в Relay Domains указываем, какие домены будет обслуживать PMG и почтовый сервер. Это один из этапов защиты, если не указать домен, то письма будут автоматически отбрасываться.
Во вкладке Ports указываем наружный и внутренний SMTP порты. Советую оставить по умолчанию, далее в Zimbra заменим порт SMTP на 26.
Во вкладке Options я, как правило, правлю 3 пункта – Message Size (размер письма, ставлю 50 мбайт), Use SPF = yes (SPF-запись нужна для настройки домена, что бы другие почтовые сервера понимали, с каких серверов для этого домена разрешена отправка писем) и SMTPD Banner (что бы при приветствии сервера по SMTP протоколу не палиться, что это PMG).
Далее – DKIM. Включаем подпись DKIM, указываем селектор и говорим, что необходимо подписывать все исходящие письма DKIM-ключом
Затем, чуть ниже в Sign Domains добавляем домен example.org.
Затем идём в генератор DKIM (например, https://2ip.ru/dkim), задаём имя домена example.org, селектор mail и размер ключа (2048). Получаем три записи – Private Key, Public Key и TXT-запись в домен. Если присмотреться, то увидите, что в TXT записи есть пробелы – это нормально, так и должно быть. Опять идём в управление DNS-зонами домена и добавляем домен mail._domainkey.example.org, создаём в нём TXT запись и вставляем всё, что окажется в поле «TXT запись», начиная с V=DKIM и до конца, исключая кавычки. Для проверки, что DKIM-запись в домене появилась и она правильная, идём на сервис проверки DKIM (например, https://dmarcian.com/dkim-inspector), прописываем имя домена, селектор и нажимаем «Inspect DKIM». Если запись правильная, то появится надпись «Congratulations! Your DKIM record is valid».
Затем подключаемся по SSH к PMG и открываем файл /etc/pmg/dkim/mail.private
nano /etc/pmg/dkim/mail.private
Удаляем всё содержимое и вставляем с поля «Приватный ключ» с сайта 2ip.ru.
Может возникнуть вопрос – а зачем было менять ключ, если он есть, почему нельзя было его скопировать в DNS-запись? Отвечаю – отсутствие пробелов в нужных местах. В DNS родная запись PMG будет выглядеть одной строкой, и такая запись будет невалидна из-за своей длины.
И есть ещё 3 неочевидных момента, с которыми я, на первой инсталляции, промучался долго.
SMTP_HELO - это приветствие между почтовыми серверами. Сервер должен представляться своим почтовым доменом (в нашем случае mail.example.org), однако PMG подставляет туда своё локальное имя (в моём случае mail-gw.example.local). Исправим это.
Проверяем, что существует папка /etc/pmg/templates. Если нет, то создадим её
Копируем шаблон настроек и открываем в редакторе
cp /var/lib/pmg/templates/main.cf.in /etc/pmg/templates/main.cf.in
nano /etc/pmg/templates/main.cf.in
Находим строку smtpd_banner = $myhostname [% pmg.mail.banner %] и меняем $myhostname на mail.example.org
Ищем строку biff = no и, после неё, добавляем строку smtp_helo_name = mail.example.org
Затем перезагружаем PMG, что бы он принял конфиг
pmgconfig sync --restart 1
Изначально PMG не может просканировать RAR архивы во вложениях на предмет вирусов. Исправим это
Добавим non-free репозитории. Открываем на редактирование sources.list
nano /etc/apt/sources.list
И приводим содержимое к следующему виду:
deb http://deb.debian.org/debian bullseye main contrib non-free
deb-src http://deb.debian.org/debian bullseye main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian bullseye-updates main contrib non-free
После чего устанавливаем пакеты
apt update && apt install libclamunrar p7zip-rar
Готово, теперь PMG сможет сканировать RAR архивы
Если PMG использует DNS сервера внутри сети, то может происходить следующее - иногда сервера получателей не могут проверить SPF запись и не принимают письмо, хотя сама SPF запись есть и настроена корректна. Этот момент не всегда очевиден и легко пропустить в логах. Решение простое - добавить SPF запись на локальном DNS сервере. Если PMG использует внешние публичные DNS-сервера, то такой проблемы нет.
На этом настройка PMG закончена, можно приступать к установке и настройке Zimbra