Docker 5.2 Почтовый сервер на Docker Mailserver - настройка и запуск
В прошлом посте, я рассказал про собственный сервер и то, как настроить для него домен. В этом посте я расскажу как настроить и запустить его на VPS.
Дополнительные материалы
Для скачивания материалов необходимо войти или зарегистрироваться
Файлы также можно получить в Telegram-боте по коду: 245646
Реклама
В прошлом посте мы подготовили домен для работы с почтой, в этом мы запустим почтовый сервер.
Запускать почтовый сервер будем в Docker-контейнере. Если у вас не установлен Docker, то почитать об установке можно в посте "Docker 2.2 Установка Docker на Linux".
Стоит отметить, что в этом посте не будет всеобъемлющей настройки почтового сервера. Я расскажу как запустить "минимальную конфигурацию", чтобы можно было пользоваться.
Полный перечень конфигураций и возможностей можно найти в официальной документации: https://docker-mailserver.github.io/docker-mailserver/latest/
Напомню используемое окружение:
Действия в данном посте подразумевают, что у вас имеется VPS сервер, настроенный домен и действующий SSL-сертификат.
Могу порекомендовать два хостинга:
- HSHP - достаточно дешевые сервера в Германии, отлично подойдут для тестов или скажем настроить собственный VPN.
- TimeWeb Cloud - наверное самый надёжный хостинг из всех, что я пробовал. Так же тут удобно приобретать или подключать свои домены.
(Ссылки реферальные - вам не сложно, а мне приятно, спасибо.)
Используемый сервер:
- CPU: 1x 3.3ГГц
- RAM: 2Гб
- SSD: 20Гб NVMe
- OS: Debian 12
Файл Docker Compose и конфигурация переменных окружения
Подключаемся по SSH к серверу и переходим в удобную для работы директорию.
Далее выполняем команду mkdir dms
для создания директории в которой будут находиться конфигурационные файлы почтового сервера. Название директории можете изменить по желанию.
Переходим в директорию, выполнив команду cd dms
.
Необходимо скачать два файла: compose.yaml
и mailserver.env
.
В первом находится конфигурация Docker Compose сервиса, а во втором параметры переменных окружения, определяющих настройки почтового сервера.
Для этого выполняем две команды:
wget "https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/compose.yaml"
wget "https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env"
Также, вы можете найти эти файлы в архиве с материалами к посту.
Редактирование файла compose.yaml
.
Откроем файл выполнив команду nano compose.yaml
и изменим следующие параметры:
hostname
- в этом параметре прописываем почтовый домен, в моём случае этоmail.pressanybutton.ru
volumes
- в этом параметре описываются локальные директории подключаемые в контейнере. Добавим две строчки в этот параметр:
- ./docker-data/dms/rspamd/:/etc/rspamd/override.d/
- ./docker-data/dms/custom-certs/:/tmp/dms/custom-certs/:ro
Готово. Нажимаем CTRL+S
для сохранения, затем CTRL+X
для выхода.
Редактирование файла mailserver.env
.
Откроем файл выполнив команду nano mailserver.env
и изменим следующие параметры:
POSTMASTER_ADDRESS
- данный параметр определяет почту администратора. Указываем почту по вашему желанию, например, у меня это -admin@pressanybutton.ru
TZ
- указывает на временную зону. Указываем подходящий вам часовой пояс, например,Europe/Moscow
ENABLE_OPENDKIM
,ENABLE_OPENDMARC
,ENABLE_POLICYD_SPF
иENABLE_AMAVIS
- эти параметры выставляем на 0, поскольку за это будет отвечатьRspamd
ENABLE_CLAMAV
- параметр, отвечающий за работу антивирусаClamAV
. Включать его или нет, выбирать вам, поскольку он достаточно сильно нагружает сервер и исходить нужно из имеющихся ресурсов и потребностей.ENABLE_RSPAMD
- параметр, отвечающий за работуRspamd
. Устанавливаем здесь 1 для включения. Он необходим нам для работыDKIM
, о котором чуть дальше. Rspamd — это высокопроизводительный сервер обработки почты с открытым исходным кодом. Он предназначен для фильтрации спама и вирусов, а также для ускорения обработки почты.SMTP_ONLY
- параметр, переключающий почтовый сервер в толькоSMTP-сервер
. В таком режиме он сможет только отправлять почту.SSL_TYPE
- параметр, определяющий какой тип SSL-сертификата будет использоваться. Выставляемmanual
.SSL_CERT_PATH
- путь до сертификата. Указываем/tmp/dms/custom-certs/cert.crt
SSL_KEY_PATH
- путь до ключа. Указываем/tmp/dms/custom-certs/privkey.key
ENABLE_SPAMASSASSIN
- параметр, отвечающий за работуSpam Assassin
. Включайте по желанию и имеющимся ресурсам.
Готово. Нажимаем CTRL+S
для сохранения, затем CTRL+X
для выхода.
Сертификаты.
Выполните следующую команду:
mkdir docker-data && cd docker-data && mkdir dms && cd dms && mkdir custom-certs && cd custom-certs
В итоге должны создаться три директории и мы окажемся в директории custom-certs
.
В эту директорию необходимо поместить сертификат и ключ с теми же именами, что прописывали ранее в конфигурационном файле.
Первый запуск.
Для запуска возвращаемся в основную директорию dms
где находится файл compose.yaml
и выполняем команду docker compose up
. Если всё указано верно, сервер запустится и начнёт работу, но необходимы ещё настройки.
Откройте второй терминал и подключитесь к серверу.
Нам необходимо создать почтовый ящик. Для этого выполняем команду docker exec -ti mailserver setup email add <ADDRESS> <PASSWORD>
. Где mailserver
- имя контейнера, если вы не меняли его в файле compose.yaml
, то оно будет mailserver
.
После этого необходимо добавить псевдоним главного почтового адреса, выполнив команду docker exec -ti mailserver setup alias add postmaster@example.com user@example.com
. Первой почтой указываем почту, прописанную в файле mailserver.env
, вторым можете указать удобную для вас почту на другом домене или ранее созданную почту.
DKIM.
В прошлом посте, я упоминал его в списке необходимых для прописывания в домене, сейчас мы его добавим.
DKIM (DomainKeys Identified Mail) - метод аутентификации электронной почты, который добавляет цифровую подпись в сообщение. Это помогает подтвердить, что сообщение пришло от предполагаемого отправителя.
Всё в том же втором терминале выполняем следующую команду: docker exec -ti mailserver setup config dkim
После выполнения отобразится результат работы и будет указан хост и значение для TXT-записи.
Перейдите в панель управления доменом и создайте новую запись.
В моём случае хост: mail._domainkey
Значение: v=DKIM1; k=rsa; p=MIIB.........
После этого возвращаемся в терминал и из директории dms
, в которой файл compose.yaml
, переходим в директорию docker-data/dms/rspamd
там создаём файл dkim_signing.conf
выполнив команду touch dkim_signing.conf
.
Затем открываем его выполнив команду nano dkim_signing.conf
и вставляем следующий текст:
# documentation: https://rspamd.com/doc/modules/dkim_signing.html
enabled = true;
sign_authenticated = true;
sign_local = true;
use_domain = "header";
use_redis = false; # don't change unless Redis also provides the DKIM keys
use_esld = true;
check_pubkey = true; # you wan't to use this in the beginning
domain {
pressanybutton.ru {
path = "/tmp/docker-mailserver/rspamd/dkim/rsa-2048-mail-pressanybutton.ru.private.txt";
selector = "mail";
}
}
В разделе domain
указываем ваш домен, ниже в строке путь rsa-2048-mail-pressanybutton.ru.private.txt
меняем на название файла находящегося по пути dms/docker-data/dms/config/rspamd/dkim
Готово. Нажимаем CTRL+S
для сохранения, затем CTRL+X
для выхода.
Завершение настройки.
Переходим в первый терминал с запущенным сервером и нажимаем CTRL+C
для остановки. Далее на всякий случай удаляем контейнер, если он не удалился после остановки docker rm mailserver
.
И запускаем снова, в этот раз в фоне(хотя можно и не в фоне, чтобы убедиться, что проблем нет) выполнив команду docker composer up -d
.
Подключение к почте и проверка.
Для подключения к почте, можно воспользоваться программой Thunderbird
. Скачать можно на сайте: https://www.thunderbird.net/ru/
Выбираем подключить существующую почту, вводим имя, адрес почты и пароль. Программа найдёт конфигурацию самостоятельно и подключится к серверу.
Далее открываем сайт https://www.mail-tester.com/ , копируем указанную почту и отправляем на неё письмо, желательно с осмысленной темой и содержимым. Затем на сайте нажимаем кнопку под адресом. Спустя несколько секунд должна отобразиться оценка и будут указаны ошибки, если что-то было неправильно настроено. Но, если всё делали в точности, должно быть 10/10!
Также, можете отправить письмо себе на разные ящики и замучить тестами друзей 🙂
Настройка Django.
Изначально с этого всё и началось, что нужен был почтовый сервер для отправки почты с сайта.
Откроем файл settings.py
и найдём настройки почтового сервера, а если их не было, вписываем следующие:
EMAIL_HOST = 'mail.pressanybutton.ru'
EMAIL_PORT = 465
EMAIL_HOST_USER = ""
EMAIL_HOST_PASSWORD = ""
EMAIL_USE_TLS = False
EMAIL_USE_SSL = True
SERVER_EMAIL = EMAIL_HOST_USER
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
В поле EMAIL_HOST
вписываем ваш почтовый домен.
В поле EMAIL_HOST_USER
вписываем почтовый адрес.
В поле EMAIL_HOST_PASSWORD
вписываем пароль от почтового адреса.
Готово! Теперь Django отправляет почту от имени нашего домена через наш почтовый сервер!
Провозился с этим постом конечно долго, в процессе было уйма ошибок и попыток понять, как работает современная почтовая система со всеми их защитами от спама.
На самом деле, в этом посте только базовая настройка, сам Docker Mailserver
весьма функционален и у него много возможностей, но настройка всего требует времени и знаний. Я постарался описать так, что бы "сделал и оно работает", а настройка под конкретные ситуации, уже на пользователе.
Все статьи