Почти наверняка Вам понадобится больше времени, чтобы прочитать эту статью, чем
чтобы развернуть почтовик таким способом.
Задача: приложив минимальное количество усилий развернуть почтовый сервер, который
сможет принимать/отправлять почту с крупных площадок, таких как: 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: 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 обновятся, можно попробовать отправить/принять первое письмо.
Огромное преимущество использования такого подхода - простота и скорость развертывания.
Но как только понадобится нетривиальная конфигурация, могут потребоваться
некоторые лишние телодвижения.