Docker Mailserver
Docker Mailserver stellt einen vollständigen E-Mail-Server für die Plattform bereit.
Der Dienst unterstützt den Empfang und Versand von E-Mails über SMTP sowie den Zugriff auf Postfächer über IMAP. Neben den eigentlichen Maildiensten integriert Docker Mailserver zusätzliche Komponenten für Spam-Erkennung, Virenschutz, DKIM-Signierung, SPF-Prüfung und DMARC-Unterstützung. Dadurch kann die gesamte E-Mail-Infrastruktur ohne externe Mailprovider selbst betrieben werden.
Zweck
-
SMTP Mailserver
-
IMAP Zugriff
-
DKIM Signierung
-
SPF und DMARC Unterstützung
-
Rspamd Spamfilter
-
TLS-gesicherte Maildienste
Deployment
Das Deployment erfolgt über FluxCD und das offizielle Docker-Mailserver Helm Chart.
Verwendete Ressourcen:
-
HelmRelease
-
HelmRepository
-
Gateway API
-
Cert Manager
TLS
TLS-Zertifikate werden über Cert Manager bereitgestellt.
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: mailserver-tls
spec:
secretName: mailserver-tls
Das Zertifikat wird anschließend im Helm Chart verwendet.
certificate: mailserver-tls
Netzwerk
Die Veröffentlichung erfolgt vollständig über Gateway API und Envoy Gateway.
ListenerSet
Für jeden Maildienst wird ein eigener Gateway Listener bereitgestellt.
apiVersion: gateway.networking.k8s.io/v1
kind: ListenerSet
metadata:
name: docker-mailserver
spec:
parentRef:
name: envoy
namespace: gateway
listeners:
- name: smtp
protocol: TCP
port: 25
- name: submission
protocol: TCP
port: 587
- name: submissions
protocol: TLS
port: 465
tls:
mode: Passthrough
- name: imap
protocol: TCP
port: 143
- name: imaps
protocol: TLS
port: 993
tls:
mode: Passthrough
TCP Routes
SMTP, Submission und IMAP werden über TCPRoute veröffentlicht.
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: TCPRoute
metadata:
name: smtp
spec:
parentRefs:
- name: docker-mailserver
kind: ListenerSet
sectionName: smtp
rules:
- backendRefs:
- name: docker-mailserver
port: 12525
TLS Routes
SMTPS und IMAPS werden als TLS Passthrough betrieben.
apiVersion: gateway.networking.k8s.io/v1
kind: TLSRoute
metadata:
name: mail-imaps
spec:
parentRefs:
- name: docker-mailserver
kind: ListenerSet
sectionName: imaps
rules:
- backendRefs:
- name: docker-mailserver
port: 10993
Proxy Protocol
Die Original-IP-Adresse des Mailclients wird per Proxy Protocol v2 übertragen.
Docker Mailserver erwartet hierfür die Proxy-Ports des Helm Charts.
service:
proxyProtocol:
enabled: true
Die Aktivierung im Envoy Gateway erfolgt über eine BackendTrafficPolicy.
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
name: mailserver-proxyprotocol
spec:
proxyProtocol:
version: V2
Mail Ports
Dienst |
Öffentlicher Port |
Backend Port |
SMTP |
25 |
12525 |
Submission |
587 |
10587 |
SMTPS |
465 |
10465 |
IMAP |
143 |
10143 |
IMAPS |
993 |
10993 |
Initiale Einrichtung
Nach dem ersten Deployment muss mindestens ein Benutzer angelegt werden.
kubectl -n mail exec -it deployments/docker-mailserver -- \
setup email add admin@test.tamay.cloud
Bis ein Benutzer existiert, startet der Pod regelmäßig neu.
DKIM
DKIM Schlüssel erzeugen:
kubectl -n mail exec -it deployments/docker-mailserver -- \
setup config dkim keysize 2048 domain 'test.tamay.cloud'
Bei mehreren Domains:
kubectl -n mail exec -it deployments/docker-mailserver -- \
setup config dkim keysize 2048 domain \
'test.tamay.cloud,tamay.cloud,tamay.io'
Den erzeugten DKIM Record anschließend im DNS veröffentlichen.
Rspamd
Rspamd ersetzt die klassischen Anti-Spam-Komponenten.
ENABLE_RSPAMD=1
ENABLE_CLAMAV=1
ENABLE_OPENDKIM=0
ENABLE_OPENDMARC=0
ENABLE_POLICYD_SPF=0
ENABLE_AMAVIS=0
ENABLE_SPAMASSASSIN=0
ENABLE_POSTGREY=0