null

Разворачиваем почтовик в мгновение ока

Почти наверняка Вам понадобится больше времени, чтобы прочитать эту статью, чем
чтобы развернуть почтовик таким способом.

Задача: приложив минимальное количество усилий развернуть почтовый сервер, который
сможет принимать/отправлять почту с крупных площадок, таких как: Gmail, YandexMail, Mail.Ru, и т.д.

В качестве решения будем использовать docker образ с уже установленными и сконфигурированными:

  • Postfix
  • Dovecot
  • OpenDKIM
  • Fail2ban
  • ...

Ссылка на репозиторий: https://github.com/docker-mailserver/docker-mailserver

Создадим ВМ

Создадим ВМ для нашего сервера и выделим следующие ресурсы:

CPU: 1 Core
RAM: 1 GB
HDD: 16 GB

16GB HDD для начала -- предостаточно. При необходимости раздел в будущем можно будет расширить.
В качестве образа ВМ используем недавно выщедший Debian Bullseye.

Устанавливаем docker

В зависимости от образа ВМ установка происходит по-разному.
Если не уверены - обратитесь к официальной [документации](https://docs.docker.com/engine/install/).
В Debian Bullseye так:

apt update
apt install docker.io docker-compose

Устанавливаем docker-mailserver

Создадим директорию в которой будет храниться конфигурация и данные почтового сервера:

mkdir /opt/mailserver
cd /opt/mailserver

Скачаем файлы конфигурации:

wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/docker-compose.yml
wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env

И скрипт `setup.sh` который сильно упростит нам жизнь в будущем:

wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/v10.1.0/setup.sh

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

В файле docker-compose.yml меняем параметры:

  • hostname
  • domainname

В нашем случае вписываем следующие значения:

hostname: mx.tune-it.ru
domainname: tune-it.ru

SSL

Чтобы наш почтовик мог использовать SSL нужно:
Подложить полученные сертификаты в директорию /opt/mailserver/ssl.
При использовании Let's encrypt сертификатов нам понадобятся файлы fullchain.pem и privkey.pem.

Правим переменные окружения в файле mailserver.env следующим образом:

SSL_TYPE=manual
SSL_CERT_PATH=/etc/ssl/fullchain.pem
SSL_KEY_PATH=/etc/ssl/privkey.pem

Добавляем docker volumes с нашими сертификатами в docker-compose.yml:

    volumes:
      ...
      - ./ssl/fullchain.pem:/etc/ssl/fullchain.pem:ro
      - ./ssl/privkey.pem:/etc/ssl/privkey.pem:ro

В случае с Let's encrypt будет полезным еще настроить автоматическое обновление сертификатов и их подмена в нашей ВМ.
Тут можно написать renewal-hook для certbot'а. Подробнее об этом можно почитать тут: https://certbot.eff.org/docs/using.html#pre-and-post-validation-hooks

Запуск

Создадим контейнер с почтовиком:

docker-compose up -d

Одназначно стоит ознакомиться со скриптом `start.sh`, который умеет сам делать некоторые простые вещи:

./setup.sh help

Добавим первого пользователя:

./setup.sh email add <user@domain> [<password>]

Сгенерируем OpenDKIM ключи:

./setup.sh config dkim

DNS записи

Добавим несколько DNS записей:

A tune-it.ru IP_ADDRESS
MX mx.tune-it.ru tune-it.ru

Также, нужно добавить TXT запись со значением хранящимся в файле config/opendkim/keys/domain.tld/mail.txt.

На этом все! Как только DNS обновятся, можно попробовать отправить/принять первое письмо.

Огромное преимущество использования такого подхода - простота и скорость развертывания. 
Но как только понадобится нетривиальная конфигурация, могут потребоваться 
некоторые лишние телодвижения.