Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung E-Mail / Mailserver 02.06.2026 · 10 min Lesezeit

Mailcow komplett aufsetzen – eigener Mailserver mit Docker

Diese Anleitung führt Sie Schritt für Schritt durch ein komplettes Mailcow-Setup mit Docker: Voraussetzungen, Installation, erste Domain und Mailbox, integriertes Let’s-Encrypt-TLS sowie alle DNS-Records inklusive PTR/rDNS, MX, SPF, DKIM und DMARC für eine saubere Zustellbarkeit.

Geprüft am 29.09.2026

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Mehr dazu

Rack-Server mit blauen Statuslampen und Netzwerkkabeln neben einem Stapel weißer Briefumschläge als Symbol für einen eigenen Mailserver

Mit Mailcow: dockerized betreiben Sie einen vollständigen, eigenen Mailserver auf einem Linux-Server oder VPS – inklusive Postfix, Dovecot, Rspamd-Spamfilter, SOGo-Webmail, automatischem DKIM und integriertem Let’s-Encrypt-TLS. Diese Anleitung richtet sich an Admins im Mittelstand und zeigt den kompletten Weg: Voraussetzungen prüfen, Mailcow per Docker Compose installieren, im Admin-UI die erste Domain und Mailbox anlegen und alle nötigen DNS-Records setzen. Der Schwerpunkt liegt auf einem produktionsreifen Setup mit sauberer Zustellbarkeit – besonders der oft vergessene PTR/rDNS-Eintrag entscheidet darüber, ob Ihre Mails bei Gmail und Outlook ankommen oder im Spam landen. Es geht hier um den ganzen Mailserver, nicht nur um einzelne DKIM-Signaturen oder eine Microsoft-365-Variante.

Voraussetzungen

Bevor Sie starten, müssen Hardware, Plattform, Netzwerk und DNS stimmen. Wenn hier etwas fehlt, scheitert später entweder die Installation oder die Zustellbarkeit.

  1. Server: mindestens 6 GiB RAM plus 1 GiB Swap (Standard-Konfiguration); für 5–10 Nutzer sind 8 GiB empfehlenswert. CPU ab 1 GHz, mindestens 20 GiB Plattenplatz ohne Mails, Architektur x86_64 oder ARM64.
  2. Plattform: Bare-Metal oder volle Virtualisierung (KVM, ESXi, Hyper-V). Nicht unterstützt sind OpenVZ, Virtuozzo, LXC sowie NAS-Geräte wie Synology oder QNAP.
  3. Betriebssystem: Debian 11–13, Ubuntu 22.04 oder neuer, AlmaLinux 8/9, Rocky Linux 9. Diese Anleitung nutzt Debian 12 bzw. Ubuntu 24.04 LTS.
  4. FQDN: ein vollständiger Hostname als Mail-Host, zum Beispiel mail.example.org.
  5. Ports (eingehend, TCP): Kern für dieses Setup sind 25, 465, 587, 993 und 443. Mailcow nutzt zusätzlich 143, 110, 995, 4190 und 80. Port 80 wird für die Let’s-Encrypt-Validierung gebraucht.
  6. Port 25 ausgehend: muss beim Provider freigeschaltet sein – viele VPS- und Cloud-Anbieter blocken ihn standardmäßig.
  7. PTR/rDNS: der Reverse-DNS-Eintrag der Server-IP muss dem Mail-FQDN entsprechen. Das setzen Sie beim IP- bzw. Hosting-Provider, nicht in Ihrer eigenen Zone.
  8. Zeit: NTP-synchronisierte Systemzeit ist Pflicht, sonst scheitern TOTP-2FA und Zertifikatsprüfungen.

Schritt 1: Pakete und Docker installieren

Melden Sie sich als root an (oder nutzen Sie sudo). Installieren Sie zuerst die Pflichtpakete und danach Docker mit dem offiziellen Convenience-Skript. Wichtig: Seit September 2025 ist jq eine Pflichtabhängigkeit – ältere Anleitungen ohne jq führen zu Fehlern in den Mailcow-Skripten.

apt update && apt install -y git openssl curl gawk coreutils grep jq
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker

Prüfen Sie anschließend, ob Docker Engine und das Compose-Plugin (v2) in passender Version vorliegen. Mailcow benötigt Docker Engine ab 24.0.0 und Compose ab 2.0.

docker --version          # Engine >= 24.0.0
docker compose version    # Compose v2, >= 2.0

Verifizieren: docker --version meldet 24.0.0 oder neuer, docker compose version eine Version ab 2.0, und jq --version gibt eine Versionsnummer statt „command not found“ aus.

Schritt 2: Mailcow klonen und konfigurieren

Mailcow wird nach /opt/mailcow-dockerized installiert. Setzen Sie unbedingt vorher umask 0022 – sonst erhalten die Dateien falsche Rechte, was später zu Container-Fehlern führen kann. Das Skript generate_config.sh fragt Ihren FQDN (Fully Qualified Domain Name, der vollständige Hostname) und die Zeitzone ab und erzeugt daraus die mailcow.conf.

su
umask 0022
cd /opt
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh        # FQDN (z. B. mail.example.org) und Zeitzone eingeben
nano mailcow.conf           # Werte pruefen

In der mailcow.conf kontrollieren Sie vor allem diese Werte. Lassen Sie die HTTP-/HTTPS-Ports auf 80/443 stehen, sonst bricht die Let’s-Encrypt-Validierung.

MAILCOW_HOSTNAME=mail.example.org
HTTP_PORT=80
HTTPS_PORT=443
SKIP_LETS_ENCRYPT=n

Verifizieren: grep -E '^(MAILCOW_HOSTNAME|HTTP_PORT|HTTPS_PORT|SKIP_LETS_ENCRYPT)=' mailcow.conf zeigt Ihren Mail-FQDN, die Ports 80 und 443 sowie SKIP_LETS_ENCRYPT=n.

Hinweise zu Let’s Encrypt und TLS

Das TLS-Zertifikat erledigt Mailcow automatisch über den acme-mailcow-Container: Let’s-Encrypt-Zertifikate sind 90 Tage gültig und werden selbsttätig erneuert. Abschalten können Sie das mit SKIP_LETS_ENCRYPT=y. Die Optionen SKIP_IP_CHECK=y und SKIP_HTTP_VERIFICATION=y sind nur Notlösungen für Sonderfälle wie NAT-Reflection – eine Fehlkonfiguration kann hier schnell ins Let’s-Encrypt-Ratelimit laufen.

Schritt 3: Stack ziehen und starten

Jetzt laden Sie die Container-Images und starten den kompletten Stack im Hintergrund. Der erste Start dauert je nach Verbindung einige Minuten.

docker compose pull
docker compose up -d

Den Status und die Logs prüfen Sie so. Warten Sie, bis alle Container laufen, bevor Sie das UI öffnen.

docker compose ps
docker compose logs -f

Verifizieren: docker compose ps listet alle Mailcow-Container (unter anderem postfix-mailcow, dovecot-mailcow, nginx-mailcow, acme-mailcow) mit dem Status „Up“ bzw. „running“, kein Container hängt in „Restarting“. In docker compose logs acme-mailcow steht nach einigen Minuten, dass das Zertifikat erfolgreich bezogen wurde.

Schritt 4: Admin-UI öffnen und Passwort ändern

Rufen Sie im Browser https://mail.example.org/admin auf. Der Standardlogin lautet Benutzer admin mit Passwort moohoo. Ändern Sie dieses Passwort sofort nach dem ersten Login – das Default-Passwort ist ein erhebliches Sicherheitsrisiko.

  1. Anmelden mit admin / moohoo.
  2. Unter System > Configuration > Access > Administrators ein starkes neues Passwort vergeben.
  3. Optional 2FA (TOTP, zeitbasierte Einmalcodes) aktivieren. Dafür muss die Systemzeit per NTP korrekt sein.

Verifizieren: Melden Sie sich ab und wieder an. Der Login mit moohoo schlägt fehl, der mit dem neuen Passwort funktioniert. Der Browser zeigt ein gültiges Let’s-Encrypt-Zertifikat für mail.example.org ohne Warnung.

Schritt 5: Erste Domain und Mailbox anlegen

Legen Sie zunächst die Maildomain und danach die erste Mailbox an. Beides passiert komplett im Admin-UI.

  1. Domain: E-Mail > Configuration > Domains > Add domain. Tragen Sie Ihre Domain ein (z. B. example.org), speichern und aktivieren Sie sie.
  2. Mailbox: E-Mail > Configuration > Mailboxes > Add mailbox. Vergeben Sie Name, Domain, Passwort und Quota (Speicherkontingent).

Sobald die Domain existiert, erzeugt Mailcow automatisch einen DKIM-Schlüssel mit dem Selector dkim und 2048 Bit Länge.

Verifizieren: Die Domain erscheint unter E-Mail > Configuration > Domains als aktiv, die Mailbox unter Mailboxes. Eine Anmeldung mit der neuen Adresse im Webmail (SOGo) unter https://mail.example.org/ gelingt.

Schritt 6: DKIM-Schlüssel auslesen

Den öffentlichen DKIM-Schlüssel (DomainKeys Identified Mail, eine kryptografische Signatur ausgehender Mails) brauchen Sie gleich für den DNS-Eintrag. Sie finden ihn im UI unter System > Configuration > Options > ARC/DKIM keys. Wählen Sie Ihre Domain aus und kopieren Sie den angezeigten TXT-Wert exakt – jeder Tippfehler oder unbeabsichtigte Zeilenumbruch bricht später die DKIM-Signaturprüfung.

System > Configuration > Options > ARC/DKIM keys
  -> Domain auswaehlen (Selector: dkim, 2048 Bit)
  -> TXT-Wert kopieren
  -> spaeter als TXT-Record dkim._domainkey.example.org setzen

Verifizieren: Der kopierte Wert beginnt mit v=DKIM1;, enthält k=rsa; und einen langen p=-Teil ohne Zeilenumbrüche oder Leerzeichen mitten im Schlüssel.

Schritt 7: DNS-Records beim Provider setzen

Jetzt tragen Sie die DNS-Records in der Zone Ihrer Domain ein. Diese Basis-Records sind für jede Maildomain Pflicht. Passen Sie IP, Domain und den DKIM-Wert an Ihre Umgebung an.

mail             IN A      1.2.3.4
@                IN MX 10  mail.example.org.
autodiscover     IN CNAME  mail.example.org.
autoconfig       IN CNAME  mail.example.org.
@                IN TXT    "v=spf1 mx a -all"
_dmarc           IN TXT    "v=DMARC1; p=reject; rua=mailto:mailauth-reports@example.org"
dkim._domainkey  IN TXT    "<Wert aus mailcow-UI>"

Was die einzelnen Records bedeuten:

RecordZweck
A maillöst den Mail-Hostnamen auf die Server-IP auf
MX @weist eingehende Mail dem Mail-Host zu (Priorität 10)
CNAME autodiscover / autoconfigautomatische Konto-Einrichtung in Outlook bzw. Thunderbird
SPF (TXT @)legt fest, welche Hosts für die Domain senden dürfen
DKIM (TXT dkim._domainkey)öffentlicher Schlüssel zur Signaturprüfung
DMARC (TXT _dmarc)Richtlinie für nicht authentifizierte Mail plus Reports

Optionale SRV-Records

Für eine reibungslose automatische Client-Konfiguration können Sie zusätzlich diese SRV-Records anlegen. Ziel ist jeweils Ihr Mail-Host.

_autodiscover._tcp  0 1 443  mail.example.org.
_submission._tcp    0 1 587  mail.example.org.
_imaps._tcp         0 1 993  mail.example.org.
_pop3s._tcp         0 1 995  mail.example.org.
_sieve._tcp         0 1 4190 mail.example.org.
_smtps._tcp         0 1 465  mail.example.org.

Verifizieren: Nach der TTL-Wartezeit liefert dig +short MX example.org den Wert 10 mail.example.org., dig +short TXT dkim._domainkey.example.org den DKIM-Wert und dig +short TXT _dmarc.example.org die DMARC-Richtlinie.

Schritt 8: PTR/rDNS setzen und prüfen

Der PTR-Eintrag (Reverse DNS) ist der häufigste Grund für Zustellprobleme. Er muss für IPv4 und IPv6 auf Ihren Mail-FQDN zeigen und wird beim IP- bzw. Hosting-Provider gesetzt, nicht in Ihrer eigenen DNS-Zone. Stimmt der PTR nicht mit dem FQDN überein, landen Mails bei Gmail oder Outlook im Spam oder werden ganz abgelehnt.

dig -x 1.2.3.4 +short        # muss mail.example.org. zurueckgeben

Zur Gesamtkontrolle bietet Mailcow eine eingebaute DNS-Diagnose: Unter E-Mail > Configuration > Domains öffnet die Schaltfläche DNS neben der Domain eine Übersicht, welche Records korrekt gesetzt sind und welche noch fehlen.

Verifizieren: dig -x 1.2.3.4 +short (und bei IPv6 dig -x <IPv6-Adresse> +short) liefert mail.example.org., und die DNS-Übersicht im Mailcow-UI zeigt für alle Pflicht-Records einen grünen Status.

Schritt 9: Updates und Backups

Mailcow lässt sich mit dem mitgelieferten Skript aktualisieren. Backups und Restores erledigt das Helper-Skript. Planen Sie beides von Anfang an ein.

cd /opt/mailcow-dockerized
./update.sh
./helper-scripts/backup_and_restore.sh backup all

Verifizieren: ./update.sh --check meldet, ob ein Update verfügbar ist. Das Backup-Skript fragt nach einem Zielordner und legt dort einen Ordner im Format mailcow_DATUM mit den gesicherten Komponenten an.

Typische Fehler

  1. Port 25 ausgehend gesperrt: Viele VPS-/Cloud-Provider blocken ausgehenden SMTP-Verkehr standardmäßig. Ohne Freischaltung per Ticket kann Mailcow keine Mail versenden.
  2. Fehlender oder falscher PTR: Reverse DNS muss dem Mail-FQDN entsprechen und wird beim IP-Provider gesetzt, nicht in der eigenen Zone.
  3. Nicht unterstützte Plattform: LXC, OpenVZ, Virtuozzo und NAS-Geräte (Synology/QNAP) funktionieren nicht. Nutzen Sie Bare-Metal oder volle Virtualisierung.
  4. Firewall greift nicht: ufw und firewalld wirken oft nicht wie erwartet, weil Docker eigene iptables-Regeln setzt. Filtern Sie über die DOCKER-USER-Chain.
  5. HTTP-/HTTPS-Ports geändert: Wer 80/443 verstellt, bricht die Let’s-Encrypt-Validierung. Port 80 muss von außen erreichbar sein.
  6. Falsche Systemzeit: Ohne NTP scheitern TOTP-2FA-Logins und Zertifikatsprüfungen.
  7. umask vergessen: Ohne umask 0022 vor dem Klonen entstehen falsche Dateirechte.
  8. Default-Passwort behalten: admin / moohoo sofort ändern.
  9. DKIM-Wert falsch kopiert: Den TXT-Wert exakt aus dem UI übernehmen, sonst bricht die Signaturprüfung.
  10. jq nicht installiert: Seit September 2025 Pflichtabhängigkeit.

Häufige Fragen

Wie viel RAM braucht Mailcow wirklich?

Mit der Standard-Konfiguration sind mindestens 6 GiB RAM plus 1 GiB Swap nötig. Für 5–10 Nutzer sollten Sie 8 GiB einplanen, dazu mindestens 20 GiB Plattenplatz für das System ohne die eigentlichen Mails.

Warum landen meine Mails trotz Mailcow im Spam?

In den meisten Fällen liegt es am Reverse DNS: Fehlt der PTR-Eintrag oder zeigt er nicht auf Ihren Mail-FQDN, stufen Gmail und Outlook Ihre Mails als verdächtig ein. Prüfen Sie zusätzlich, ob SPF, DKIM und DMARC sauber gesetzt sind und der ausgehende Port 25 freigeschaltet ist.

Muss ich die TLS-Zertifikate selbst verwalten?

Nein. Mailcow holt und erneuert Let’s-Encrypt-Zertifikate automatisch über den acme-mailcow-Container, solange Port 80 erreichbar ist und Sie die HTTP-/HTTPS-Ports nicht ändern.

Kann ich Mailcow auf einem Synology-NAS oder unter LXC betreiben?

Nein. NAS-Geräte sowie LXC, OpenVZ und Virtuozzo sind nicht unterstützt. Setzen Sie Mailcow nur auf Bare-Metal oder voller Virtualisierung (KVM, ESXi, Hyper-V) ein.

Wo finde ich den DKIM-Schlüssel zum Eintragen ins DNS?

Im Admin-UI unter System > Configuration > Options > ARC/DKIM keys. Wählen Sie die Domain, kopieren Sie den TXT-Wert (Selector dkim, 2048 Bit) und tragen Sie ihn als dkim._domainkey.example.org in Ihre Zone ein.

Wie aktualisiere ich Mailcow später sicher?

Legen Sie zuerst ein Backup an (backup_and_restore.sh backup all) und führen Sie danach ./update.sh im Mailcow-Verzeichnis aus. Das Skript aktualisiert den gesamten Stack.

Fazit

Mit Mailcow betreiben Sie in unter einer Stunde einen vollwertigen, eigenen Mailserver auf Docker-Basis. Die technische Installation ist dank generate_config.sh und Docker Compose unkompliziert – der eigentliche Erfolg entscheidet sich an der Konfiguration drumherum: korrekte Ports inklusive ausgehendem Port 25, ein passender PTR/rDNS-Eintrag beim Provider und vollständige DNS-Records mit MX, SPF, DKIM und DMARC. Wer diese Punkte sauber abarbeitet und das Default-Passwort sofort ändert, erhält einen zustellungsfähigen, DSGVO-freundlichen Mailserver in der eigenen Hand. Nutzen Sie die DNS-Diagnose im UI als Abschluss-Check, bevor Sie produktiv gehen.

Weiterführende Anleitungen und Quellen

  1. DNS-Records erklärt: A, AAAA, CNAME, MX und TXT – Grundlagen zu den Record-Typen, die Sie hier setzen.
  2. SPF, DKIM und DMARC für eine Domäne einrichten – vertieft die E-Mail-Authentifizierung.
  3. Let’s Encrypt und Certbot: TLS-Zertifikate ausstellen – Hintergrund zur Zertifikatslogik, die Mailcow automatisiert.
  4. Reverse DNS (PTR) und IPv6 für Mailserver korrekt einrichten: vertieft Schritt 8 inklusive IPv6.
  5. Weitere Anleitungen in der Kategorie E-Mail.

Quellen: offizielle Mailcow-Dokumentation – Install mailcow, Prepare your system, DNS setup und Advanced SSL / Let’s Encrypt.