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

Catch-All

Catch-All Alias anlegen:

kubectl -n mail exec -it deployments/docker-mailserver -- sh -c \
'echo @test.tamay.cloud admin@test.tamay.cloud \
> /tmp/docker-mailserver/postfix-virtual.cf'

Betrieb

Deployment und Konfiguration werden vollständig über GitOps verwaltet.