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 |