OpenDKIM mit Postfix einrichten: DKIM-Signatur korrekt konfigurieren (Anleitung)
Schritt-für-Schritt-Anleitung, wie Sie OpenDKIM mit Postfix einrichten: RSA-Schlüssel erzeugen, Milter konfigurieren, DNS-TXT-Record veröffentlichen und die DKIM-Signatur testen.
Geprüft am 29.09.2026
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Mehr dazu

Seit 2024 verlangen Google und Yahoo von Absendern eine Authentifizierung per SPF oder DKIM, von Massenversendern SPF, DKIM und DMARC. Microsoft stellt seit Mai 2025 dieselben Anforderungen an Massenversender. Fehlt sie, landen E-Mails im Spam oder werden abgewiesen. Diese Anleitung zeigt, wie Sie OpenDKIM mit Postfix einrichten: Sie erzeugen einen RSA-2048-Schlüssel, binden OpenDKIM über das Milter-Protokoll an Postfix an, veröffentlichen den Public Key als DNS-TXT-Record und prüfen am Ende, ob Ihre 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.
Was ist OpenDKIM und warum brauchen Sie 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 Sie im DNS Ihrer Domain hinterlegen. Stimmt die Signatur, ist nachgewiesen, dass die Nachricht tatsächlich von Ihrer 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 riskieren Sie seit den verschärften Anforderungen der großen Mailprovider eine deutlich 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 Ihrer Domain.
Voraussetzungen
- Ein Linux-Server (Debian 12, Ubuntu 22.04/24.04 oder vergleichbar, x86-64 oder ARM64) mit root- bzw. sudo-Zugriff. OpenDKIM selbst braucht nur wenige Megabyte RAM. Die Größe des Servers richtet sich nach Postfix und den übrigen Maildiensten, für einen kleinen Mailserver z. B. 2 CPU-Kerne, 4 GB RAM und 40 GB Speicher.
- 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
Aktualisieren Sie zuerst die Paketquellen und installieren Sie 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üfen Sie nach der Installation kurz, ob der Dienst registriert ist:
systemctl status opendkimVerifizieren: systemctl status opendkim zeigt die Unit opendkim.service als loaded, und which opendkim-genkey liefert einen Pfad.
Schritt 2: OpenDKIM-Hauptkonfiguration anpassen
Die zentrale Konfigurationsdatei ist /etc/opendkim.conf. Öffnen Sie sie und passen Sie 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 können Sie einen Unix-Socket verwenden. Der TCP-Socket auf 127.0.0.1, Port 8891, ist einfacher, wenn Postfix in einer chroot-Umgebung läuft, und wird daher hier verwendet. Beachten Sie die unterschiedliche Schreibweise: OpenDKIM erwartet inet:8891@127.0.0.1, Postfix später inet:127.0.0.1:8891.
Verifizieren: grep -E '^(Mode|Socket|KeyTable|SigningTable)' /etc/opendkim.conf zeigt jede dieser Zeilen genau einmal. Eine zweite, ältere Socket-Zeile aus der Paketvorgabe müssen Sie auskommentieren.
Schritt 3: Verzeichnisstruktur und Tabellen anlegen
Legen Sie das Schlüsselverzeichnis und die drei Steuerdateien an. Ersetzen Sie example.com überall durch Ihre echte Domain.
sudo mkdir -p /etc/opendkim/keys/example.com
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R go-rwx /etc/opendkim/keysErstellen Sie die Datei /etc/opendkim/TrustedHosts mit den Hosts, deren Mails signiert werden dürfen:
127.0.0.1
localhost
::1
example.com
*.example.comDie Datei /etc/opendkim/KeyTable ordnet einen Selektor dem privaten Schlüssel zu (ein Eintrag pro Zeile). Der Selektor ist ein frei wählbarer Name, unter dem der passende öffentliche Schlüssel im DNS liegt:
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.privateDie Datei /etc/opendkim/SigningTable legt fest, welche Absenderadresse mit welchem Schlüssel signiert wird:
*@example.com mail._domainkey.example.comVerifizieren: ls -l /etc/opendkim listet KeyTable, SigningTable, TrustedHosts und das Verzeichnis keys.
Schritt 4: RSA-2048-Schlüssel mit opendkim-genkey erzeugen
Jetzt erzeugen Sie 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). Sehen Sie sich 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..." )Verifizieren: sudo ls -l /etc/opendkim/keys/example.com zeigt mail.private mit Besitzer opendkim und Rechten -rw------- sowie mail.txt.
Schritt 5: DKIM-DNS-TXT-Record veröffentlichen
Legen Sie bei Ihrem 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...Viele DNS-Oberflächen teilen lange TXT-Werte automatisch in 255-Zeichen-Blöcke auf. Achten Sie 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.
Verifizieren: dig +short TXT mail._domainkey.example.com liefert den Wert mit v=DKIM1 und dem vollständigen p=-Schlüssel.
Schritt 6: OpenDKIM mit Postfix als Milter verbinden
Damit Postfix jede Mail an OpenDKIM übergibt, tragen Sie den Milter-Socket in die /etc/postfix/main.cf ein. Verwenden Sie 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.
Verifizieren: postconf smtpd_milters non_smtpd_milters gibt für beide Parameter inet:127.0.0.1:8891 aus.
Schritt 7: Dienste neu starten und Berechtigungen prüfen
Starten Sie OpenDKIM und Postfix neu und aktivieren Sie den OpenDKIM-Dienst dauerhaft:
sudo systemctl enable opendkim
sudo systemctl restart opendkim
sudo systemctl restart postfixPrüfen Sie, ob OpenDKIM auf dem Port lauscht:
sudo ss -tlnp | grep 8891Verifizieren: Die Ausgabe zeigt 127.0.0.1:8891 mit dem Prozess opendkim, und systemctl is-active opendkim postfix meldet zweimal active.
Schritt 8: DKIM-Signatur testen und verifizieren
Prüfen Sie 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. Der Zusatz key not secure bedeutet nur, dass Ihre Zone nicht per DNSSEC signiert ist, und ist kein Fehler. Senden Sie anschließend eine echte Testmail an eine externe Adresse, zum Beispiel an einen Gmail-Account, und prüfen Sie die Header der empfangenen Nachricht. Der Befehl mail stammt unter Debian und Ubuntu aus dem Paket mailutils.
echo "DKIM Test" | mail -s "DKIM Testmail" ihre-testadresse@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.
Verifizieren: Im Header der empfangenen Testmail stehen ein DKIM-Signature-Feld mit d=example.com und s=mail sowie in Authentication-Results der Eintrag dkim=pass.
Updates und Wartung
OpenDKIM wird über den normalen Paketmanager aktualisiert. Halten Sie den Dienst aktuell, da Sicherheitsupdates für Mail-Komponenten wichtig sind:
sudo apt update && sudo apt install --only-upgrade opendkim opendkim-tools postfixRotieren Sie Ihre DKIM-Schlüssel idealerweise jährlich: Erzeugen Sie einen neuen Selektor (z. B. mail2026), veröffentlichen Sie dessen Public Key im DNS, stellen Sie KeyTable/SigningTable um und entfernen Sie den alten Record erst, nachdem keine Mails mehr mit dem alten Selektor unterwegs sind.
Backup-Hinweis
Sichern Sie unbedingt das gesamte Verzeichnis /etc/opendkim/ inklusive der privaten Schlüssel sowie Ihre Postfix-Konfiguration. Geht mail.private verloren, müssen Sie 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üfen Sie, ob der Absender unter SigningTable und TrustedHosts fällt und ob der Milter-Socket in
main.cfexakt dem Socket inopendkim.confentspricht. - opendkim-testkey meldet einen Fehler oder Mismatch: Der Hinweis „key not secure“ allein ist harmlos (keine DNSSEC-Signatur). Andere Fehler bedeuten meist: 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 Sie nutzen 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 Ihre 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 beginnen Sie mit RSA 2048 und veröffentlichen Ed25519 optional zusätzlich.
Warum landen meine Mails trotz DKIM im Spam?
DKIM ist nur ein Faktor. Prüfen Sie zusätzlich SPF, DMARC, einen sauberen PTR-Record (Reverse DNS, siehe Reverse DNS (PTR) und IPv6 für Mailserver korrekt einrichten), die IP-Reputation Ihres Servers und ob Ihre 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. Legen Sie für jede Domain ein eigenes Schlüsselverzeichnis und einen eigenen Selektor an, ergänzen Sie KeyTable und SigningTable um zusätzliche Zeilen und veröffentlichen Sie je Domain einen eigenen DNS-Record.
Fazit
Mit diesen Schritten haben Sie OpenDKIM mit Postfix eingerichtet: 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. Zusammen mit SPF und DMARC erfüllen Sie damit die Anforderungen von Google, Yahoo und Microsoft. Planen Sie die regelmäßige Schlüsselrotation und ein zuverlässiges Backup Ihrer privaten Schlüssel fest in Ihren Wartungszyklus ein.
Weiterführende Artikel und Quellen
Einen kompletten Mailserver ohne Docker beschreibt die Anleitung Kompletten Mailserver nativ aufsetzen: Postfix, Dovecot und Rspamd ohne Docker. Wie Sie nach DKIM die DMARC-Policy schrittweise verschärfen, zeigt DMARC-Reports verstehen und auswerten. Wenn Sie weitere Dienste selbst hosten, lohnt sich auch ein Blick auf die Grundlagen von Docker Compose für Selfhosting unter Linux. Alle weiteren Beiträge rund um Mailserver finden Sie in unserer Kategorie E-Mail.
Quellen: OpenDKIM Documentation, Postfix Milter README, RFC 6376 (DomainKeys Identified Mail).


