DKIM für Postfix einrichten

Schritt-für-Schritt-Anleitung: OpenDKIM installieren, DKIM-Schlüssel generieren, Postfix als Milter anbinden, DNS-Record veröffentlichen und DKIM verifizieren.

Postfix · Schritt für Schritt

DKIM für Postfix mit OpenDKIM

Postfix unterstützt DKIM nicht nativ — die kryptographische Signierung und Verifikation übernimmt OpenDKIM als Milter-Filter, der sich über die smtpd_milters-Direktive in Postfix integriert. OpenDKIM generiert RSA-2048-Schlüsselpaare, signiert jede ausgehende E-Mail mit dem privaten Schlüssel und veröffentlicht den öffentlichen Schlüssel als DNS-TXT-Record unter dem konfigurierten Selektor. Die Einrichtung umfasst fünf Schritte: Installation, Schlüsselgenerierung, Konfiguration der Tabellen, Anbindung an Postfix und DNS-Veröffentlichung. Dieser Guide behandelt jeden Schritt mit exakten Konfigurationsdateien und Befehlen.

BSI TR-03108 Abschnitt 4.3 fordert DKIM-Signierung für ausgehende E-Mails explizit. OpenDKIM auf Postfix erfüllt diese Anforderung über die Milter-Schnittstelle — der Wolf-Agents Email Security Check verifiziert, ob Schlüssel, Selektor und Signierung korrekt zusammenspielen, und bewertet Ihre Konfiguration auf 22 DKIM-Kriterien.

Hardening-Pfad: Nach DKIM folgt DMARC für Postfix — die Policy, die SPF- und DKIM-Ergebnisse für empfangende Server bindend macht.

1 Schritt 1 von 5

OpenDKIM installieren

OpenDKIM ist der De-facto-Standard für DKIM-Signierung unter Postfix und in allen großen Linux-Distributionen als Paket verfügbar. Installieren Sie OpenDKIM zusammen mit den Tools zur Schlüsselgenerierung über den Paketmanager Ihrer Distribution.

Terminal Installation
# Debian / Ubuntu
apt install opendkim opendkim-tools

# RHEL / CentOS / AlmaLinux
dnf install opendkim opendkim-tools

# Verzeichnisstruktur anlegen
mkdir -p /etc/opendkim/keys/ihre-domain.de
chown -R opendkim:opendkim /etc/opendkim
chmod 700 /etc/opendkim/keys
Warum ein eigenes Verzeichnis pro Domain?

Wenn Sie mehrere Domains über denselben Postfix-Server versenden, benötigt jede Domain ein eigenes Schlüsselpaar. Die Verzeichnisstruktur /etc/opendkim/keys/ihre-domain.de/ hält die Schlüssel sauber getrennt.

2 Schritt 2 von 5

Schlüssel generieren und OpenDKIM konfigurieren

Der Befehl opendkim-genkey erzeugt ein RSA-2048-Schlüsselpaar und eine DNS-Record-Vorlage — anschließend konfigurieren Sie opendkim.conf sowie die drei Tabellendateien. Der Selector ist frei wählbar — default ist gängig, für Rotation empfiehlt sich ein Datumsformat wie 202604.

Terminal Schlüsselgenerierung
# DKIM-Schlüsselpaar generieren (RSA 2048 Bit)
opendkim-genkey -b 2048 -d ihre-domain.de -s default -D /etc/opendkim/keys/ihre-domain.de/

# Berechtigungen setzen
chown opendkim:opendkim /etc/opendkim/keys/ihre-domain.de/default.private
chmod 600 /etc/opendkim/keys/ihre-domain.de/default.private

# Ergebnis: default.private (privater Schlüssel) + default.txt (DNS-Record-Vorlage)
/etc/opendkim.conf Hauptkonfiguration
AutoRestart             Yes
AutoRestartRate         10/1h
Syslog                  Yes
SyslogSuccess           Yes
LogWhy                  Yes

Mode                    sv
Canonicalization        relaxed/relaxed
OversignHeaders         From

KeyTable                refile:/etc/opendkim/key.table
SigningTable            refile:/etc/opendkim/signing.table
ExternalIgnoreList      /etc/opendkim/trusted.hosts
InternalHosts           /etc/opendkim/trusted.hosts

Socket                  inet:8891@localhost
PidFile                 /run/opendkim/opendkim.pid
UMask                   007
UserID                  opendkim
/etc/opendkim/key.table KeyTable
default._domainkey.ihre-domain.de ihre-domain.de:default:/etc/opendkim/keys/ihre-domain.de/default.private
/etc/opendkim/signing.table SigningTable
*@ihre-domain.de default._domainkey.ihre-domain.de
/etc/opendkim/trusted.hosts TrustedHosts
127.0.0.1
::1
localhost
ihre-domain.de
3 Schritt 3 von 5

Postfix anbinden

OpenDKIM wird über die Milter-Schnittstelle an Postfix angebunden — Postfix leitet jede ausgehende E-Mail durch den OpenDKIM-Filter, der die DKIM-Signatur hinzufügt. Tragen Sie die Milter-Konfiguration in die Postfix-Hauptkonfiguration ein und starten Sie beide Dienste.

/etc/postfix/main.cf Milter-Konfiguration
# OpenDKIM Milter-Anbindung
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Terminal Dienste starten
# OpenDKIM aktivieren und starten
systemctl enable opendkim
systemctl start opendkim

# Postfix neu laden
systemctl reload postfix

# Status prüfen
systemctl status opendkim
milter_default_action = accept ist kritisch

Wenn OpenDKIM nicht erreichbar ist (z. B. nach einem Neustart), bestimmt milter_default_action, was Postfix tut. Mit accept werden E-Mails ohne Signatur zugestellt — mit tempfail werden alle E-Mails abgelehnt, bis OpenDKIM wieder läuft.

4 Schritt 4 von 5

DNS-Record veröffentlichen

Der öffentliche Schlüssel muss als TXT-Record im DNS veröffentlicht werden, damit empfangende Mailserver die DKIM-Signatur Ihrer E-Mails verifizieren können. OpenDKIM hat den Record bereits als Datei generiert — kopieren Sie den Inhalt in Ihren DNS-Provider.

Terminal Öffentlichen Schlüssel auslesen
# DNS-Record-Vorlage anzeigen
cat /etc/opendkim/keys/ihre-domain.de/default.txt

# Ausgabe (Beispiel):
# default._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
#   "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." ) ;
# ----- DKIM key default for ihre-domain.de

TXT-Record beim DNS-Provider anlegen

  1. Melden Sie sich bei Ihrem DNS-Provider an
  2. Erstellen Sie einen neuen TXT-Record
  3. Name/Host: default._domainkey (manche Provider hängen die Domain automatisch an)
  4. Wert: Den kompletten v=DKIM1; ...-String aus der Datei einfügen — ohne die Anführungszeichen und Klammern
  5. TTL: 3600 (1 Stunde) oder Standard-Wert des Providers
5 Schritt 5 von 5

DKIM verifizieren

Nach der DNS-Veröffentlichung prüfen Sie, ob der Record korrekt propagiert wurde und ob ausgehende E-Mails tatsächlich signiert werden. DNS-Änderungen brauchen je nach Provider 5 Minuten bis 24 Stunden.

Terminal Verifikation
# DNS-Record abfragen
dig TXT default._domainkey.ihre-domain.de +short

# OpenDKIM-Testbefehl
opendkim-testkey -d ihre-domain.de -s default -vvv

# Test-E-Mail senden und DKIM-Signatur-Header prüfen
echo "DKIM Test" | mail -s "DKIM Verification" test@gmail.com
# Im Gmail-Header prüfen: dkim=pass header.d=ihre-domain.de

Validieren Sie zusätzlich mit dem Wolf-Agents Email Security Check — dieser prüft DKIM auf Schlüssellänge, Algorithmus, Selector-Konfiguration und DNS-Record-Konsistenz.

Ed25519 als Alternative zu RSA

OpenDKIM ab Version 2.11 unterstützt Ed25519-Schlüssel — diese sind kürzer, schneller und bieten vergleichbare Sicherheit zu RSA-2048, werden aber noch nicht von allen Empfangsservern unterstützt. Für maximale Kompatibilität empfiehlt sich ein Dual-Signing-Setup mit RSA und Ed25519. Verwenden Sie Ed25519 nur zusätzlich zu RSA, nicht als Ersatz.

Terminal Ed25519
# Ed25519-Schlüssel generieren (OpenDKIM 2.11+)
opendkim-genkey -a ed25519 -d ihre-domain.de -s ed25519 -D /etc/opendkim/keys/ihre-domain.de/

# Version prüfen
opendkim -V

Häufige Fehler bei Postfix und OpenDKIM

Die folgenden fünf Fehler treten bei Postfix-DKIM-Konfigurationen am häufigsten auf. Jeder einzelne kann dazu führen, dass DKIM-Signaturen fehlen oder ungültig sind — und E-Mails bei strengen DMARC-Policies abgelehnt werden.

Socket-Berechtigungen — OpenDKIM vs. Postfix

Problem: OpenDKIM läuft als Benutzer opendkim, Postfix als postfix. Wenn OpenDKIM einen Unix-Socket nutzt (statt TCP), hat Postfix keine Berechtigung, darauf zuzugreifen. Die Milter-Verbindung schlägt fehl und E-Mails werden je nach milter_default_action entweder unsigniert zugestellt oder abgelehnt.

Lösung: Verwenden Sie einen TCP-Socket (inet:8891@localhost) statt eines Unix-Sockets — oder fügen Sie den Benutzer postfix zur Gruppe opendkim hinzu: usermod -aG opendkim postfix.

Falscher Pfad zum privaten Schlüssel in key.table

Problem: Der Pfad in key.table zeigt nicht auf die tatsächliche Datei — häufig durch Tippfehler beim Domainnamen oder fehlende Verzeichnisebene. OpenDKIM kann den Schlüssel nicht laden und signiert keine E-Mails. Im Syslog erscheint: can't load key from /etc/opendkim/keys/...

Lösung: Den Pfad in key.table exakt prüfen — er muss auf die .private-Datei zeigen. Testen Sie: ls -la /etc/opendkim/keys/ihre-domain.de/default.private.

Signing-Table-Regex falsch

Problem: Die Signing-Table erwartet das Muster *@ihre-domain.de — wird stattdessen ihre-domain.de ohne *@-Präfix eingetragen, matched OpenDKIM keine Absenderadressen und signiert keine E-Mails. Es gibt keine Fehlermeldung — die E-Mails gehen einfach ohne DKIM-Signatur raus.

Lösung: Das Muster in signing.table muss mit *@ beginnen: *@ihre-domain.de default._domainkey.ihre-domain.de.

OpenDKIM nach Konfigurationsänderung nicht neu gestartet

Problem: Änderungen an opendkim.conf, key.table oder signing.table werden erst nach einem Neustart von OpenDKIM wirksam. Ein Reload von Postfix allein reicht nicht — OpenDKIM ist ein eigenständiger Dienst mit eigenem Prozess und eigenem Konfigurationscache.

Lösung: Nach jeder Konfigurationsänderung: systemctl restart opendkim. Prüfen Sie den Status anschließend: systemctl status opendkim.

milter_default_action = tempfail statt accept

Problem: Wenn milter_default_action auf tempfail steht und OpenDKIM ausfällt (Absturz, Neustart, Socket-Problem), lehnt Postfix alle E-Mails mit einem temporären Fehler ab. Kein einziger Mailversand funktioniert mehr, bis OpenDKIM wieder läuft.

Lösung: Setzen Sie milter_default_action = accept in /etc/postfix/main.cf. Damit werden E-Mails im Fehlerfall ohne DKIM-Signatur zugestellt — besser als gar keine Zustellung. Überwachen Sie OpenDKIM aktiv über Monitoring.

Wie steht Ihre Domain bei DKIM?

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