Zum Inhalt

Stalwart

Einleitung und Rolle

Stalwart ist der zentrale Mailserver der Selfhost-Infrastruktur. Der Dienst stellt die Mail-Protokolle bereit und ist die Basis für Mailversand, Mailempfang, Mailbox-Zugriff, Autoconfig/Autodiscover und die Administrationsoberfläche.

Stalwart ist bewusst nicht vollständig in die zentrale routes.json-Registry integriert. Mail hat mehrere Sonderfälle: klassische Mail-Ports müssen direkt am Host erreichbar sein, mehrere mailbezogene Hostnames teilen sich eine Caddy-Site, und die HTTP-Routen benötigen spezielle Weiterleitungen und CORS-Regeln für Webmail und Admin-Oberfläche. Deshalb bleiben die Mail-Routen manuell in /etc/caddy/Caddyfile gepflegt.

Die Admin-Oberfläche ist unter https://stalwart.marcosudau.com erreichbar. mail.marcosudau.com ist der zentrale Mail-Hostname. Alte Admin-Aliase leiten auf die kanonische Stalwart-Admin-Subdomain weiter.

Persistente Daten und Backup-Relevanz

Pfad Zweck Backup-Relevanz
/opt/selfhost/data/stalwart/etc Stalwart-Konfiguration im Container unter /etc/stalwart hoch
/opt/selfhost/data/stalwart/etc/config.json aktive Basis-Konfiguration hoch
/opt/selfhost/data/stalwart/data Stalwart-Datenverzeichnis im Container unter /var/lib/stalwart kritisch
/opt/selfhost/secrets/stalwart.env Public-URL- und Recovery-bezogene Umgebungsvariablen hoch
/opt/selfhost/stacks/mail/docker-compose.yml Compose-Definition des Mail-Stacks hoch
/etc/caddy/Caddyfile manuelle Mail-Routen, Redirects, CORS, Reverse Proxy hoch

Das Datenverzeichnis /opt/selfhost/data/stalwart/data ist kritisch, weil dort der eigentliche Stalwart-Datenbestand liegt. Secrets werden nicht im Klartext dokumentiert; gesichert wird die Secret-Datei, nicht ihr Inhalt in der Dokumentation.

Stack, Container und Docker Compose

Der Stack liegt unter /opt/selfhost/stacks/mail/ und läuft als Docker-Compose-Projekt mail.

Container Image Zweck
stalwart stalwartlabs/stalwart:v0.16 Hauptcontainer für Mailserver und Stalwart-HTTP-Oberfläche
stalwart-loopback-proxy alpine/socat:latest lokaler TLS/SNI-Loopback-Proxy für Caddy-Zugriff auf Stalwart

Host-Ports:

Port Binding Zweck
25 öffentlich SMTP-Empfang
465 öffentlich SMTPS
587 öffentlich Submission
993 öffentlich IMAPS
995 öffentlich POP3S
4190 öffentlich ManageSieve
127.0.0.1:8082 lokal interner Stalwart-HTTP-Port 8080
127.0.0.1:8443 lokal lokaler Proxy-Port für Caddy

Der stalwart-loopback-proxy nutzt network_mode: service:stalwart und teilt sich den Netzwerk-Namespace des Stalwart-Containers. Er wartet auf http://127.0.0.1:8080/healthz/live und startet danach socat, um lokal auf :8443 zu lauschen und zu Stalwarts internem TLS-Port 127.0.0.1:443 mit SNI mail.marcosudau.com weiterzuleiten.

HTTP-Routen und Subdomains

Mailbezogene HTTP-Routen werden manuell in /etc/caddy/Caddyfile gepflegt und nicht aus routes.json generiert.

Hostname Verhalten
stalwart.marcosudau.com Stalwart-Admin-Oberfläche; / wird nach /admin/ umgeschrieben; Proxy auf 127.0.0.1:8443
adminmail.marcosudau.com permanenter Redirect auf https://stalwart.marcosudau.com{uri}
mailadmin.marcosudau.com permanenter Redirect auf https://stalwart.marcosudau.com{uri}
mail.marcosudau.com mailbezogene HTTP-Endpunkte; Proxy auf 127.0.0.1:8443
autoconfig.marcosudau.com Autoconfig-Hostname; Proxy auf 127.0.0.1:8443
autodiscover.marcosudau.com Autodiscover-Hostname; Proxy auf 127.0.0.1:8443
mta-sts.marcosudau.com MTA-STS-naher Hostname; Proxy auf 127.0.0.1:8443

Die gemeinsame Mail-Site enthält CORS-Regeln für Bulwark/Webmail und Stalwart-nahe Admin-Hostnames. Typische Scanner-Pfade wie .env, wp-*, cgi-bin, xmlrpc und ähnliche Muster werden direkt mit 404 beantwortet.

Zugehörige Dienste und Abhängigkeiten

Abhängigkeit Rolle
Caddy TLS-Terminierung und HTTP-Reverse-Proxy für Admin-, Autoconfig- und Webmail-nahe Routen
DNS/Wildcard-DNS Subdomains zeigen auf den VPS; Mail-spezifische DNS-Records müssen separat konsistent bleiben
/opt/selfhost/secrets/stalwart.env Public-URL- und Recovery-bezogene Umgebungsvariablen
Bulwark Webmail-Frontend, nutzt Stalwart als Mail-/JMAP-Backend

Authentifizierung und Sicherheit

Authentik ist nicht mehr vorgeschaltet. Stalwart verwendet seine eigene Authentifizierung. Die klassischen Mail-Ports sind bewusst öffentlich gebunden, weil externe Mailclients und Mailserver sie erreichen müssen. Die HTTP-Zugänge laufen über Caddy; 127.0.0.1:8443 ist nur lokal gebunden.

Secrets und Umgebungsvariablen

Die Secret-Datei liegt unter /opt/selfhost/secrets/stalwart.env. Dokumentiert werden nur die Variablennamen, nicht die Werte.

Variable Zweck
STALWART_PUBLIC_URL öffentliche Basis-URL, die Stalwart für externe Links/URLs verwendet
STALWART_RECOVERY_ADMIN Recovery-/Admin-bezogene Start- oder Notfallkonfiguration