В прошлом посте мы подготовили домен для работы с почтой, в этом мы запустим почтовый сервер.
Запускать почтовый сервер будем в 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.ruvolumes- в этом параметре описываются локальные директории подключаемые в контейнере. Добавим две строчки в этот параметр:
- ./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.ruTZ- указывает на временную зону. Указываем подходящий вам часовой пояс, например,Europe/MoscowENABLE_OPENDKIM,ENABLE_OPENDMARC,ENABLE_POLICYD_SPFиENABLE_AMAVIS- эти параметры выставляем на 0, поскольку за это будет отвечатьRspamdENABLE_CLAMAV- параметр, отвечающий за работу антивирусаClamAV. Включать его или нет, выбирать вам, поскольку он достаточно сильно нагружает сервер и исходить нужно из имеющихся ресурсов и потребностей.ENABLE_RSPAMD- параметр, отвечающий за работуRspamd. Устанавливаем здесь 1 для включения. Он необходим нам для работыDKIM, о котором чуть дальше. Rspamd — это высокопроизводительный сервер обработки почты с открытым исходным кодом. Он предназначен для фильтрации спама и вирусов, а также для ускорения обработки почты.SMTP_ONLY- параметр, переключающий почтовый сервер в толькоSMTP-сервер. В таком режиме он сможет только отправлять почту.SSL_TYPE- параметр, определяющий какой тип SSL-сертификата будет использоваться. Выставляемmanual.SSL_CERT_PATH- путь до сертификата. Указываем/tmp/dms/custom-certs/cert.crtSSL_KEY_PATH- путь до ключа. Указываем/tmp/dms/custom-certs/privkey.keyENABLE_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 весьма функционален и у него много возможностей, но настройка всего требует времени и знаний. Я постарался описать так, что бы "сделал и оно работает", а настройка под конкретные ситуации, уже на пользователе.
Комментарии
Оставить комментарийВойдите, чтобы оставить комментарий.
Комментариев пока нет.