OpenDKIM mit Postfix einrichten: DKIM-Signatur korrekt konfigurieren (Anleitung)
Schritt-für-Schritt-Anleitung, wie du OpenDKIM mit Postfix einrichtest: RSA-Schlüssel erzeugen, Milter konfigurieren, DNS-TXT-Record veröffentlichen und die DKIM-Signatur testen.

Seit 2024 verlangen Google, Yahoo und Microsoft von Absendern eine gültige DKIM-Signatur, sonst landen E-Mails im Spam oder werden abgewiesen. In dieser Anleitung zeigen wir dir, wie du OpenDKIM mit Postfix einrichten kannst: Du generierst einen RSA-2048-Schlüssel, bindest OpenDKIM über das Milter-Protokoll an Postfix an, veröffentlichst den Public Key als DNS-TXT-Record und überprüfst am Ende, ob deine ausgehenden Mails korrekt signiert werden. Die Anleitung richtet sich an Admins und Selfhoster, die ihren eigenen Mailserver betreiben und die Zustellrate sowie die Mail-Authentifizierung verbessern wollen.
Kurzfassung: Pakete opendkim und opendkim-tools installieren, RSA-Schlüssel mit opendkim-genkey erzeugen, Mode sv setzen, Milter-Socket in main.cf eintragen, Public Key als TXT-Record im DNS publizieren und mit einer Testmail an einen externen Provider verifizieren.
Was ist OpenDKIM und warum brauchst du es?
DKIM (DomainKeys Identified Mail) ist ein Verfahren zur Mail-Authentifizierung DKIM, bei dem ausgehende E-Mails mit einer kryptografischen Signatur versehen werden. Der empfangende Server prüft diese Signatur gegen einen öffentlichen Schlüssel, den du im DNS deiner Domain hinterlegst. Stimmt die Signatur, ist nachgewiesen, dass die Nachricht tatsächlich von deiner Domain stammt und unterwegs nicht verändert wurde.
OpenDKIM ist die verbreitetste Open-Source-Implementierung dieses Verfahrens. Sie läuft als eigenständiger Dienst und wird über das OpenDKIM Milter-Protokoll (Mail Filter) an Postfix angebunden. Postfix übergibt jede ein- und ausgehende Nachricht an den Milter, der dann signiert (ausgehend) oder verifiziert (eingehend). Ohne gültiges DKIM signing Postfix-Setup riskierst du seit den verschärften Anforderungen der großen Mailprovider eine drastisch schlechtere Zustellrate.
DKIM ergänzt SPF und DMARC: SPF prüft, ob ein Server senden darf, DKIM sichert die Integrität der Nachricht, und DMARC kombiniert beide und legt eine Policy fest. Erst zusammen ergeben sie einen vollständigen Schutz gegen Spoofing deiner Domain.
Voraussetzungen
- Ein Linux-Server (Debian 12, Ubuntu 22.04/24.04 oder vergleichbar) mit root- bzw. sudo-Zugriff.
- Ein funktionierender Postfix als MTA, der bereits Mails versendet.
- Eine eigene Domain mit Zugriff auf die DNS-Verwaltung (zum Anlegen eines TXT-Records).
- Ein korrekt gesetzter FQDN/Hostname des Servers.
- Grundkenntnisse in der Shell und im Editieren von Konfigurationsdateien.
Schritt 1: OpenDKIM und Tools installieren
Aktualisiere zuerst die Paketquellen und installiere die beiden benötigten Pakete. opendkim liefert den Dienst, opendkim-tools enthält unter anderem opendkim-genkey zum Erzeugen der Schlüssel.
sudo apt update
sudo apt install -y opendkim opendkim-toolsPrüfe nach der Installation kurz, ob der Dienst registriert ist:
systemctl status opendkimSchritt 2: OpenDKIM-Hauptkonfiguration anpassen
Die zentrale Konfigurationsdatei ist /etc/opendkim.conf. Öffne sie und passe die wichtigsten Parameter an. Der Mode sv bedeutet Signing und Verification: ausgehende Mails werden signiert, eingehende verifiziert.
Syslog yes
UMask 007
Mode sv
Canonicalization relaxed/simple
SubDomains no
# Tabellen fuer Schluessel und vertrauenswuerdige Hosts
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
# Socket fuer die Postfix-Anbindung
Socket inet:8891@127.0.0.1
# Lauf-Benutzer
UserID opendkim
PidFile /run/opendkim/opendkim.pidAlternativ zum TCP-Socket kannst du einen Unix-Socket unter /run/opendkim/opendkim.sock verwenden. Der TCP-Socket inet:127.0.0.1:8891 ist robuster, wenn Postfix in einer chroot-Umgebung läuft, und wird daher hier verwendet.
Schritt 3: Verzeichnisstruktur und Tabellen anlegen
Lege das Schlusselverzeichnis und die drei Steuerdateien an. Ersetze example.com überall durch deine echte Domain.
sudo mkdir -p /etc/opendkim/keys/example.com
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R go-rwx /etc/opendkim/keysErstelle die TrustedHosts mit den Hosts, deren Mails signiert werden dürfen:
127.0.0.1
localhost
::1
example.com
*.example.comDie KeyTable ordnet einen Selektor dem privaten Schlüssel zu (ein Eintrag pro Zeile):
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.privateDie SigningTable legt fest, welche Absenderadresse mit welchem Schlussel signiert wird:
*@example.com mail._domainkey.example.comSchritt 4: RSA-2048-Schlüssel mit opendkim-genkey erzeugen
Jetzt erzeugst du das Schlüsselpaar. Der Selektor mail muss mit dem Namen in KeyTable/SigningTable übereinstimmen. -b 2048 legt die Schlüssellänge auf RSA 2048 Bit fest.
cd /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s mail
sudo chown opendkim:opendkim mail.private
sudo chmod 600 mail.privateEs entstehen zwei Dateien: mail.private (privater Schlüssel, bleibt geheim auf dem Server) und mail.txt (enthält den Public Key für den DNS-Eintrag). Schau dir den öffentlichen Teil an:
sudo cat mail.txtDie Ausgabe sieht ungefähr so aus:
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )Schritt 5: DKIM-DNS-TXT-Record veröffentlichen
Lege bei deinem DNS-Provider einen neuen TXT-Record an. Der DKIM DNS TXT Record hat den Namen mail._domainkey (also Selektor + ._domainkey) und als Wert den Inhalt der Klammern aus mail.txt ohne die Anführungszeichen und ohne Zeilenumbrüche zu einem einzigen String zusammengefügt:
Name: mail._domainkey.example.com
Typ: TXT
Wert: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...Beachte, dass viele DNS-Oberflächen lange TXT-Werte automatisch in 255-Zeichen-Blöcke aufteilen. Achte darauf, dass kein Leerzeichen mitten in den Base64-String gerutscht ist. Nach dem Speichern dauert die DNS-Propagation je nach TTL einige Minuten bis Stunden.
Schritt 6: OpenDKIM mit Postfix als Milter verbinden
Damit Postfix jede Mail an OpenDKIM übergibt, trägst du den Milter-Socket in die /etc/postfix/main.cf ein. Verwende postconf, das vermeidet Tippfehler:
sudo postconf -e "milter_protocol = 6"
sudo postconf -e "milter_default_action = accept"
sudo postconf -e "smtpd_milters = inet:127.0.0.1:8891"
sudo postconf -e "non_smtpd_milters = inet:127.0.0.1:8891"smtpd_milters gilt für per SMTP eingelieferte Mails, non_smtpd_milters für lokal (z. B. via sendmail) erzeugte Mails. milter_default_action = accept sorgt dafür, dass Mails auch dann zugestellt werden, wenn OpenDKIM einmal nicht erreichbar ist, statt sie zu blockieren.
Schritt 7: Dienste neu starten und Berechtigungen prüfen
Starte OpenDKIM und Postfix neu und aktiviere den OpenDKIM-Dienst dauerhaft:
sudo systemctl enable opendkim
sudo systemctl restart opendkim
sudo systemctl restart postfixPrüfe, ob OpenDKIM auf dem Port lauscht:
sudo ss -tlnp | grep 8891Schritt 8: DKIM-Signatur testen und verifizieren
Prüfe zuerst lokal mit opendkim-testkey, ob der private Schlüssel zum veröffentlichten DNS-Record passt:
sudo opendkim-testkey -d example.com -s mail -vvvDie erfolgreiche Ausgabe enthält key OK. Sende anschließend eine echte Testmail an eine externe Adresse, zum Beispiel an einen Gmail-Account, und prüfe die Header der empfangenen Nachricht. Du solltest einen Header DKIM-Signature sowie in den Authentifizierungsergebnissen dkim=pass sehen.
echo "DKIM Test" | mail -s "DKIM Testmail" dein-test@gmail.com
sudo tail -f /var/log/mail.logIm Mail-Log erscheint bei korrektem Setup eine Zeile von opendkim mit DKIM-Signature field added. Ein zusätzlicher Online-Check über einen DKIM-Validator bestätigt, dass die Signatur öffentlich überprüft werden kann.
Updates und Wartung
OpenDKIM wird über den normalen Paketmanager aktualisiert. Halte den Dienst aktuell, da Sicherheitsupdates für Mail-Komponenten wichtig sind:
sudo apt update && sudo apt upgrade opendkim opendkim-tools postfixRotiere deine DKIM-Schlüssel idealerweise jährlich: Erzeuge einen neuen Selektor (z. B. mail2026), veröffentliche dessen Public Key im DNS, stelle die KeyTable/SigningTable um und entferne den alten Record erst, nachdem keine Mails mehr mit dem alten Selektor unterwegs sind.
Backup-Hinweis
Sichere unbedingt das gesamte Verzeichnis /etc/opendkim/ inklusive der privaten Schlüssel sowie deine Postfix-Konfiguration. Geht mail.private verloren, musst du einen neuen Schlüssel erzeugen und den DNS-Record anpassen, was eine Zustelllücke verursachen kann.
sudo tar czf /root/opendkim-backup-$(date +%F).tar.gz /etc/opendkim /etc/postfix/main.cfTroubleshooting
- Keine DKIM-Signature im Header: Prüfe, ob der Absender unter SigningTable und TrustedHosts fällt und ob der Milter-Socket in
main.cfexakt dem Socket inopendkim.confentspricht. - opendkim-testkey meldet "key not secure" oder Mismatch: Der DNS-Record ist noch nicht propagiert oder enthält Leerzeichen/Zeilenumbrüche im Base64-String. Mit
dig TXT mail._domainkey.example.comden veröffentlichten Wert kontrollieren. - Postfix verzögert die Zustellung: Steht
milter_default_actionauftempfailoderrejectund OpenDKIM ist nicht erreichbar, stauen sich Mails. Aufacceptsetzen. - Permission denied auf den Socket: Wenn Postfix in chroot läuft, ist ein Unix-Socket im Postfix-Spool nötig oder du nutzt den TCP-Socket
inet:127.0.0.1:8891. - dkim=fail trotz gültiger Signatur: Oft Folge von Mailinglisten oder Footer-Injektoren, die den Body nachträglich ändern.
Canonicalization relaxed/relaxedist toleranter alsrelaxed/simple.
Häufige Fragen
Brauche ich neben DKIM auch SPF und DMARC?
Ja. DKIM allein reicht den großen Providern in der Regel nicht. Erst die Kombination aus SPF, DKIM und einer DMARC-Policy stellt sicher, dass deine Domain als vertrauenswürdig gilt und nicht für Spoofing missbraucht werden kann.
Welcher Selektor-Name ist sinnvoll?
Der Selektor ist frei wählbar (z. B. mail, default oder ein datumsbasierter Name wie 2026). Er erscheint im DNS-Record als selektor._domainkey. Datums- oder jahresbasierte Selektoren erleichtern später die Schlüsselrotation.
RSA 2048 oder Ed25519 für den DKIM-Schlüssel?
RSA 2048 Bit ist der robuste Standard, der von allen Empfängern unterstützt wird. Ed25519 ist kompakter und moderner, wird aber noch nicht überall verstanden. Für maximale Kompatibilität beginnst du mit RSA 2048 und veröffentlichst Ed25519 optional zusätzlich.
Warum landen meine Mails trotz DKIM im Spam?
DKIM ist nur ein Faktor. Prüfe zusätzlich SPF, DMARC, einen sauberen PTR-Record (Reverse DNS), die IP-Reputation deines Servers und ob deine IP auf Blacklists steht. Auch fehlende Inhalte oder schlechte Reputation der sendenden IP führen zur Einstufung als Spam.
Funktioniert OpenDKIM auch mit mehreren Domains?
Ja. Lege für jede Domain ein eigenes Schlüsselverzeichnis und einen eigenen Selektor an, ergänze KeyTable und SigningTable um zusätzliche Zeilen und veröffentliche je Domain einen eigenen DNS-Record.
Fazit
Mit diesen Schritten hast du erfolgreich OpenDKIM mit Postfix einrichten können: Der RSA-2048-Schlüssel ist erzeugt, der Milter über smtpd_milters angebunden, der Public Key im DNS veröffentlicht und die Signatur per Testmail verifiziert. Damit erfüllst du die seit 2024 verbindlichen Anforderungen von Google, Yahoo und Microsoft und verbesserst deine Zustellrate spürbar. Plane die regelmäßige Schlüsselrotation und ein zuverlässiges Backup deiner privaten Schlüssel fest in deinen Wartungszyklus ein.
Weiterführende Artikel und Quellen
Wenn du deinen eigenen Mailserver selbst hostest, lohnt sich auch ein Blick auf die Grundlagen von Docker Compose für Selfhosting unter Linux, mit denen du weitere Dienste sauber betreibst. Alle weiteren Beiträge rund um Mailserver findest du in unserer Kategorie E-Mail.
Quellen: OpenDKIM Documentation, Postfix Milter README, RFC 6376 (DomainKeys Identified Mail).