Zum Inhalt springen
Serverküche
Suche

Die Suche wird geladen … (nur in der veröffentlichten Seite verfügbar).

Anwendungen Schwierigkeit: Fortgeschritten

Stalwart: der schlanke Mailserver in einem Container

Stalwart Mail Server mit Docker aufsetzen: SMTP, IMAP, JMAP und Spam-Filter in einem einzigen, schlanken Container – die moderne Alternative zu Mailcow.

· 9 Min. Lesezeit ·Dauer: ca. 60 Minuten
Inhaltsverzeichnis

Ein eigener Mailserver muss nicht aus zwei Dutzend Containern bestehen. Stalwart packt den kompletten Mailserver – SMTP, IMAP, JMAP, Spam-Filter und Speicher – in einen einzigen, in Rust geschriebenen Container. Das macht ihn schlank, schnell und wartungsarm: die moderne, leichtgewichtige Alternative zu Schwergewichten wie Mailcow.

Mailserver bleiben anspruchsvoll – egal wie schlank

Stalwart ist einfacher aufzusetzen als klassische Stacks, nimmt dir aber die Kernaufgabe eines Mailserver-Betreibers nicht ab: Zustellbarkeit. Ob deine Mails ankommen oder im Spam landen, entscheiden SPF, DKIM, DMARC und ein sauberer Reverse-DNS-Eintrag – nicht die Software. Genau das behandeln wir im Folge-Tutorial. Wer keine Lust auf diese Dauerpflege hat, fährt mit einem seriösen Mail-Hoster oft besser. Das ist eine ehrliche Abwägung, keine Schwäche.

Was bauen wir?

Am Ende läuft Stalwart 0.16.14 als einzelner Docker-Container auf deinem Server und stellt alles bereit, was ein vollwertiger Mailserver braucht:

  • SMTP (Senden/Empfangen) auf den Ports 25, 465 und 587,
  • IMAP (993) und das moderne JMAP für schnelle, effiziente Clients,
  • ManageSieve (4190) für serverseitige Filterregeln,
  • einen eingebauten Spam- und Phishing-Filter (kein separater Rspamd/ClamAV nötig),
  • einen integrierten Speicher (RocksDB) – keine externe Datenbank,
  • eine moderne Weboberfläche zur Verwaltung von Domains, Konten und Einstellungen.

Der große Unterschied zu Mailcow: Es ist ein Prozess, ein Container, wenige Hundert Megabyte Image. Das senkt RAM-Bedarf, Angriffsfläche und Wartungsaufwand deutlich. Getestet mit Docker 29 auf Debian 13.

Warum lohnt sich der schlanke Ansatz? Ein klassischer Mailserver-Stack besteht aus einem guten Dutzend Diensten – Postfix, Dovecot, Rspamd, ein Datenbankserver, ein Virenscanner, Redis, ein Webserver – die alle einzeln laufen, aktualisiert und aufeinander abgestimmt werden müssen. Jeder davon ist eine potenzielle Fehlerquelle und ein Stück Angriffsfläche. Stalwart bündelt dieselbe Funktionalität in einer einzigen, in Rust geschriebenen Anwendung. Rust bringt zudem Speichersicherheit von Haus aus mit – für eine Software, die ungefiltert Daten aus dem ganzen Internet entgegennimmt, ist das ein echtes Sicherheitsargument.

Voraussetzungen

  • Ein eigener Server mit Debian 13 und installiertem Docker, auf dem die Mail- und Web-Ports frei sind (kein Reverse Proxy, der 25/443 belegt).
  • Eine Domain, deren DNS du selbst steuerst – für den A-Record des Mailservers und den MX-Record.
  • Port 25 ausgehend muss offen sein. Viele Provider sperren ihn gegen Spam; bei netcup schaltest du ihn per Support-Ticket frei. Ohne offenen Port 25 kannst du keine Mails an fremde Server zustellen.
  • Ein PTR-/Reverse-DNS-Eintrag für die Server-IP (im netcup-SCP), der auf deinen Mail-Hostnamen zeigt.

Stalwart ist genügsam – für den Einstieg reicht ein kleiner Server. Wie viel dein Setup insgesamt braucht, schätzt dir der Server-Rechner.

🍳 Empfehlung Anzeige

VPS 1000 G12

4 vCore · 8 GB RAM · 256 GB NVMe

ab 10,36 €/Monat

Stalwart ist schlank – der VPS 1000 reicht für den Einstieg gut aus.

Zu netcup →

💶 5 € Gutschein für netcup-Neukunden:36nc17844976032 (nur Neukunden, keine Domains)

Schritt für Schritt

Schritt 1: DNS-Records anlegen

Richte zuerst die DNS-Einträge ein – sie brauchen Zeit zum Propagieren. DEINE_DOMAIN ist deine Mail-Domain, DEINE_SERVER_IP die IPv4-Adresse des Servers:

Ausgabe
mail.DEINE_DOMAIN.   A     DEINE_SERVER_IP
DEINE_DOMAIN.        MX    10 mail.DEINE_DOMAIN.

Der MX-Record verweist andere Mailserver an mail.DEINE_DOMAIN. Dieser Hostname ist die Identität deines Servers. SPF, DKIM und DMARC ergänzen wir im Zustellbarkeits-Tutorial – die DKIM-Schlüssel erzeugt Stalwart im Setup selbst.

Schritt 2: Die compose.yaml schreiben

Lege einen Ordner an und wechsle hinein:

Terminal
mkdir -p /opt/stalwart && cd /opt/stalwart

Erstelle die Datei compose.yaml:

YAML
services:
  stalwart:
    image: stalwartlabs/stalwart:v0.16.14
    container_name: stalwart
    restart: unless-stopped
    ports:
      - "25:25"       # SMTP (Server-zu-Server)
      - "465:465"     # SMTPS (Senden, implizites TLS)
      - "587:587"     # Submission (Senden, STARTTLS)
      - "143:143"     # IMAP
      - "993:993"     # IMAPS
      - "4190:4190"   # ManageSieve
      - "8080:8080"   # Weboberfläche & JMAP (Ersteinrichtung)
      - "443:443"     # HTTPS (nach der Einrichtung, eigenes Zertifikat)
    volumes:
      - stalwart_data:/opt/stalwart
volumes:
  stalwart_data:

Das Wichtigste: ein Service, ein Volume für alle Daten. Stalwart holt sich sein TLS-Zertifikat später selbst per Let’s Encrypt – einen separaten Reverse Proxy brauchst du dafür nicht. Achte darauf, dass Port 443 auf dem Host frei ist (Stalwart nutzt ihn auch für den Zertifikatsabruf, siehe Schritt 4).

Schritt 3: Den Container starten und das Startpasswort holen

Starte Stalwart:

Terminal
docker compose up -d

Beim allerersten Start läuft Stalwart im Bootstrap-Modus: Es gibt noch keine Konfiguration, und Port 8080 ist für die Ersteinrichtung offen. Dabei erzeugt es ein einmaliges Administrator-Passwort, das du aus den Logs abliest:

Terminal
docker compose logs | grep -A2 "temporary administrator"
Ausgabe
🔑 Stalwart bootstrap mode - temporary administrator account
   password: <EINMAL-PASSWORT>

Notiere dieses Passwort – es wird nur einmal angezeigt. (Wenn du lieber ein festes Passwort setzt, kannst du in der compose.yaml unter environment: ein STALWART_RECOVERY_ADMIN=admin:DEIN_PASSWORT hinterlegen.)

Schritt 4: Anmelden und den Einrichtungs-Assistenten durchlaufen

Rufe die Weboberfläche im Browser auf: http://DEINE_SERVER_IP:8080/admin. Du landest auf der Anmeldung. Melde dich als Benutzer admin mit dem Einmal-Passwort aus Schritt 3 an – die Eingabe erfolgt in zwei Schritten (erst Benutzername, dann Passwort):

Die Anmeldemaske der Stalwart-Weboberfläche mit Feld für den Benutzernamen.
Der Login der Stalwart-Weboberfläche.

Nach der Anmeldung begrüßt dich der Einrichtungs-Assistent. Im ersten Schritt legst du die Server-Identität fest:

  • Server Hostname: mail.DEINE_DOMAIN – der FQDN aus deinem A-Record.
  • Default Email Domain: DEINE_DOMAIN – deine Mail-Domain.
  • Automatically Obtain TLS Certificate aktiviert lassen – Stalwart holt das Let’s-Encrypt-Zertifikat selbst. Dafür muss Port 443 von außen erreichbar sein: Stalwart nutzt standardmäßig die TLS-ALPN-01-Challenge über 443, Port 80 braucht es dafür nicht.
  • Generate Email Signing Keys aktiviert lassen – das erzeugt gleich deine DKIM-Schlüssel.

Der Ersteinrichtungs-Assistent von Stalwart mit den Feldern für Server-Hostname und Standard-Domain.
Schritt 1 des Assistenten: die Server-Identität.

Klick dich durch die weiteren Schritte des Assistenten:

  • Speicher (Storage): Die Voreinstellung RocksDB ist ein eingebetteter Schlüssel-Wert-Speicher und für Einzelserver-Setups perfekt – kein externer Datenbankserver nötig. Nur für große, geclusterte Installationen greifst du zu PostgreSQL o. Ä.
  • Verzeichnis (Directory): Das interne Verzeichnis verwaltet Konten und Passwörter direkt in Stalwart. Wer bereits ein zentrales LDAP/Active Directory betreibt, kann es hier stattdessen anbinden – für den Einstieg bleibst du beim internen Verzeichnis.
  • Logging: Legt fest, wie ausführlich Stalwart protokolliert. Info ist im Alltag ein guter Kompromiss; bei Problemen drehst du kurzzeitig auf Debug.
  • DNS: Für den Anfang genügt die manuelle Verwaltung – die anzulegenden Records zeigt dir Stalwart später unter der jeweiligen Domain an.

Zum Abschluss erzeugt Stalwart dein dauerhaftes Administrator-Konto und zeigt dessen Passwort ein einziges Mal an – schreib es dir sofort weg. Ab jetzt ist der Bootstrap-Modus beendet und Port 8080 nicht mehr offen für die Einrichtung; die Konsole erreichst du künftig über HTTPS.

Schon ein Reverse Proxy im Einsatz?

Anders als klassische Mailserver kann Stalwart seine Weboberfläche problemlos hinter einem bestehenden Traefik laufen – route dann einfach den HTTP-Port 8080 dorthin. Die Mail-Ports (25, 465, 587, 993 …) müssen aber weiterhin direkt am Server anliegen, denn sie sprechen kein HTTP und lassen sich nicht über einen HTTP-Proxy leiten.

Schritt 5: Domain und erstes Postfach anlegen

Nach dem Setup bist du in der Verwaltungskonsole. Über die linke Navigation erreichst du Directory → Domains und Directory → Accounts. Lege bei Bedarf weitere Domains an und dann dein erstes Postfach:

Die Stalwart-Verwaltungskonsole mit der Kontenübersicht.
Die Verwaltungskonsole: Konten verwalten.

Über Create account (bzw. Konto anlegen) legst du ein Postfach an – E-Mail-Adresse, angezeigter Name und ein starkes Passwort (Passwortmanager!). Dieses Konto kann sich anschließend per IMAP/JMAP und SMTP anmelden:

Das Formular zum Anlegen eines neuen Postfachs in Stalwart.
Ein neues Postfach anlegen.

Schritt 6: In einem Mailprogramm einrichten

Trage das neue Konto in deinem Mailprogramm ein. Stalwart unterstützt Autodiscovery, meist reicht also E-Mail-Adresse und Passwort. Manuell nutzt du:

Ausgabe
IMAP:        mail.DEINE_DOMAIN, Port 993, SSL/TLS
SMTP:        mail.DEINE_DOMAIN, Port 587, STARTTLS
Benutzer:    die volle E-Mail-Adresse

Neben dem altbewährten IMAP spricht Stalwart auch JMAP – ein modernes, JSON-basiertes Protokoll, das für heutige Netze entworfen wurde. JMAP überträgt nur echte Änderungen statt ganze Ordner neu zu synchronisieren, kommt mit einer einzigen Verbindung aus und ist damit spürbar sparsamer mit Akku und Datenvolumen – gerade auf dem Handy. Unterstützt dein Mail-Client JMAP (z. B. die Thunderbird-Familie in neueren Versionen), profitierst du direkt davon; ansonsten bleibst du bei IMAP, das genauso funktioniert.

Eine Mail von dir an dich selbst sollte sofort im Posteingang landen – das beweist, dass lokale Zustellung, IMAP und SMTP stehen. Der Härtetest ist aber das Senden nach außen und der Empfang von außen, und da entscheidet die Zustellbarkeit.

Hinweis

Prüfe deine Zustellbarkeit nach dem Setup mit einem Dienst wie mail-tester.com: Er bewertet SPF, DKIM, DMARC und Reverse DNS. Wie du auf die volle Punktzahl kommst, ist Thema des Zustellbarkeits-Tutorials.

Schritt 7: Spam-Filter und Sieve-Regeln

Ein großer Vorteil von Stalwart: Der Spam- und Phishing-Filter ist bereits eingebaut und aktiv – du musst keinen separaten Rspamd-Container betreiben und pflegen. Er bewertet eingehende Mails anhand zahlreicher Merkmale (Reputation, SPF/DKIM/DMARC-Ergebnis, Inhaltsheuristiken) und markiert oder blockiert Verdächtiges. In der Konsole unter Settings → Spam Filter kannst du die Empfindlichkeit anpassen und Absender auf Allow- oder Blocklisten setzen.

Für eigene Regeln beim Ein- und Ausgang unterstützt Stalwart Sieve – die standardisierte Filtersprache. Damit sortierst du z. B. Newsletter automatisch in einen Ordner oder leitest bestimmte Absender weiter. Sieve-Skripte verwaltest du serverseitig (über ManageSieve auf Port 4190) oder direkt in der Weboberfläche, sodass die Regeln unabhängig vom Mailprogramm greifen – auch dann, wenn dein Rechner aus ist.

Tipp

Weil der Filter serverseitig arbeitet, gilt er für alle deine Geräte gleichzeitig. Eine einmal angelegte Sieve-Regel oder eine Spam-Entscheidung wirkt am Handy genauso wie am Laptop – anders als bei clientseitigen Filtern, die du auf jedem Gerät neu einrichten müsstest.

Wenn es nicht funktioniert

Die Weboberfläche auf Port 8080 antwortet nicht. Der Container ist noch am Hochfahren oder Port 8080 ist belegt/geblockt. docker compose ps prüfen, docker compose logs lesen und sicherstellen, dass die Firewall Port 8080 (und später 443) durchlässt.

Ich habe das Bootstrap-Passwort verpasst. Es wird nur einmal geloggt. Setze in der compose.yaml ein STALWART_RECOVERY_ADMIN=admin:DEIN_PASSWORT unter environment: und starte mit docker compose up -d neu – damit hast du ein festes Recovery-Admin-Konto.

Kein TLS-Zertifikat, die HTTPS-Adresse zeigt eine Warnung. Let’s Encrypt erreicht deinen Server nicht auf Port 443 (Stalwart nutzt die TLS-ALPN-01-Challenge über 443), oder der A-Record von mail.DEINE_DOMAIN stimmt nicht. A-Record prüfen und Port 443 in der Firewall öffnen – Stalwart wiederholt die Zertifikatsanforderung danach automatisch.

Mails nach außen bleiben hängen, Logs zeigen Timeouts auf Port 25. Dein Provider sperrt ausgehenden SMTP-Verkehr auf Port 25. Port 25 ausgehend beim Provider freischalten lassen (bei netcup per Ticket). Ohne das ist keine Zustellung an fremde Server möglich.

Andere Server nehmen deine Mails nicht an oder sie landen im Spam. Fehlender oder falscher PTR-Eintrag, kein SPF/DKIM/DMARC. Das ist kein Fehler von Stalwart, sondern Sache der DNS-/Reputations-Konfiguration – siehe das Zustellbarkeits-Tutorial.

Wartung & Backups

Updates. Stalwart ist ein einzelner Container – ein Update ist entsprechend einfach:

Terminal
cd /opt/stalwart
docker compose pull && docker compose up -d

Lies vor größeren Sprüngen die Release-Notes auf GitHub; bleib bei einem konkreten Versions-Tag (wie hier v0.16.14) statt latest, damit Updates reproduzierbar bleiben.

Backups. Alle Daten – Nachrichten, Konten, Konfiguration und die DKIM-Schlüssel – liegen im Volume stalwart_data. Sichere dieses Volume regelmäßig weg vom Server, am saubersten verschlüsselt mit restic. Weil Stalwart die Daten im laufenden Betrieb schreibt, sicherst du am konsistentesten, indem du den Container kurz stoppst (docker compose stop), das Volume sicherst und wieder startest. Die DKIM-Schlüssel sind besonders wichtig: Gehen sie verloren, brechen nach einer Wiederherstellung deine Signaturen, bis du die DNS-Records neu setzt. Ein Backup, das du nie zurückgespielt hast, ist nur ein Hoffnungswert – teste die Wiederherstellung einmal auf einem Testsystem.

Reputation im Blick behalten. Prüfe gelegentlich, ob deine Server-IP auf einer Blockliste gelandet ist, und wirf einen Blick in die Stalwart-Konsole unter Observability. Ein kompromittiertes Postfach, das Spam verschickt, ruiniert die Reputation deiner ganzen Domain schnell.

Feedback per E-Mail: feedback@serverkueche.de

Das könnte dir auch schmecken