DKIM für Mailcow einrichten

Schritt-für-Schritt-Anleitung: DKIM-Schlüsselpaar im Mailcow Admin-UI generieren (RSA 2048-Bit Default, Selektor dkim), den Public Key als TXT-Record im DNS anlegen und mit Test-Mail verifizieren.

Mailcow · Schritt für Schritt

DKIM für Mailcow (Self-Hosted Docker)

Mailcow generiert DKIM-Keys direkt in der Admin-UI — Configuration → Mail Setup → Domains → Edit-Symbol → DKIM keys. Der Default ist RSA mit 2048 Bit Schlüssellänge und Selektor dkim. Der Public Key wird im UI angezeigt und muss als TXT-Record unter dkim._domainkey.ihre-domain.de in Ihr DNS übernommen werden. Mailcow signiert dann alle ausgehenden Mails dieser Domain automatisch über den Postfix-Milter-Pfad an Rspamd.

Anders als bei Managed-Providern haben Sie volle Kontrolle über den Schlüssel: Sie können ihn jederzeit rotieren, exportieren oder durch einen längeren Key ersetzen. NIS2 Art. 21 Abs. 2 lit. h (Konzepte und Verfahren für den Einsatz von Kryptografie und Verschlüsselung) verlangt eine kryptografisch verifizierbare Sender-Authentifizierung — DKIM ist diese Maßnahme auf Header-Ebene und ergänzt SPF auf Envelope-Ebene. Der Wolf-Agents Email Security Check validiert den Selektor (Mailcow-Default: dkim), die Schlüssellänge (2048 Bit empfohlen, 1024 Bit veraltet), das DKIM-DMARC-Alignment (Header-From-Domain matched mit DKIM-d=-Domain) und meldet ungültige Public Keys nach falscher DNS-Übertragung.

Hardening-Pfad: Nach DKIM folgt DMARC für Mailcow — die Policy, die SPF- und DKIM-Ergebnisse für empfangende Server bindend macht. Bedrohungs-Cluster: Funktionierendes DKIM mit 2048-Bit-RSA-Key schließt die Voraussetzung für effektiven Schutz gegen Direct-Domain-Spoofing und insbesondere Echospoofing und SubdoMailing — Guardio Labs hat 2024 über 8.000 Marken-Subdomains aufgedeckt, deren DKIM-Schlüssel kompromittiert oder schwach waren.

1 Schritt 1 von 3

DKIM-Key im Mailcow Admin-UI erzeugen

Das Mailcow Admin-UI ist unter https://mail.ihre-domain.de/admin erreichbar. Nach Login mit dem Admin-Konto generieren Sie den DKIM-Schlüssel pro Domain in wenigen Klicks. Mailcow speichert den privaten Schlüssel verschlüsselt im crypt-vol-1-Docker-Volume — Backup dieses Volumes ist wichtig.

Pfad im Mailcow Admin-UI

  1. Login unter https://mail.ihre-domain.de/admin
  2. Navigieren Sie zu Configuration → Mail Setup → Domains
  3. Klicken Sie auf das Edit-Symbol neben Ihrer Domain
  4. Wechseln Sie zum Reiter DKIM keys
  5. Selektor: dkim (Default, kann angepasst werden — empfohlen: YYYYMM für Rotation, z.B. 202605)
  6. Key length: 2048 Bit (Default, BSI TR-02102-1-konform — 1024 Bit gilt als veraltet)
  7. Klick auf Add — Mailcow erzeugt sofort das Schlüsselpaar und zeigt den Public Key als v=DKIM1; k=rsa; ...; p=MIIBIjANBgkqhki...-String an
Ed25519 statt RSA? Issue #2972 noch offen (Information-Gain)

Mailcow unterstützt im Admin-UI ausschließlich RSA-Keys. Das Feature-Request Issue #2972 „Add support of ED25519-SHA256 for signing DKIM Keys“ existiert seit 2019 und ist Stand 2026-05-13 weiterhin offen. Ed25519 ist über manuelle Rspamd-Config (data/conf/rspamd/dkim/) und Postfix-Milter-Anpassungen möglich, aber komplexer in der Wartung und nicht von allen großen Empfängern unterstützt — Microsoft 365, Yahoo Mail und manche Banken akzeptieren Ed25519-DKIM bisher nicht zuverlässig. RSA 2048-Bit bleibt 2026 der praktische Standard für Mailcow.

2 Schritt 2 von 3

TXT-Record im DNS hinterlegen

Mailcow zeigt nach der Key-Generierung einen kopierbaren TXT-Record an. Übernehmen Sie diesen exakt in Ihre DNS-Zone — Host ist dkim._domainkey (oder Ihr gewählter Selektor), Typ ist TXT. Der Wert besteht aus dem v=DKIM1; k=rsa; ...; p=<Public-Key>-String, der typischerweise länger als 255 Zeichen ist und vom DNS-Provider automatisch in mehrere String-Segmente aufgeteilt wird.

DNS TXT-Record (Mailcow-generiert) DKIM-Public-Key
# Host:    dkim._domainkey
# Typ:     TXT
# Wert:    v=DKIM1; k=rsa; t=s; s=email; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...

# Im DNS-Panel:
dkim._domainkey.ihre-domain.de.  IN  TXT  ( "v=DKIM1; k=rsa; t=s; s=email; "
                                              "p=MIIBIjANBgkqhkiG9w0BAQEF..." )
String-Splitting bei langen DKIM-Records

Ein RSA-2048-Bit-Public-Key ist im Base64-encodierten DNS-Format länger als die 255-Byte-TXT-String-Grenze. Die meisten DNS-Provider (Cloudflare, Hetzner DNS, BIND) splitten automatisch korrekt. Manche älteren Provider erwarten einen einzelnen langen String — kontrollieren Sie nach dem Speichern mit dig TXT dkim._domainkey.ihre-domain.de +short, ob der Record als einzelner zusammenhängender String oder als konkateniertes Quoted-String-Paar zurückkommt.

3 Schritt 3 von 3

DKIM-Signierung verifizieren

Prüfen Sie den TXT-Record und senden Sie eine Test-Mail an ein externes Postfach. Mailcow signiert Mails automatisch sobald der Public Key im DNS auflösbar ist und das Mailcow-UI den Status „active“ zeigt. Im Header-Output sehen Sie DKIM-Signature: ... d=ihre-domain.de; s=dkim und beim Empfänger Authentication-Results: ... dkim=pass header.d=ihre-domain.de.

Terminal — Verifikation Verifikation
# TXT-Record prüfen (Linux/macOS)
dig TXT dkim._domainkey.ihre-domain.de +short
# Erwartet: "v=DKIM1; k=rsa; t=s; s=email; p=MIIBIjANBgkqhki..."

# Windows (PowerShell)
Resolve-DnsName -Name dkim._domainkey.ihre-domain.de -Type TXT |
  Select-Object -ExpandProperty Strings

# Test-Mail per Mailcow versenden, dann Header der zugestellten Mail prüfen
# Im Empfänger-Header steht:
# Authentication-Results: mx.google.com;
#       dkim=pass header.i=@ihre-domain.de header.s=dkim;
#       spf=pass smtp.mailfrom=...;
#       dmarc=pass header.from=ihre-domain.de

# Externe Verifikation (sendet eine Mail an check-auth@)
echo "Test" | mail -s "DKIM Test" check-auth@verifier.port25.com
# Antwort enthält detaillierten DKIM/SPF/DMARC-Report

# Mailcow-Logs auf DKIM-Signierungs-Erfolg prüfen
docker compose logs rspamd-mailcow | grep -i "dkim_signing"

Validieren Sie zusätzlich mit dem Wolf-Agents Email Security Check — er prüft den Selektor, die Schlüssellänge, das Header-Alignment für DMARC und meldet ungültige Records bei DNS-Übertragungsfehlern.

Häufige Fehler bei Mailcow

Diese drei Fehler treten bei der Mailcow-DKIM-Konfiguration besonders häufig auf — jeder einzelne kann dazu führen, dass DKIM-Signaturen ungültig sind oder Mailcow signiert, der Empfänger den Public Key aber nicht findet.

Public Key beim Kopieren in DNS abgeschnitten

Problem: Mailcow zeigt den Public Key im Admin-UI als langen Base64-String an. Beim Kopieren werden vom Browser oder Terminal Whitespaces, Zeilenumbrüche oder die abschließenden =-Padding-Zeichen abgeschnitten. Der DNS-Record sieht zwar gespeichert aus, aber bei der Empfänger-DKIM-Verifikation schlägt der RSA-Verify mit signature did not verify fehl — Mailcow signiert korrekt, aber der DNS-Public-Key passt nicht zum privaten Schlüssel.

Lösung: Nach dem DNS-Speichern den Record per dig TXT dkim._domainkey.ihre-domain.de +short abrufen und Zeichen-für-Zeichen mit dem Mailcow-UI-Wert vergleichen. Mailcow-UI hat einen Copy-Button, der den vollen String ohne Truncation kopiert — diesen statt manueller Auswahl verwenden.

Selektor in DNS abweichend vom Mailcow-Selektor

Problem: Im Mailcow-UI wurde der Selektor mail202605 für Rotation festgelegt, im DNS wurde aber dkim._domainkey als Hostname angelegt. Mailcow signiert mit s=mail202605, der Empfänger sucht nach mail202605._domainkey.ihre-domain.de und findet keinen Public Key — DKIM=none oder DKIM=temperror.

Lösung: Der DNS-Host muss exakt <selektor>._domainkey sein. Im Mailcow-UI ist der Selektor in der DKIM-keys-Tabelle direkt unter dem Public Key angegeben — diesen 1:1 als DNS-Host-Präfix verwenden.

DKIM-Key gelöscht ohne DNS-Cleanup nach Rotation

Problem: Bei Schlüssel-Rotation wird in Mailcow ein neuer Selektor (z.B. 202606) angelegt und der alte (202605) gelöscht. Der DNS-Record für 202605._domainkey bleibt aber bestehen — neue Mails werden mit 202606 signiert, aber Spam-Filter wie Rspamd warnen vor „verwaisten DKIM-Records“ und veraltete Reports referenzieren noch den alten Schlüssel.

Lösung: Bei jeder Rotation ein klares Protokoll führen: Tag 0 — neuen Key in Mailcow erstellen, neuen DNS-Record anlegen. Tag 7 — beide Keys laufen parallel (für in-flight Mails). Tag 14 — alten Key in Mailcow löschen UND alten DNS-Record löschen. Mit dig TXT _domainkey.ihre-domain.de (ohne Selektor) sehen Sie alle aktiven Selektoren.

NIS2, BSI TR-03108 und DSGVO Art. 32: DKIM bei Mailcow-Self-Hosting

DKIM ist eine kryptografische Sender-Authentifizierung — Mailcow signiert die Header-From-Domain mit einem privaten RSA-Schlüssel (verschlüsselt im crypt-vol-1-Docker-Volume), der Empfänger verifiziert mit dem Public Key aus dem DNS. NIS2 Art. 21 Abs. 2 lit. h (Konzepte und Verfahren für den Einsatz von Kryptografie und Verschlüsselung) macht diese Authentifizierung für wesentliche und wichtige Einrichtungen verbindlich. BSI TR-03108 nennt DKIM als Mindestanforderung für sicheren E-Mail-Transport; BSI TR-02102-1 definiert RSA 2048 Bit als Mindeststärke für Mail-Signaturen (Mailcow-Default). DSGVO Art. 32 verlangt Verschlüsselung als technische Maßnahme — die DKIM-Signatur über kryptografisch verifizierbare Header-Felder ist genau diese Maßnahme. Bei Self-Hosting liegt die Schlüssel-Management-Verantwortung vollständig bei Ihnen — Mailcow vereinfacht die Generierung, aber Backup des crypt-vol-1-Volumes und regelmäßige Rotation (empfohlen jährlich) bleiben Ihre Aufgabe. Wolf-Agents empfiehlt für Mailcow RSA 2048-Bit (oder 4096-Bit für Hochsicherheit), Selektor-Pattern YYYYMM für saubere Rotation. Der Wolf-Agents Email Security Check bewertet DKIM mit bis zu 22 Punkten der 165-Punkte-Analyse.

Wie steht Ihre Domain bei DKIM?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 165 Prüfpunkte.