Correo electrónico completamente independiente con Discourse y Stalwart-mail

solución de problemas

Continuando la discusión de Stalwart-mail+Discourse: POP3 EOF reached (again):

Dado que @programmerjake también está explorando la integración de Discourse ↔ Stalwart-mail, quería preguntarte si estás experimentando errores TLS en 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"

Del lado de Discourse, aparece una ventana emergente de error:

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

Parece estar relacionado con que la biblioteca OpenSSL de Ruby no admite TLSv1.3, pero esto parece un poco exagerado ya que debería funcionar con TLSv1.2 de todos modos.


Instalación funcional

Stalwart-mail >= v0.8.3

Eso es todo, con esta versión, Stalwart-mail ahora admite el envío y la recepción de correos electrónicos con Discourse. :tada:

Stalwart-mail es un servicio de correo electrónico de un solo binario que cubre todas sus necesidades de correo electrónico sin el desorden de configuración al que hemos estado acostumbrados durante décadas con Postfix + Spamassassin + Dovecot + etc. Aquí, configura su instalación y tiene todo listo para usar, incluida la automatización TLS completa con ACME y LetsEncrypt, SPF, DMARC, DKIM, ARC, soporte DANE listo para usar (incluidos informes desde y hacia sus dominios), TLSA y otros registros DNS listos para usar, configuración automática y autodescubrimiento para una fácil configuración del cliente de correo, carpetas compartidas (a través de “grupos”), alias, filtros ManageSieve en todos los mensajes entrantes y salientes en varias etapas del proceso, administración web, soporte 2FA y TOTP, OAUTH y muchas más funciones. ¡No necesita externalizar su correo electrónico nunca más!

  1. Use un oyente submission en el puerto 587 para SMTP
    1. deshabilite TLS implícito (es decir: use STARTTLS)
    2. Asegúrese de que el orden de ignorar clientes esté deshabilitado (ya sea en los valores predeterminados o en las opciones TLS de anulación del oyente)
  2. Habilite un oyente POP3 en el puerto 995 con TLS implícito

Discourse

Configure el correo electrónico normalmente usando 587 para Submission (con STARTTLS) y 995 para POP3s con SSL/TLS.

1 me gusta

¿Así que esta es una alternativa de código abierto a Mailgun y similares? Eso está empezando a parecer muy atractivo, ya que la mayoría de esos servicios son bastante caros para bajos volúmenes.

Supongo que requiere su propia máquina (virtual). Sería increíble si pudiera ejecutarse fácilmente en la misma máquina que Discourse.

¿Sabes si una instancia de Stalwart Mail podría dar servicio a varias instancias de Discourse?

1 me gusta

Sí, puedes soportar múltiples dominios fácilmente.

Primero agregas un dominio, luego te da los registros DNS para configurar el MX (intercambio de correo). Todos tus dominios usarán el mismo MX.

Debería ser fácil ejecutar Stalwart-mail en la misma máquina que Discourse. Dado que ambos requieren el puerto TLS 443, usarías un proxy en ese puerto para enviar a ambos servicios. Pero no tiene mucho sentido tener una instancia por Discourse, es mejor separar los dos, para que puedas escalar tu infraestructura de correo fácilmente y cubrir más necesidades que solo Discourse.

Como indicación, he estado ejecutando Stalwart-mail en un VPS Hetzner CPX21 (4 GB de RAM, 3 vCPU AMD x86, 80 GB de almacenamiento) con aproximadamente 30 cuentas en más de una docena de dominios, con registros completos activados, y consume 564 MB de RAM y 7 GB de almacenamiento (la mayoría es el sistema operativo). Stalwart-mail afirma 184 MB de RAM residente (menos del 5% de toda la RAM y 1.2 GB virtual).

1 me gusta

Estoy usando el puerto 587 con STARTTLS y no he encontrado ningún error al probar ahora…

Además, en los registros de Stalwart-mail parece que está usando TLSv1.3 y no está encontrando ningún error… Tengo una configuración un poco inusual que estoy probando (usando pebble para ejecutar un servidor ACME local y usando un nombre de dominio .test, pero eso probablemente no sea suficiente para romper/arreglar nada…)

No estoy usando “Override TLS options” en el listener del puerto 587…

1 me gusta

He estado usando Stalwart-mail con Discourse exclusivamente durante los últimos meses, y funciona a la perfección. Ahora puedo usar tanto Submission (puerto 587 con STARTTLS) como Submissions (puerto 465 con TLS). No requiere configuración ni preparación especial.

Sin embargo, ten cuidado, la configuración de los registros DNS de un dominio es un proceso de dos pasos.

  1. Primero, agregas un nombre de dominio en el Directorio. Esto te proporciona registros de recursos para agregar a tu archivo de zona DNS.
  2. Una vez que tu DNS se actualiza, creas un proveedor TLS para ese dominio. Debes agregar los siguientes nombres de host: mail, autoconfig, autodiscover y mta-tls (con tu dominio agregado, por ejemplo, mail.example.org).[1]
  3. Después de un período (segundos a minutos), el proveedor ACME interno captará los cambios y obtendrá los certificados TLS. En este punto, la configuración del dominio habrá actualizado los registros: selecciona el RR _mta-tls con el nuevo id y todos los registros _tlsa, agrégalos a tu archivo de zona y listo.

Stalwart-mail ahora viene con un filtro de spam muy potente y funcionalidad fail2ban integrada (bloqueando direcciones IP que fallaron la autenticación o solicitaron URIs falsas).


  1. ten en cuenta que para una configuración mínima de Stalwart-mail + Discourse, probablemente no necesites autoconfig ni autodiscover, ya que son útiles con clientes IMAP. ↩︎