Vollständig eigenständige E-Mail mit Discourse und Stalwart-mail

Fehlerbehebung

Fortsetzung der Diskussion von Stalwart-mail+Discourse: POP3 EOF erreicht (wieder):

Da @programmerjake sich ebenfalls mit Discourse ↔ Stalwart-mail beschäftigt, wollte ich Sie fragen, ob Sie TLS-Fehler bei SMTPS haben:

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"

Auf Discourse-Seite gibt es eine Fehlermeldung:

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

Es scheint mit der OpenSSL-Bibliothek von Ruby zusammenzuhängen, die TLSv1.3 nicht unterstützt, aber das erscheint etwas weit hergeholt, da es sowieso mit TLSv1.2 funktionieren sollte.


Funktionierende Installation

Stalwart-mail >= v0.8.3

Das ist alles, mit dieser Version unterstützt Stalwart-mail jetzt das Senden und Empfangen von E-Mails mit Discourse. :tada:

Stalwart-mail ist ein Mail-Dienst mit einer einzigen Binärdatei, der alle Ihre E-Mail-Anforderungen abdeckt, ohne die Unordnung der Konfiguration, an die wir uns seit Jahrzehnten mit Postfix + Spamassassin + Dovecot + etc. gewöhnt haben. Hier richten Sie Ihre Installation ein und haben alles einsatzbereit, einschließlich vollständiger TLS-Automatisierung mit ACME und LetsEncrypt, SPF, DMARC, DKIM, ARC, DANE-Unterstützung out-of-the-box (einschließlich Berichten von und an Ihre Domains), TLSA und andere DNS-Einträge, automatische Konfiguration und automatische Erkennung für einfache E-Mail-Client-Einrichtung, freigegebene Ordner (über “Gruppen”), Aliase, ManageSieve-Filter für alle eingehenden und ausgehenden Nachrichten in verschiedenen Phasen des Prozesses, Web-Administration, 2FA- und TOTP-Unterstützung, OAUTH und viele weitere Funktionen. Sie müssen Ihre E-Mails nicht mehr extern verwalten!

  1. Verwenden Sie einen submission-Listener auf Port 587 für SMTP
    1. Deaktivieren Sie implizites TLS (bedeutet: STARTTLS verwenden)
    2. Stellen Sie sicher, dass “ignore client order” deaktiviert ist (entweder in den Standardeinstellungen oder überschreiben Sie die TLS-Optionen des Listeners)
  2. Aktivieren Sie einen POP3-Listener auf Port 995 mit implizitem TLS

Discourse

Konfigurieren Sie E-Mail normal mit 587 für Submission (mit STARTTLS) und 995 für POP3s mit SSL/TLS.

1 „Gefällt mir“

Ist das also eine Open-Source-Alternative zu Mailgun und Co.? Das wird langsam sehr attraktiv, da die meisten dieser Dienste für geringe Volumina ziemlich teuer sind.

Ich nehme an, es benötigt einen eigenen (virtuellen) Rechner. Es wäre erstaunlich, wenn es einfach auf demselben Rechner wie Discourse laufen könnte.

Wissen Sie, ob eine Instanz von Stalwart Mail mehrere Discourse-Instanzen bedienen könnte?

1 „Gefällt mir“

Ja, Sie können problemlos mehrere Domains unterstützen.

Zuerst fügen Sie eine Domain hinzu, dann erhalten Sie die DNS-Einträge für die Einrichtung des MX (Mail Exchange). Alle Ihre Domains werden denselben MX verwenden.

Es sollte einfach sein, Stalwart-Mail auf derselben Maschine wie Discourse laufen zu lassen. Da beide TLS-Port 443 benötigen, würden Sie einen Proxy an diesem Port verwenden, um an beide Dienste zu senden. Aber es macht nicht viel Sinn, eine Instanz pro Discourse zu haben, es ist besser, die beiden zu trennen, damit Sie Ihre E-Mail-Infrastruktur leicht skalieren und mehr Bedürfnisse abdecken können als nur Discourse.

Als Hinweis: Ich betreibe Stalwart-Mail auf einem CPX21 (4 GB RAM, 3 x86 AMD vCPUs, 80 GB Speicher) Hetzner VPS mit etwa 30 Konten über ein Dutzend Domains, mit vollständigen Logs, und es benötigt 564 MB RAM und 7 GB Speicher (die meiste davon ist das Betriebssystem). Stalwart-Mail gibt 184 MB residenten RAM an (weniger als 5 % des gesamten RAMs und 1,2 GB virtuell).

1 „Gefällt mir“

Ich benutze Port 587 mit STARTTLS und bin gerade beim Testen auf keine Fehler gestoßen…

Auch in den Logs von Stalwart-Mail scheint TLSv1.3 verwendet zu werden und es treten keine Fehler auf… Ich teste eine etwas ungewöhnliche Konfiguration (ich benutze pebble, um einen lokalen ACME-Server zu betreiben und verwende einen .test-Domainnamen, aber das reicht wahrscheinlich nicht aus, um etwas zu brechen/zu beheben…)

Ich benutze keine “TLS-Optionen überschreiben” im Port 587 Listener…

1 „Gefällt mir“

Ich habe Stalwart-Mail in den letzten Monaten ausschließlich mit Discourse verwendet, und es funktioniert einwandfrei. Ich kann jetzt sowohl Submission (Port 587 mit STARTTLS) als auch Submissions (Port 465 mit TLS) verwenden. Keine spezielle Konfiguration oder Einrichtung erforderlich.

Seien Sie jedoch vorsichtig, die Einrichtung von DNS-Einträgen für eine Domain ist ein zweistufiger Prozess.

  1. Zuerst fügen Sie einen Domainnamen im Verzeichnis hinzu. Dies liefert Ihnen Ressourceneinträge, die Sie in Ihre DNS-Zonendatei aufnehmen müssen.
  2. Sobald Ihr DNS aktualisiert ist, erstellen Sie einen TLS-Provider für diese Domain. Sie sollten die folgenden Hostnamen hinzufügen: mail, autoconfig, autodiscover und mta-tls (mit Ihrer Domain angehängt, z. B. mail.example.org).[1]
  3. Nach einer gewissen Zeit (Sekunden bis Minuten) erkennt der interne ACME-Provider die Änderungen und ruft TLS-Zertifikate ab. Zu diesem Zeitpunkt hat die Domainkonfiguration die Einträge aktualisiert: wählen Sie den _mta-tls RR mit der neuen ID und alle _tlsa-Einträge, fügen Sie sie zu Ihrer Zonendatei hinzu, und Sie sind bereit.

Stalwart-Mail verfügt jetzt über einen sehr leistungsfähigen Spamfilter und eine integrierte fail2ban-Funktionalität (Blockieren von IP-Adressen, die die Authentifizierung fehlgeschlagen haben oder gefälschte URIs angefordert haben).


  1. Beachten Sie, dass Sie für eine minimale Stalwart-Mail + Discourse-Einrichtung wahrscheinlich weder autoconfig noch autodiscover benötigen, da diese für IMAP-Clients nützlich sind. ↩︎