Zurück zur Startseite

Mailu in Kubernetes: Einrichtung eines Mail-Servers für Entwickler

Der Artikel beschreibt den Prozess der Bereitstellung des Mailu-Mail-Servers in einem Kubernetes-Cluster mit Helm. Er behandelt die Vorbereitung von DNS-Einträgen, die Einrichtung von Netzwerkrichtlinien, die Lösung von TLS-Problemen und die Konfiguration von DKIM, DMARC, SPF, um die Mail-Zustellung zu gewährleisten.

So stellt man Mailu in Kubernetes bereit: vollständige Anleitung
Advertisement 728x90

Mailu-Mailserver auf Kubernetes bereitstellen: Schritt-für-Schritt-Anleitung

Mailu ist ein containerisierter Mailserver, der speziell für Docker- und Kubernetes-Umgebungen optimiert ist. Im Gegensatz zu klassischen Postfix- und Dovecot-Setups, die aufwendige Konfigurationen erfordern, lässt sich Mailu mit minimalem Aufwand deployen – ideal für Homelabs und Testumgebungen. Diese Anleitung führt Sie durch die Installation von Mailu in einem Kubernetes-Cluster mit Helm, inklusive Netzwerkrichtlinien, DNS-Einträge und Sicherheitsmaßnahmen.

Infrastruktur und DNS vorbereiten

Bevor Sie Mailu installieren, richten Sie die grundlegende Infrastruktur ein. Zuerst benötigen Sie eine Domain mit DNS-Verwaltung – für dieses Beispiel verwenden wir beispiel-domain.de. Zweitens sichern Sie sich eine statische öffentliche IP (z. B. 1.2.3.4) mit einem Reverse-DNS-Eintrag (PTR-Record), den Ihr Provider einrichtet. Ohne PTR-Record landen Ihre E-Mails bei großen Anbietern wie Gmail direkt im Spam.

Wichtige DNS-Einträge anzulegen:

Google AdInline article slot
  • A-Record: mail.beispiel-domain.de → 1.2.3.4
  • MX-Record: @ → mail.beispiel-domain.de

Nach der Einrichtung prüfen Sie mit nslookup 1.2.3.4 – es sollte zu mail.beispiel-domain.de auflösen und Ihren PTR-Record bestätigen.

Kubernetes einrichten und Mailu deployen

Aus Sicherheitsgründen isolieren Sie den Mailserver in einem eigenen Namespace, um Risiken zu minimieren – hier verwenden wir dmz-mailu. Legen Sie sofort eine Netzwerkrichtlinie an, die allen eingehenden und ausgehenden Traffic standardmäßig blockiert und nur notwendige Ports freigibt.

Beispiel-Netzwerkrichtlinie (network-policy-dmz-mail.yaml):

Google AdInline article slot
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-dmz-mail-deny
  namespace: dmz-mail
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-mailu-ports
  namespace: dmz-mail
spec:
  podSelector: {}
  egress:
    - to:
      - namespaceSelector:
          matchLabels:
            kubernetes.io/metadata.name: kube-system
      ports:
      - protocol: UDP
        port: 53
      - protocol: TCP
        port: 25
      - protocol: TCP
        port: 465

Fügen Sie als Nächstes das Mailu-Helm-Repository hinzu und erstellen Sie eine values.yaml-Datei. Wichtige Einstellungen umfassen Ihre Domain, Zeitzone, initiales Admin-Konto, Speicheroptionen und Netzwerkschnittstellen. Passen Sie die StorageClass an Ihr Cluster an.

Kernparameter in values.yaml:

  • hostnames: ["mail.beispiel-domain.de"]
  • domain: beispiel-domain.de
  • initialAccount für die Admin-Einrichtung
  • PostgreSQL- oder MariaDB-Konfigs
  • Persistenz-Einstellungen (z. B. size: 50Gi)
  • Ingress-Konfig mit cert-manager-Annotationen
  • Frontend als LoadBalancer-Typ

Installieren Sie das Chart mit:

Google AdInline article slot
helm install mailu mailu/mailu -n dmz-mailu --values mailu_values.yaml

TLS-Probleme beheben und erweiterte Konfiguration

Mailu stößt bei Ingress oft auf SSL-Fehler durch TLS-Spezifika. Eine Lösung ist ein dedizierter LoadBalancer-Service für das Frontend, der die Weboberfläche auf eine eigene IP auslagert und Ingress-TLS-Konflikte umgeht.

Beispiel-Manifest (svc-mailu-front-web.yaml):

apiVersion: v1
kind: Service
metadata:
  name: svc-mailu-front-web
  namespace: dmz-mail
spec:
  externalTrafficPolicy: Local
  ports:
  - port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app.kubernetes.io/component: front
    app.kubernetes.io/instance: mailu
    app.kubernetes.io/name: mailu
  type: LoadBalancer
  loadBalancerIP: 192.168.10.201

Wenden Sie es an, dann weisen Sie mail-local.beispiel-domain.de diese IP in Ihrer lokalen DNS oder hosts-Datei zu. Leiten Sie außerdem Port 25 vom Gateway zur loadBalancerIP in values.yaml für eingehende Mails weiter.

DKIM, DMARC und SPF konfigurieren

Für zuverlässige Zustellung bei Gmail oder Outlook richten Sie DKIM, DMARC und SPF ein. Diese Authentifizierungsprotokolle bestätigen die Echtheit des Absenders und halten E-Mails aus dem Spamordner.

Schritte:

  • Im Mailu-Admin-Webinterface zu AdministrationMail-Domains → Domain auswählen → Bearbeiten.
  • Schlüssel generieren oben rechts klicken.
  • TXT-Records für DKIM, DMARC und SPF in die DNS Ihrer Domain kopieren.
  • Auf Propagation warten (bis zu 48 Stunden).

Validieren Sie mit Tools wie mxtoolbox.com. Testen Sie durch Versand an externe Adressen – erste Mails landen ggf. im Spam, prüfen Sie Junk-Ordner.

Performance- und Sicherheitsoptimierung

Mailu enthält optionale Komponenten, die Sie deaktivieren können, um Ressourcen zu sparen oder die Einrichtung zu vereinfachen. ClamAV (Antivirus), OleTools (Office-Dateiscanner) und Tika (Metadaten-Handler) sind für Kern-Mailfunktionen nicht zwingend – setzen Sie sie in values.yaml auf false.

Empfohlen für Heimnutzung:

  • clamav: false
  • oletools: false
  • tika: false

Rspamd (Spamfilter) behalten Sie aktiviert – es filtert eingehende und ausgehende Mails effektiv.

Wichtige Erkenntnisse

  • PTR-Record für die statische IP ist essenziell für zuverlässige Zustellung.
  • Separater Namespace und Netzwerkrichtlinien erhöhen die Sicherheit.
  • Separater LoadBalancer-Service löst Ingress-TLS-Probleme.
  • DKIM, DMARC und SPF sind Pflicht für externe Zustellung.
  • Nicht benötigte Komponenten wie ClamAV deaktivieren, um Ressourcen zu sparen.

— Editorial Team

Advertisement 728x90

Weiterlesen