DKIM ist ein Verfahren zur E‑Mail‑Authentifizierung. Damit kann der Empfänger prüfen, ob eine E‑Mail wirklich von der angegebenen Domain stammt und unterwegs nicht verändert wurde. Wie funktioniert DKIM und wie richtet man es für ein E-Mail Domain auf einem Server mit ISPConfig ein?
DKIM ist ein Identifikationsprotokoll zur Sicherstellung der Authentizität von E-Mail-Absendern. Es wurde konzipiert, um bei der Eindämmung unerwünschter E-Mails wie Spam oder Phishing zu helfen.
- DKIM fügt jeder ausgehenden Mail eine digitale Signatur im E‑Mail‑Header hinzu, die vom sendenden Mailserver mit einem privaten Schlüssel erzeugt wird.
- Der empfangende Mailserver holt den dazugehörigen öffentlichen Schlüssel aus dem DNS‑TXT‑Eintrag der Absenderdomain und vergleicht die Signatur; passt sie, gilt die Nachricht als authentisch und unverändert.
sequenceDiagram
participant Absender as Absender-Mailserver
participant DNS as DNS (Domain des Absenders)
participant Empfaenger as Empfänger-Mailserver
rect rgb(245, 245, 245)
Note over Absender: 1. E-Mail wird erstellt
Absender->>Absender: Header + Body auswählen (z.B. From, Subject, Body-Hash)
Absender->>Absender: Hash über gewählte Header + Body berechnen
Absender->>Absender: Hash mit privatem Schlüssel signieren
Absender->>Absender: DKIM-Signature-Header zur Mail hinzufügen (enthält Selector, Domain, Signatur)
Absender->>Empfaenger: E-Mail inkl. DKIM-Signature-Header senden
end
rect rgb(245, 245, 245)
Note over Empfaenger: 2. Signatur prüfen
Empfaenger->>Empfaenger: DKIM-Signature-Header aus Mail lesen (Domain 'd=' und Selector 's=' extrahieren)
Empfaenger->>DNS: DNS-Abfrage nach selector._domainkey.domain.tld (TXT-Record)
DNS-->>Empfaenger: Öffentlicher Schlüssel (Public Key)
Empfaenger->>Empfaenger: Hash über empfangene Header + Body nach gleicher Methode berechnen
Empfaenger->>Empfaenger: Signatur mit öffentlichem Schlüssel entschlüsseln
Empfaenger->>Empfaenger: Beide Hashes vergleichen
end
alt Hashes stimmen überein
Empfaenger->>Empfaenger: DKIM = PASS (Mail ist unverändert und authentisch)
else Hashes stimmen nicht überein
Empfaenger->>Empfaenger: DKIM = FAIL (Mail wurde verändert oder Signatur ungültig)
end
Wie aktiviert man #DKIM für eine Domain mit ISPConfig
Der DKIM-Eintrag für eine Domain kann in #ISPConfig "E-Mail" ⟶ "E-Mail-Domain" für jede Domain erstellt werden:
- DKIM aktivieren
- DKIM Selektor bleibt "default" (oder wird anders benannt und dann beim DNS-Eintrag entsprechend eingetragen)
- privater Schlüssel: bleibt wo er ist (auf dem ISPConfig Server)
- DNS-Eintrag: wird zu den DNS-Regeln kopiert und das Fenster gespeichert.
- der generierte DNS-EIntrag kann bei der Domainverwaltung vom ISP (z.B. #Netcup https://ccp.netcup.de/domains.php für eine Domain als DNS Record gespeichert werden. Es ist folgendes einzutragen:
| Host | Type | Destination |
|---|---|---|
<selektor>._domainkey |
TXT |
v=DKIM1; t=s; p=....` |
Die Erstellung der public/private keys sowie des TXT-Eintrags für den Nameserver kann man erstellen mit
- ISPConfig (Vorteil: der private Key wird automatisch hinterlegt, falls ISPConfig die NS verwaltet wird auch der DKIM-Eintrag automatisch vorgenommen, andernfalls muss dieser manuell im NS eingetragen werden)
- Mit Online-Tools wie dem dkim-record-generator
- Keys kann man natürlich auch mit PUTTYGen (Windows) oder ssh-keygen (Linux) generieren und dann manuell kopieren
Überprüfung der DKIM Konfiguration im Nameserver
Wie prüft man die Gültigkeit der DKIM Signatur bei eingehenden E-Mails im Mail-Client
Jeder Mailserver, der DKIM prüft (Gmail, Outlook, Postfix mit opendkim/rspamd etc.), schreibt das Ergebnis in den Authentication-Results-Header der zugestellten Mail. Man kann also den Header der Original-Mail ansehen (z.B. "Original anzeigen" in Gmail, Kopfzeilen anzeigen oder .eml mit einem Texteditor öffnen):
Authentication-Results: mx.google.com; dkim=pass header.i=@deinedomain.de header.s=selector1 header.b=xxxxxxxx;
dkim=pass bzw. dkim=fail/dkim=neutral/dkim=none zeigt sofort das Ergebnis, inkl. genutztem Selector (header.s=) und Domain (header.i=).
Warum wird im Thunderbird DKIM-Verifier "keine Signatur" bei eigenen E-Mailadressen angezeigt?
Das "Gesendet"-Ordner-Problem (Der häufigste Grund) Wenn man Mails im Gesendet-Ordner (Sent) in Thunderbird anschaut, sieht man oft die Version der E-Mail, die Thunderbird lokal gespeichert hat, bevor sie an den Mailserver übertragen wurde. Die Ursache: In den meisten Setups fügt erst der Mailserver (z. B. Postfix, Exim oder der Server deines Hosters) die DKIM-Signatur beim Verlassen des Servers hinzu. Die Kopie in deinem Gesendet-Ordner hat diese Signatur daher schlichtweg noch nicht. Der Test: Schicke eine Test-Mail an eine externe Adresse (z. B. eine private Gmail- oder GMX-Adresse) oder an einen Dienst wie check-auth [at] verifier [dot] port25 [dot] com oder mail-tester.com. Wenn die Mail dort als korrekt signiert angezeigt wird, ist alles perfekt und es liegt nur an Thunderbirds lokaler Kopie.