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

Mailcow komplett aufsetzen – eigener Mailserver mit Docker

Diese Anleitung führt dich 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.

Realistisches Hero-Bild ohne Menschen und ohne Computer mit Briefkasten, Umschlägen, Schloss und Mailserver-Symbolik für einen Artikel über mailcow.

Mit Mailcow: dockerized betreibst du 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 dir 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 deine 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.

Kurzfassung: Server mit mindestens 6 GiB RAM und 1 GiB Swap, korrekter PTR/rDNS und offenem Port 25 (auch ausgehend) bereitstellen. Docker und die Pflichtpakete (inklusive jq) installieren, Mailcow nach /opt klonen, ./generate_config.sh ausführen, dann docker compose pull && docker compose up -d. Im Admin-UI (admin / moohoo, sofort ändern) Domain und Mailbox anlegen, den DKIM-Wert kopieren und A-, MX-, SPF-, DKIM-, DMARC- und PTR-Records setzen. Mit der DNS-Diagnose im UI gegenprüfen.

Voraussetzungen

Bevor du startest, 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 setzt du beim IP-/Hosting-Provider, nicht in deiner eigenen Zone.
  8. Zeit: NTP-synchronisierte Systemzeit ist Pflicht, sonst scheitern TOTP-2FA und Zertifikatsprüfungen.

Schritt 1: Pakete und Docker installieren

Melde dich als root an (oder nutze sudo). Installiere 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üfe 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

Schritt 2: Mailcow klonen und konfigurieren

Mailcow wird nach /opt/mailcow-dockerized installiert. Setze 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 deinen FQDN 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 kontrollierst du vor allem diese Werte. Lass 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

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 kannst du 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 lädst du die Container-Images und startest 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üfst du so. Warte, bis alle Container laufen, bevor du das UI öffnest.

docker compose ps
docker compose logs -f

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

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

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

Schritt 5: Erste Domain und Mailbox anlegen

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

  1. Domain: Configuration > Mail Setup > Domains > Add domain. Trage deine Domain ein (z. B. example.org), speichere und aktiviere sie.
  2. Mailbox: Configuration > Mail Setup > Mailboxes > Add mailbox. Vergib Name, Domain, Passwort und Quota.

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

Schritt 6: DKIM-Schlüssel auslesen

Den öffentlichen DKIM-Schlüssel brauchst du gleich für den DNS-Eintrag. Du findest ihn im UI unter Configuration > ARC/DKIM keys. Wähle deine Domain aus und kopiere den angezeigten TXT-Wert exakt – jeder Tippfehler oder unbeabsichtigte Zeilenumbruch bricht später die DKIM-Signaturprüfung.

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

Schritt 7: DNS-Records beim Provider setzen

Jetzt trägst du die DNS-Records in der Zone deiner Domain ein. Diese Basis-Records sind für jede Maildomain Pflicht. Passe IP, Domain und den DKIM-Wert an deine 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 mail

löst den Mail-Hostnamen auf die Server-IP auf

MX @

weist eingehende Mail dem Mail-Host zu (Priorität 10)

CNAME autodiscover / autoconfig

automatische 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 kannst du zusätzlich diese SRV-Records anlegen. Ziel ist jeweils dein 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.

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 deinen Mail-FQDN zeigen und wird beim IP-/Hosting-Provider gesetzt – nicht in deiner 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: Configuration > Configuration & Details zeigt pro Domain an, welche Records korrekt gesetzt sind und welche noch fehlen.

Schritt 9: Updates und Backups

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

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

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. Nutze Bare-Metal oder volle Virtualisierung.
  4. Firewall greift nicht: ufw und firewalld wirken oft nicht wie erwartet, weil Docker eigene iptables-Regeln setzt. Filtere ü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 solltest du 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 deinen Mail-FQDN, stufen Gmail und Outlook deine Mails als verdächtig ein. Prüfe 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 du die HTTP-/HTTPS-Ports nicht änderst.

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

Nein. NAS-Geräte sowie LXC, OpenVZ und Virtuozzo sind nicht unterstützt. Setze 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 Configuration > ARC/DKIM keys. Wähle die Domain, kopiere den TXT-Wert (Selector dkim, 2048 Bit) und trage ihn als dkim._domainkey.example.org in deine Zone ein.

Wie aktualisiere ich Mailcow später sicher?

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

Fazit

Mit Mailcow betreibst du 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. Nutze die DNS-Diagnose im UI als Abschluss-Check, bevor du produktiv gehst.

Weiterführende Anleitungen und Quellen

  1. DNS-Records erklärt: A, AAAA, CNAME, MX und TXT – Grundlagen zu den Record-Typen, die du hier setzt.
  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. Weitere Anleitungen in der Kategorie E-Mail.

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