Полностью независимая почта с Discourse и Stalwart-mail

поиск и устранение неполадок

Продолжение обсуждения из темы Stalwart-mail+Discourse: POP3 EOF reached (again):

Так как @programmerjake также изучает интеграцию Discourse ↔ Stalwart-mail, хотел бы спросить, сталкиваетесь ли вы с ошибками TLS на SMTPS:

2024-07-01T17:37:49.718793Z DEBUG common::listener: Failed to accept TLS connection: tls handshake eof context="tls" event="error" instance="smtps" protocol=Smtp remote.ip="128.140.68.114"
2024-07-01T17:37:49.899171Z DEBUG common::listener: Failed to accept TLS connection: tls handshake eof context="tls" event="error" instance="smtps" protocol=Smtp remote.ip="128.140.68.114"

На стороне Discourse появляется всплывающее окно с ошибкой:

ERROR - Net::ReadTimeout with #<TCPSocket:(closed)>

Кажется, это связано с тем, что библиотека OpenSSL в Ruby не поддерживает TLSv1.3, но это звучит несколько натянуто, так как работа должна быть возможна и с TLSv1.2.


Рабочая установка

Stalwart-mail >= v0.8.3

Всё, с этим выпуском Stalwart-mail теперь поддерживает как отправку, так и получение электронной почты в Discourse. :tada:

Stalwart-mail — это почтовый сервис в виде единого бинарного файла, который покрывает все ваши потребности в электронной почте без лишней сложности конфигурации, к которой мы привыкли десятилетиями с Postfix + Spamassassin + Dovecot и т. д. Здесь вы настраиваете свою установку, и у вас всё готово к работе, включая полную автоматизацию TLS с ACME и LetsEncrypt, SPF, DMARC, DKIM, ARC, поддержку DANE «из коробки» (включая отчёты от и к вашим доменам), TLSA и другие DNS-записи, автоматическую конфигурацию и автообнаружение для простой настройки почтовых клиентов, общие папки (через «группы»), алиасы, фильтры ManageSieve для всех входящих и исходящих сообщений на различных этапах обработки, веб-администрирование, поддержку 2FA и TOTP, OAUTH и множество других функций. Больше нет необходимости выносить вашу электронную почту наружу!

  1. Используйте слушатель submission на порту 587 для SMTP
    1. отключите неявный TLS (это означает: используйте STARTTLS)
    2. Убедитесь, что опция игнорирования порядка клиента отключена (либо в настройках по умолчанию, либо в переопределении параметров TLS для слушателя)
  2. Включите слушатель POP3 на порту 995 с неявным TLS

Discourse

Настройте электронную почту обычным образом: используйте порт 587 для Submission (с STARTTLS) и порт 995 для POP3s с SSL/TLS.

Итак, это альтернатива с открытым исходным кодом для Mailgun и подобных сервисов? Это начинает выглядеть очень привлекательно, так как большинство таких сервисов довольно дороги при небольших объемах.

Я так понимаю, что для этого требуется отдельная (виртуальная) машина. Было бы здорово, если бы она могла легко работать на той же машине, что и Discourse.

Вы знаете, может ли один экземпляр Stalwart Mail обслуживать несколько экземпляров Discourse?

Да, вы можете легко поддерживать несколько доменов.

Сначала вы добавляете домен, после чего получаете DNS-записи для настройки MX (mail exchange). Все ваши домены будут использовать одни и те же MX-записи.

Запуск Stalwart-mail на той же машине, что и Discourse, должен быть несложным. Поскольку оба сервиса требуют TLS-порт 443, вы будете использовать прокси на этом порту для перенаправления трафика к обоим службам. Однако запускать отдельный экземпляр для каждого Discourse не имеет особого смысла; лучше разделить их, чтобы вы могли легко масштабировать свою почтовую инфраструктуру и решать задачи шире, чем только для Discourse.

В качестве примера: я запускаю Stalwart-mail на VPS Hetzner CPX21 (4 ГБ ОЗУ, 3 виртуальных ядра x86 AMD, 80 ГБ хранилища) с примерно 30 учётными записями в дюжине доменов, при этом включены полные логи. При этом потребление составляет 564 МБ ОЗУ и 7 ГБ хранилища (большая часть — это операционная система). Stalwart-mail заявляет об использовании 184 МБ резидентной памяти (менее 5% от всего объёма ОЗУ) и 1,2 ГБ виртуальной памяти.

Я использую порт 587 с STARTTLS и при тестировании только что не столкнулся с ошибками…

Также в логах Stalwart-mail видно, что используется TLSv1.3, и ошибок не возникает… У меня немного нестандартная конфигурация, которую я тестирую (использую pebble для запуска локального ACME-сервера и доменное имя .test), но этого, вероятно, недостаточно, чтобы что-то сломать или исправить…

Я не использую «Переопределить параметры TLS» в слушателе порта 587…

Я использую Stalwart-mail исключительно с Discourse в течение последних нескольких месяцев, и всё работает как по маслу. Теперь я могу использовать как Submission (порт 587 с STARTTLS), так и Submissions (порт 465 с TLS). Никакой специальной конфигурации или настройки не требуется.

Однако будьте внимательны: настройка DNS-записей домена — это двухэтапный процесс.

  1. Сначала добавьте имя домена в Directory. Это предоставит вам ресурсные записи, которые нужно добавить в файл зоны вашего DNS.
  2. После обновления DNS создайте TLS-провайдер для этого домена. Вам следует добавить следующие имена хостов: mail, autoconfig, autodiscover и mta-tls (с вашим доменом в конце, например, mail.example.org).[1]
  3. Через некоторое время (от секунд до минут) внутренний ACME-провайдер заметит изменения и получит TLS-сертификаты. На этом этапе конфигурация домена обновит записи: выберите RR _mta-tls с новым идентификатором и все записи _tlsa, добавьте их в файл вашей зоны, и вы готовы к работе.

Теперь Stalwart-mail оснащён очень мощным спам-фильтром и интегрированной функцией fail2ban (блокировка IP-адресов, которые не прошли аутентификацию или запросили несуществующие URI).


  1. Обратите внимание, что для минимальной конфигурации Stalwart-mail + Discourse вам, вероятно, не понадобятся autoconfig и autodiscover, так как они полезны только для IMAP-клиентов. ↩︎