, , , ,

Stalwart Mailserver selbst hosten mit Docker

min Lesezeit

Letzte Änderung

Bitte überprüfe, ob es einen neueren Artikel zu diesem Thema gibt.

Das letzte Update war vor 30. Dezember 2025 von Benedikt Schächner

Stalwart ist ein Mailserver-Dienst, den man mit Docker selber hosten kann. Dieser unterstützt auch schon CardDAV, CalDAV und WebDAV für Kontakte, Kalender und Dateien, wir konzentrieren uns aber in diesem Artikel auf die Einrichtung des eigenentlichen Mailservers. Der ganze Mailserver läuft in einem Prozess und ist relativ übersichtlich einzurichten, da es ein gutes Web-UI gibt.

Wie jedes mal braucht ihr zur Installation einen Ubuntu-Server und eine Domain (am besten mit Cloudflare verknüpft).

Installation

Zuerst einmal müssen wir ein neues Verzeichnis anlegen, in dem Stalwart seinen Konfiguration und Daten speichert.

sudo mkdir -p /opt/stalwart

Dies könnt ihr natürlich anpassen, aber dann müsst ihr die weiteren Codes entsprechend auch ändern.

Jetzt laden wir zuerst einmal das Docker-Image von Stalwartlabs runter:

sudo docker pull stalwartlabs/stalwart:latest

Den Container starten wir jetzt mit folgendem Befehl:

sudo docker run -d \
  --name stalwart \
  -p 443:443 \
  -p 8080:8080 \
  -p 25:25 \
  -p 587:587 \
  -p 465:465 \
  -p 143:143 \
  -p 993:993 \
  -p 4190:4190 \
  -p 110:110 \
  -p 995:995 \
  -v /opt/stalwart:/opt/stalwart \
  stalwartlabs/stalwart:latest

Hier eine kleine Erklärung zu den Ports und wofür diese benötigt werden:

  • 443: HTTPS (Web-UI, JMAP, ACME, Autoconfig)
  • 8080: HTTP (nur für Setup, danach besser deaktivieren)
  • 25: SMTP (Eingehende Mails von anderen Servern)
  • 465/587: SMTP Submission (Ausgehende Mails von Clients)
  • 143/993: IMAP (Mailabruf)
  • 110/995: POP3 (Mailabruf, meistens unnötig -> es läuft alles über IMAP)
  • 4190: ManageSieve (Filterregeln)

Nachdem der Docker Container jetzt erfolgreich läuft müssen wir sofort folgendem Befehl ausführen, um das Admin-Passwort rauszufinden:

docker logs stalwart

Das Passwort sollte dann ungefähr so dargestellt werden:

✅ Configuration file written to /opt/stalwart/etc/config.toml
🔑 Your administrator account is 'admin' with password 'w95Yuiu36E'.

Mit diesem Daten könnt ihr euch unter http://deine-server-ip:8080 anmelden.

Konfiguration

Schön wärs, wenn jetzt schon alles funktionieren würde, aber leider müssen wir noch ein paar Konfigurationen durchführen.

Portfreigaben einrichten

In eurem Router (z.B. in der FRITZ!Box) müsst ihr diese Ports jetzt alle freigeben:

BezeichnungProtokollPort
SMTPTCP25
SMTPTCP465
IMAPSTCP993

Achtet darauf, dass die Freigaben sowohl für IPv4 als auch IPv6 erstellt werden.

Mailserver-Domain einrichten

Um die Mailserver-Domain einzurichten müsst ihr auf Settings/Server/Network gehen. Unter „Hostname“ muss dann ein gewünschter Hostname von euch rein – es würde sich etwas wie mailserver.domain.de oder mail.domain.de anbieten. In Cloudflare muss mit dem A-Record über die IPv4-Adresse auf euren Hostname verweisen (also auf mailserver.domain.de oder mail.domain.de); bei Cloudflare müsst ihr darauf achten, dass nicht „Mit Proxy“ ausgewählt ist; der Verkehr soll nicht über Cloudflare geleitet werden.

Domain

Unter Directory/Domains müsst ihr eure Domain einrichten. Hier nutzt ihr eure Main-Domain (also keine Subdomain, sondern z.b. schächner.de). Hier müsst ihr dann unter „…“ auf „View DNS records“ gehen und eure DNS-Einträge anschauen; diese müsst ihr ALLE so 1:1 in – am besten – Cloudflare übernehmen.

Outbound-Routing

Theoretisch können jetzt schon E-Mails reinkommen. Aber da wir/ihr evtl. keine statische IPv4 habt, sondern eine dynamische, die sich verändert, benötigen wir einen Relay Host, über den die Mails geleitet werden, damit diese nicht im SPAM-Ordner landen bzw. überhaupt gar nicht ankommen. Wir nutzen als Relay-Host Brevo. Um diesen einzurichten müsst ihr unter SMTP/Outbound/Routing auf „Create route“ gehen. Als „ID“ könnt ihr „brevo“ nutzen; der Type ist „Relay Host“. Die Server-Details sind folgende:

SERVER DETAILS
Address: smtp-relay.brevo.com
Port: 587
Protocol: SMTP
TLS
Implicit TLS (AUS)
Allow Invalid Certs (EIN)
Authentication
Username: ...@smtp-brevo.com
Secret: xxxxxxxxx

Unter https://app.brevo.com/settings/keys/smtp seht ihr nochmal genau den SMTP-Username und dort könnt ihr auch einen eigenen SMTP-Secret erstellen.

Jetzt müssen wir in Stalwart auf „Outbound -> Strategies“ gehen und ‚brevo‘ bei „Routing“ eingeben:

Zertifikat erstellen

Unter Server -> TLS -> Certificates müssen wir jetzt noch ein TLS-Zertifikat erstellen. Hierführ geht ihr auf „Create certificate“ und könnt eine beliebige ID vergeben; unter „Certificate“ muss dann das Zertifikat rein und unter „Private Key“ der private Schlüssel. Das Zertifikat erstellen wir mit folgendem Code:

sudo certbot certonly \
  --standalone \
  --preferred-challenges http \
  --rsa-key-size 4096 \
  --force-renewal \
  -d mail(server).domain.de \
  --email irgendwas@mail.de \
  --agree-tos \
  --non-interactive

In das Feld „Certificate“ muss jetzt der ganze Inhalt, der in der Datei /etc/letsencrypt/live/mail(server)domain.de-0001/fullchain.pem steht. In „Private Key“ muss der Inhalt von „/etc/letsencrypt/live/mail(server)domain.de-0001/privkey.pem

Mail-Accounts erstellen

Zu guter letzt müssen wir nun die eigentlichen Mail-Accounts erstellen. Dazu gehen wir auf Management -> Directory -> Accounts und auf „Create Account“. Der „login name“ ist der Anmelde-Name, und bei „Email“ muss dann eure gewünschte E-Mail-Adresse rein, wie z.b. technik@domain.de. Unter „Authentication“ lässt sich das Passwort festlegen und unter „Limits“ z.b. noch eine E-Mail-Speicher-Begrenzung.

Um den Mailversand zu testen könnt ihr mail-tester.com nutzen; an die angegebene Adresse müsst ihr eine E-Mail schicken und diese prüfen dann eure Mailserver-Konfiguration auf Fehler.

Falls noch Fragen/Probleme aufgetreten sind, könnt ihr diese gerne in die Kommentare oder uns privat auf server@schächner.de schreiben!

Viel Spaß bei der Installation und der Einrichtung!


Hier sind als letztes noch Links zu unseren Social-Media-Kanälen, auf denen wir regelmäßig Updates zu neuen Artikeln und anderen relevanten Informationen veröffentlichen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert