Stalwart Mail Server ist ein moderner, in Rust geschriebener Open-Source Mailserver. Er unterstützt unter anderem JMAP, IMAP4, POP3 und SMTP und zeichnet sich durch hohe Sicherheit, Leistungsfähigkeit und Skalierbarkeit aus. Mit Docker lässt sich someit ein eigener Mailserver schnell und unkompliziert einrichten und konfigurieren, sodass volle Kontrolle über E-Mails gewonnen und eine Unabhängigkeit von Drittanbietern erreicht wird.
Im Folgenden gibt es eine Schritt-für-Schritt-Anleitung zur Installation und Konfiguration.
Inhaltsverzeichnis
Wichtige Features des Stalwart Mail Servers
- Vielseitige Protokollunterstützung: JMAP, IMAP4, POP3, ManageSieve und SMTP stehen zur Verfügung.
- Moderne Sicherheitsstandards: DMARC, DKIM, SPF, ARC, TLS/SSL, MTA-STS, DANE und automatisierte TLS-Zertifikate (ACME) sind integriert.
- Leistungsfähiger Spam- und Phishing-Schutz: DNS-Blocklists (DNSBLs), Greylisting und viele weitere Filterfunktionen.
- Skalierbarkeit und Flexibilität: Pluggable Storage Backends (z. B. RocksDB, PostgreSQL oder S3), Clustering-Support und Full-Text-Suche in mehreren Sprachen.
- Sichere Architektur dank Rust: Speicher- und Typsicherheit verringern typische Sicherheitsrisiken.
- Webbasierte Verwaltung: Ein ansprechendes Dashboard erlaubt die Kontrolle über Accounts, Domains, Mailinglisten und vieles mehr.
Voraussetzungen
- Betriebssystem: Linux
- Server: Zum Beispiel von netcup
- Software:
- Docker: Installationsanleitung
- Docker Compose: Installationsanleitung
- Systemanforderungen:
- Mindestens: 512 MB RAM, 1 vCore
- Empfohlen: 2 GB RAM, 1 vCore
1. Vorbereitung
Ordner anlegen
Ein Verzeichnis für die Mailserver-Konfiguration anlegen und in dieses wechseln:
mkdir -p /opt/containers/stalwart-mailserver
cd /opt/containers/stalwart-mailserver
2. Mailserver installieren
Docker Compose Datei erstellen
Eine Datei namens docker-compose.yml
erstellen:
nano docker-compose.yml
Der folgende Inhalt wird eingefügt:
version: '3'
services:
stalwart-mail:
image: stalwartlabs/mail-server:latest
container_name: stalwart-mail
restart: unless-stopped
volumes:
- ./data:/opt/stalwart-mail
ports:
- "25:25" # SMTP
- "465:465" # SMTPS (SMTP über SSL/TLS)
- "993:993" # IMAPS (IMAP über SSL/TLS)
- "8080:8080" # Stalwart Web-Admin-Oberfläche (HTTP)
- "443:443" # HTTPS für Web-Admin-Oberfläche
Hinweis: Port 8080 wird initial benötigt, um auf die Weboberfläche zuzugreifen, bevor das TLS-Zertifikat eingerichtet ist.
Die Datei kann mit STRG + O
gespeichert und mit STRG + X
geschlossen werden.
3. Mailserver starten
Der Docker-Container wird mit folgendem Befehl im Hintergrund gestartet:
docker compose up -d
Der Stalwart Mail Server läuft nun im Hintergrund.
4. Administrator-Konto und Passwort abrufen
Für das Administrator-Konto wird ein zufälliges Passwort generiert. Mit folgendem Befehl lassen sich die Anmeldedaten auslesen:
docker logs stalwart-mail
Es erscheint eine Ausgabe ähnlicher Form:
✅ Configuration file written to /opt/stalwart-mail/etc/config.toml
🔑 Your administrator account is 'admin' with password 'zufälliges_passwort'.
Das Passwort wird nur einmal angezeigt, deshalb sollte es notiert werden.
5. Mailserver konfigurieren
Auf die Weboberfläche zugreifen
Im Webbrowser die folgende Adresse aufrufen:
http://mail.meinedomain.de:8080/login
Hinweise:
meinedomain.de
durch die eigene Domain ersetzen.- Da das TLS-Zertifikat noch nicht eingerichtet ist, wird zunächst
http
und Port8080
verwendet. - DNS-A-Eintrag für
mail.meinedomain.de
sollte auf die IP-Adresse des Mailservers verweisen.
Anmeldedaten: Benutzername admin
und das zuvor generierte Passwort.
Hostname festlegen
- In der Weboberfläche zu
Settings > Server > Network
navigieren. - Im Feld Hostname den Mailserver-Hostnamen eintragen, z. B.
mail.meinedomain.de
. - Einstellungen speichern.
Domain hinzufügen
- Über
Management > Directory > Domains
den Punkt Create a new domain auswählen. - Im Feld Domain name die eigene Domain eingeben, z. B.
meinedomain.de
. - Die Einstellungen speichern.
DNS-Einträge konfigurieren
Nach dem Hinzufügen der Domain sind entsprechende DNS-Einträge beim Domain-Provider zu hinterlegen.
- Unter der jeweiligen Domain auf die drei Punkte (⋮) klicken und DNS Records auswählen.
- Dort erscheinen die erforderlichen DNS-Einträge.
- Zusätzlich muss ein A-Eintrag für
mail.meinedomain.de
mit der IP-Adresse des Mailservers angelegt werden.
Beispiel für DNS-Einträge:
- A-Eintrag für
mail.meinedomain.de
:- Host/Name:
mail
- Typ:
A
- Wert/Ziel: IP-Adresse des Mailservers
- Host/Name:
- MX-Eintrag:
- Host/Name:
@
(oder leer) - Typ:
MX
- Priorität:
10
- Wert/Ziel:
mail.meinedomain.de
- Host/Name:
- SPF-Eintrag:
- Host/Name:
@
- Typ:
TXT
- Wert:
v=spf1 mx -all
- Host/Name:
- DKIM-Einträge:
- Die angezeigten TXT-Einträge aus der Weboberfläche kopieren und in die eigene DNS-Zone eintragen.
- DMARC-Eintrag:
- Host/Name:
_dmarc
- Typ:
TXT
- Wert:
v=DMARC1; p=reject; rua=mailto:postmaster@meinedomain.de
- Host/Name:
Hinweis: Die genauen Werte finden sich in der Weboberfläche unter DNS Records.
TLS einrichten
Der Stalwart Mail Server kann automatisch TLS-Zertifikate über Let’s Encrypt beziehen.
- Über
Settings > Server > TLS > ACME Providers
den Punkt Create a new ACME provider auswählen. - Folgende Felder ausfüllen:
- Directory ID: Beliebiger Name, z. B.
default
. - Default provider: Aktivieren.
- Contact Email: Eine E-Mail-Adresse, z. B.
postmaster@meinedomain.de
. - Challenge Type:
tls-alpn-01
- Subject Names: Den Mailserver-Hostnamen eintragen, z. B.
mail.meinedomain.de
.
- Directory ID: Beliebiger Name, z. B.
- Einstellungen mit Save changes speichern.
Hinweise:
- Das Feld Directory ID dient als Bezeichner für die ACME-Konfiguration.
- Mit
tls-alpn-01
erfolgt die Validierung über Port 443. - Port 443 muss in der Firewall geöffnet sein.
Mailserver neu starten und Port 8080 entfernen
Sobald das TLS-Zertifikat erfolgreich bezogen wurde, kann Port 8080
entfernt werden, um die Weboberfläche nur noch verschlüsselt bereitzustellen.
- Die
docker-compose.yml
erneut öffnen:nano docker-compose.yml
- Die Zeile mit Port
8080
entfernen oder auskommentieren:ports: - "25:25" - "465:465" - "993:993" # - "8080:8080" # Dieser Port kann jetzt entfernt werden - "443:443"
- Datei speichern und den Editor schließen.
- Den Mailserver neu starten:
docker compose up -d
Auf die Weboberfläche über HTTPS zugreifen
Nach erfolgreichem Bezug des Zertifikats und Entfernung von Port 8080
steht die Weboberfläche über HTTPS zur Verfügung:
https://mail.meinedomain.de/login
Logging konfigurieren
Um Logs direkt mit docker logs
erfassen zu können, lässt sich die Protokollierung auf die Konsole umleiten.
- In der Weboberfläche zu
Settings > Telemetry > Logging & Tracing
navigieren. - Create tracer auswählen.
- Folgende Felder ausfüllen:
- Tracer ID: Beliebiger Name, z. B.
Konsole
. - Method:
Console
.
- Tracer ID: Beliebiger Name, z. B.
- Einstellungen mit Save & Reload speichern.
6. Benutzerkonten anlegen
Konto erstellen
- Über
Management > Directory > Accounts
den Punkt Create a new account auswählen. - Folgende Felder ausfüllen:
- Login name: Gewünschter Benutzername, z. B.
benutzername
. - Name: Vollständiger Name des Kontos, z. B.
Max Mustermann
. - Email: Eigene Domain auswählen und den lokalen Teil eintragen, z. B.
benutzername
.
- Login name: Gewünschter Benutzername, z. B.
- Optional weitere E-Mail-Adressen unter Aliases hinzufügen.
- Im Tab Authentication ein Passwort festlegen.
- Das Konto speichern.
Hinweis: Es ist empfehlenswert, den Login name und die Email gleich zu halten, um Verwirrung zu vermeiden.
Postmaster-Konto erstellen
Gemäß RFC benötigt jede Domain eine gültige postmaster
-Adresse.
- Ein weiteres Konto anlegen:
- Login name:
postmaster
- Name:
Postmaster
- Email:
postmaster@meinedomain.de
- Login name:
- Ein Passwort festlegen.
Hinweis: Die postmaster
-Adresse dient administrativen Zwecken und sollte existieren, um die Zustellbarkeit zu verbessern.
7. E-Mail-Client konfigurieren
Das E-Mail-Konto kann in einem bevorzugten E-Mail-Client (z. B. Thunderbird oder Outlook) eingerichtet werden:
- IMAP (Eingang):
- Server:
mail.meinedomain.de
- Port:
993
- Verschlüsselung: SSL/TLS
- Server:
- SMTP (Ausgang):
- Server:
mail.meinedomain.de
- Port:
465
- Verschlüsselung: SSL/TLS
- Server:
- Benutzername: Die vollständige E-Mail-Adresse, z. B.
benutzername@meinedomain.de
- Passwort: Das in der Kontoerstellung festgelegte Passwort
8. Mailserver testen
E-Mail versenden und empfangen
- Eine Test-E-Mail an eine externe Adresse (z. B. Gmail) senden.
- Prüfen, ob die E-Mail erfolgreich zugestellt wurde.
- Auf die Test-E-Mail antworten und sicherstellen, dass sie empfangen wird.
Mailserver-Konfiguration überprüfen
Dienste wie Mail Tester helfen bei der Überprüfung:
- Die Webseite aufrufen und die angegebene E-Mail-Adresse kopieren.
- Eine E-Mail vom neu eingerichteten Mailserver an diese Adresse senden.
- Auf „Ergebnis anzeigen“ klicken und die Bewertung prüfen.
Ein Score von 10 Punkten deutet auf eine korrekte Konfiguration hin.
9. Wichtige Hinweise
- DNS-Propagation: Die Änderungen können bis zu 24 Stunden benötigen, um weltweit wirksam zu werden.
- Sicherheit:
- Das zufällig generierte Admin-Passwort sollte nach dem ersten Login geändert werden.
- Starke Passwörter für alle Benutzer sind empfehlenswert.
- Backups: Regelmäßige Backups der Mailserver-Daten erstellen.
- Updates: Stalwart Mail Server und Docker-Container aktuell halten.
- Logdateien überwachen: Mit
docker logs stalwart-mail
können die Logs eingesehen und auf ungewöhnliche Aktivitäten geprüft werden.
10. Fazit
Mit dem Stalwart Mail Server und Docker lässt sich ein leistungsfähiger und sicherer Mailserver in kurzer Zeit aufsetzen. Die intuitive Weboberfläche erleichtert die Verwaltung, und durch die Verwendung von TLS bleiben E-Mails sicher verschlüsselt. Es empfiehlt sich, den Server regelmäßig zu warten und Sicherheitsupdates zeitnah einzuspielen.
11. Quellen
Bei Fragen oder Bedarf an Unterstützung kann gerne Kontakt aufgenommen werden. Viel Erfolg mit dem eigenen Mailserver!
Pingback: Eigenen Mailserver mit Docker installieren | Christian Eirich
Vielen Dank für diese detailierte Anleitung zur Installation des Stalwart Mailservers. Seit erster Schritte Richtung eigenem Smart Home mit selbst gehostetem Home Assistant bin ich ein großer Fan vom Betreiben eigener kleiner Server geworden. Da bei mir verschiedene Container auf dem gleichen Gerät laufen, nutze ich den Nginx Proxy Manager (reverse proxy) um die Domains mit den Services zu verbinden. Auch die SSL Verschlüsselung erfolgt über nginx. Laut der offiziellen Anleitung auf stalw.art benötigt man dann für den Mailserver keine eigene SSL/TLS Verschlüsselung mehr. Nun habe ich nach abgeschlossener Einrichtung des Stalwart Mailservers (Konto mit Mailadressen) versucht, eine Mailadresse/-konto mit Thunderbird zu verbinden, bekomme aber leider immer die Nachricht, dass „das Zertifikat dieser Mailadresse nicht aus einer vertrauenswürdigen Quelle stammt“. Habe ich einen Sicherheitsmechanismus übersehen bzw. brauche ich doch ein SSL Zertifikat trotz Reverse Proxy? Oder sollte ich für den Mail Verkehr noch die Ports 993 & 465 im Router öffnen? Ich hatte es überlegt, aber nirgends einen Hinweis dafür erlesen, und ich möchte ungern ohne Grund Ports zu meinem Heimnetzwerk öffnen.
Über einen Hinweis in die richtige Richtung würde ich mich freuen.
MfG
Julian
Da sucht man stundenlang und findet einen Teil der Antworten direkt nachdem man sich die Mühe mit einem Kommentar gemacht hat… Also natürlich brauche sollten die Ports im Router geöffnet sein, so wie es auch ganz am Anfang auf Stalw.art steht unter „Getting started“ steht. Ein weiteres Problem hat sich allerdings aufgetan und zwar ließen sich bei Ionos in den DNS Records zwei Einträge vom Mailserver NICHT übernehmen. Namentlich waren dies „TXT mail.example.org. v=spf1 a ra=postmaster -all“ und „TXT example.org. v=spf1 mx ra=postmaster -all“, wobei jeweils der Abschnitt „ra=postmaster“ das Problem darstellte. Ohne diesen Abschnitt ließ sich der Record problemlos eintragen. Könnte es sein, dass dieser fehlende Abschnitt den gesamten Trafic verhindert?
Hallo,
der Abschnitt ra=postmaster dient dazu, eine Adresse für Missbrauchsmeldungen (Abuse Reports) zu hinterlegen. Manche DNS-Anbieter, wie Ionos, akzeptieren diesen Parameter fälschlicherweise nicht. Das ist aber nicht weiter schlimm und hat keinen direkten Einfluss auf das Versenden oder Empfangen von Mails.
Viele Grüße
Christian
Hallo Julian,
wenn du den Mailserver von außerhalb nutzen möchtest (z.B. mit Thunderbird auf dem Handy), müssen die Ports 993 (IMAPS) und 465 (SMTPS) in deinem Router weitergeleitet werden – andernfalls kommt keine Verbindung zustande. Das gilt auch dann, wenn Nginx als Reverse Proxy agiert, denn die Anfragen müssen überhaupt erst in dein Netzwerk gelangen.
Versuch das mal und gib gerne mal Rückmeldung.
Viele Grüße
Christian
Lieber Christian,
vielen Dank für den Support. Ich habe nun tatsächlich vom eigenen Mailserver mithilfe meines mobilen Endgeräts (verbunden über mobile Daten, also nicht im gleichen Netzwerk wie der Server) meine erste Mail verschicken können. Allerdings war dies eher eine Verzweiflungstat, da ich den Thunderbird auf meinem Rechner einfach nicht dazu bewegen konnte, meinen Mailaccount zu akzeptieren. Als ich jetzt versucht habe Mails an verschiedene eigene und familäre Adressen zu schicken, erfuhr ich auch, warum das vermutlich nicht geht. Und zwar wurden die Mails an Web.de, outlook, usw. zwar verschickt, aber auch prompt mit einer Fehlermeldung beantwortet, die mir erklärte, dass meine IP sich auf der Blocklist von Spamhaus.org o.ä. befindet. Dort stand dann meine ipv4 Adresse, die ich allerdings gar nicht besitze, da mein ISP meine ipv4 Anfragen über einen DS-Lite Tunnel auflöst. Eine statische ipv6 Adresse besitze ich, scheint aber für Spamhaus keine Rolle zu spielen.
Empfangen von eMails funktioniert mit meinem Handy tadellos (ich nutze da Bluemail als App – die checken vermutlich nicht bei Spamhaus nach), Thunderbird – wie gesagt – sträubt sich mein Konto hinzuzufügen.
Das Problem mit dem DS-Lite Tunnel lässt sich wohl so schnell nicht beheben, es sei denn, ich wäre gewillt Geld für eine statische ipv4 Adresse auszugeben.
Beste Grüße und einen schönen Abend
Julian
Moin Julian,
DSlite war schon seit jeher Mist… Versuche doch über nen SMTP Relay zu senden und dabei ein Postfach bei Deinem Hoster zu verwenden, sofern Du nicht nur Domain-Hosting hast.
Übrigens immer dann sinnvoll, wenn ihr im DNS keinen RDNS Eintrag setzen könnt.
VG
DSC
Danke Daniel für den Hinweis,
kurzer Abriss meiner letzten Aktionen:
– habe jetzt Anschluss OHNE DSlite, d.h. ipv4 & ipv6 sind vorhanden (dynamisch zwar, aber immerhin)
– Server dort installiert
– trotz eigener ipv4 allerdings immernoch keine zufriedenstellenden Resultate beim mail-tester: spamhaus blockt per se alle dynamischen IP Adressen eines isp, eben aus Spamschutzgründen; viele andere Blocklisten ebenfalls
– SMTP Relay (ich nutze mailjet im kostenlosen Tarif mit 6000 „Freimails“ pro Monat) angemeldet (musste dem Kundendienst recht detailliert beschreiben, was ich vorhabe und wofür, bevor ich meine Domain mit dem Relay verbinden konnte … DNS Einträge anpassen usw.)
– in Stalwart unter „Settings“ – „SMTP“ – „Outbound“ – „Relay Host“ – „Create Host“ – Infos vom relay Host eintragen
– unter „SMTP“ – „Routing“ – in zweiter Zeile die „Host ID“ vom „Create Host“ als ‚hostid‘ eintragen
–> jetzt werden fast alle Mails erfolgreich zugestellt (7/10 Punkte beim mail-tester) – an gmail adressierte mails werden vom mailer-daemon mit
(MTA-STS failed to authenticate ‚gmail.com‘: MX „in-v3.mailjet.com“ not authorized by policy.) beantwortet. (hotmail ebenso – viele andere funktionieren)
–> Mail-tester: Punktabzug durch fail beim dmarc-test:
“
Details der Überprüfung:
mail-tester.com; dmarc=fail header.from=.de
mail-tester.com; dkim=fail reason=“signature verification failed“ (2048-bit key; unprotected) header.d=.de header.i=mail@.de header.b=fysdDp0s; dkim-atps=neutral
From Domain: .de
DKIM Domain: .de
“
Jetzt wäre nur noch zu klären, was diese MTA-STS ist und warum google mails von meinem smtp relay nicht akzeptieren will. Vermutlich hängt es mit dem dmarc test zusammen, aber da bin ich mit meinem Latein am Ende. Falls jemand einen klugen Ratschlag hat, würde ich mich freuen. Falls ich auf die Lösung stoße, werde ich sie hier präsentieren.
Gruß
Julian
Hat es von euch jemand geschafft Stalwart hinter Caddy zu installieren?
Also insbesondere die Caddy-Zertifikate zu akzeptieren und zu verwenden ohne diese per Script umzukopieren…
Super Sache. Sehr gut. Vielen Dank.
In Punkt „7. E-Mail-Client konfigurieren“
heißt es explizit:
„Benutzername: Die vollständige E-Mail-Adresse, z. B. benutzername@meinedomain.de
Passwort: Das in der Kontoerstellung festgelegte Passwort“
Thunderbird schlägt „benutzername“ vor und akzeptiert folglich keine vollständige Mail-Adresse wie
z. B. benutzername@meinedomain.de.
Im Übrigen, der Versand klappt noch nicht.
Eine Testmail zu gmail bleibt hängen bei:
„Connecting to 142.251.173.27
Attempting to establish TCP connection to 142.251.173.27 on port 25…
…
Connection Failed
Connection timeout“
Kann es sein, dass bei meinem ISP Port 25 freigeschaltet werden muss?
Tolle Anleitung 👍
Leider versuche ich schon seit Tagen, den Port 993 in der Fritzbox zu öffnen – leider ohne Erfolg.
Über Telnet und Websites wie yougetsignal.com/tools/open-ports bekomme ich nur die Information, dass der Port nicht offen ist – über telnet und die lokale IP-Adresse wird der Port auch nicht als „geöffnet“ angezeigt. Es läuft aber keine Firewall wie ufw. Woran kann dann dieser Fehler liegen?
Vielen Dank für die Hilfe schon mal im Voraus!