Cat

Docker 5.2 Почтовый сервер на Docker Mailserver - настройка и запуск

В прошлом посте, я рассказал про собственный сервер и то, как настроить для него домен. В этом посте я расскажу как настроить и запустить его на VPS.

Все статьи

Icon Link

Дополнительные материалы

Icon Link

Реклама

Icon Link
Применение Docker proDream 26 Сентябрь 2023 Просмотров: 2058

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

Запускать почтовый сервер будем в 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 весьма функционален и у него много возможностей, но настройка всего требует времени и знаний. Я постарался описать так, что бы "сделал и оно работает", а настройка под конкретные ситуации, уже на пользователе.

Автор

    Нет комментариев

    Реклама