DKIM für Exim einrichten
Schritt-für-Schritt-Anleitung: DKIM-Schlüssel generieren, Exim-Transport konfigurieren, DNS-Record veröffentlichen und DKIM verifizieren — nativ ohne zusätzliche Pakete.
DKIM für Exim (native Unterstützung)
Exim unterstützt DKIM-Signierung nativ im remote_smtp Transport — ohne zusätzliche Pakete wie OpenDKIM, da die DKIM-Funktionalität direkt in den MTA eingebaut ist. Sie generieren ein Schlüsselpaar mit openssl, konfigurieren den Transport und veröffentlichen den öffentlichen Schlüssel im DNS. Diese Anleitung zeigt jeden Schritt für Debian/Ubuntu-Systeme mit der Split-Konfiguration.
NIS2 Art. 21 verlangt Kommunikationssicherheit nach dem Stand der Technik. Exims native DKIM-Signierung im remote_smtp Transport erfüllt BSI TR-03108 ohne externe Software wie OpenDKIM — der Wolf-Agents Email Security Check prüft die Konfiguration auf Schlüssellänge, Algorithmus und Selector-Konsistenz als Teil der 165-Punkte-Analyse.
Hardening-Pfad: Nach DKIM folgt DMARC für Exim — die Policy, die SPF- und DKIM-Ergebnisse für empfangende Server bindend macht.
Schlüssel generieren
Mit openssl generieren Sie ein RSA-2048-Schlüsselpaar und extrahieren den öffentlichen Schlüssel für den DNS-Record — der private Schlüssel bleibt auf dem Server. Erstellen Sie zunächst ein dediziertes Verzeichnis und setzen Sie die Berechtigungen für den Exim-Benutzer.
# Verzeichnis anlegen
mkdir -p /etc/exim4/dkim
# Privaten RSA-2048-Schlüssel generieren
openssl genrsa -out /etc/exim4/dkim/ihre-domain.de.private 2048
# Öffentlichen Schlüssel extrahieren
openssl rsa -in /etc/exim4/dkim/ihre-domain.de.private -pubout -out /etc/exim4/dkim/ihre-domain.de.public
# Berechtigungen setzen (Debian-exim muss lesen können)
chown Debian-exim:Debian-exim /etc/exim4/dkim/ihre-domain.de.private
chmod 600 /etc/exim4/dkim/ihre-domain.de.private Der Dateiname ihre-domain.de.private orientiert sich am Domainnamen — die Exim-Konfiguration referenziert den Schlüssel dynamisch über die Domain des Absenders. Für mehrere Domains legen Sie je einen Schlüssel an.
Exim-Transport konfigurieren
Die DKIM-Signierung wird direkt im remote_smtp Transport von Exim konfiguriert — Exim signiert damit automatisch jede ausgehende E-Mail mit dem passenden Schlüssel der Absenderdomain. Bearbeiten Sie die Datei /etc/exim4/exim4.conf.template oder bei Split-Konfiguration /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp.
remote_smtp:
driver = smtp
dkim_domain = ${lc:${domain:$h_from:}}
dkim_selector = default
dkim_private_key = /etc/exim4/dkim/${lc:${domain:$h_from:}}.private
dkim_canon = relaxed
dkim_sign_headers = DKIM_SIGN_HEADERS Parameter erklärt
- dkim_domain — wird dynamisch aus dem From-Header extrahiert, unterstützt Multi-Domain
- dkim_selector — der Selector-Name, hier
default(frei wählbar) - dkim_private_key — Pfad zum privaten Schlüssel, dynamisch per Domain aufgelöst
- dkim_canon —
relaxedist toleranter bei Leerzeichen-Änderungen durch Relay-Server - dkim_sign_headers —
DKIM_SIGN_HEADERSist Exims integrierte Standardliste sicherheitsrelevanter Header
# Exim-Konfiguration auf Syntaxfehler prüfen
exim4 -bV
# Bei Split-Konfiguration: Konfiguration zusammenbauen
update-exim4.conf
# Exim neu laden
systemctl reload exim4 DNS-Record veröffentlichen
Der öffentliche Schlüssel wird als TXT-Record im DNS unter selector._domainkey.ihre-domain.de veröffentlicht — empfangende Mailserver fragen diesen Record ab, um die DKIM-Signatur zu verifizieren. Extrahieren Sie den Base64-kodierten Public Key und erstellen Sie den DNS-Eintrag.
# Public Key ohne Header/Footer als eine Zeile ausgeben
grep -v '^-' /etc/exim4/dkim/ihre-domain.de.public | tr -d '\n'
# Ausgabe (Beispiel):
# MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... TXT-Record beim DNS-Provider anlegen
- Melden Sie sich bei Ihrem DNS-Provider an
- Erstellen Sie einen neuen TXT-Record
- Name/Host:
default._domainkey - Wert:
v=DKIM1; k=rsa; p=IHR_OEFFENTLICHER_SCHLUESSEL_BASE64 - Ersetzen Sie
IHR_OEFFENTLICHER_SCHLUESSEL_BASE64durch die Ausgabe des grep-Befehls - TTL: 3600 (1 Stunde) oder Standard-Wert des Providers
DKIM verifizieren
Nach der DNS-Veröffentlichung prüfen Sie, ob der Record korrekt propagiert wurde und ob Exim ausgehende E-Mails tatsächlich signiert. DNS-Änderungen brauchen je nach Provider 5 Minuten bis 24 Stunden.
# DNS-Record abfragen
dig TXT default._domainkey.ihre-domain.de +short
# Erwartete Ausgabe (Beispiel):
# "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
# Exim-Konfiguration validieren
exim4 -bV | grep -i dkim
# Test-E-Mail senden
echo "DKIM Test" | mail -s "DKIM Verification" test@gmail.com
# Im Gmail-Header: 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
Exim ab Version 4.91 unterstützt Ed25519-Schlüssel nativ — diese sind deutlich kürzer als RSA-2048 und bieten vergleichbare Sicherheit, werden aber noch nicht von allen Empfangsservern unterstützt. Für maximale Kompatibilität empfiehlt sich ein Dual-Signing-Setup mit RSA und Ed25519. Der Ed25519-Schlüssel wird parallel zum RSA-Schlüssel eingerichtet.
# Ed25519-Schlüssel generieren (Exim 4.91+)
openssl genpkey -algorithm ed25519 -out /etc/exim4/dkim/ihre-domain.de.ed25519.private
# Öffentlichen Schlüssel extrahieren
openssl pkey -in /etc/exim4/dkim/ihre-domain.de.ed25519.private -pubout -out /etc/exim4/dkim/ihre-domain.de.ed25519.public
# Exim-Version prüfen
exim4 -bV | head -1 Häufige Fehler bei Exim und DKIM
Bei Exim-DKIM-Konfigurationen treten diese drei Fehler besonders häufig auf. Jeder einzelne kann dazu führen, dass DKIM-Signaturen fehlen oder ungültig sind — und E-Mails bei strengen DMARC-Policies abgelehnt werden.
dkim_strict = true lehnt unsignierte E-Mails ab
Problem: Mit dkim_strict = true lehnt Exim den Versand ab, wenn der private Schlüssel für die Absenderdomain nicht gefunden wird — etwa bei internen Weiterleitungen, System-Mails (cron, logwatch) oder Domains ohne eigenen DKIM-Schlüssel. Im Mainlog erscheint: DKIM: private key file not found.
Lösung: Setzen Sie dkim_strict nicht oder belassen Sie den Standardwert false. Exim sendet dann E-Mails ohne DKIM-Signatur, wenn kein passender Schlüssel vorhanden ist — das ist besser als gar keine Zustellung.
Falscher Konfigurationspfad (Template vs. conf.d)
Problem: Debian nutzt standardmäßig die Split-Konfiguration unter /etc/exim4/conf.d/, die durch update-exim4.conf zusammengebaut wird. Wer die DKIM-Konfiguration direkt in /etc/exim4/exim4.conf.template einträgt, aber dc_use_split_config='true' in /etc/exim4/update-exim4.conf.conf gesetzt hat, verliert die Änderung beim nächsten Update.
Lösung: Prüfen Sie mit grep dc_use_split_config /etc/exim4/update-exim4.conf.conf, welcher Modus aktiv ist. Bei Split-Konfiguration: /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp bearbeiten. Bei Template: /etc/exim4/exim4.conf.template.
Key-Datei nicht lesbar für Debian-exim
Problem: Der private Schlüssel wurde mit Root-Berechtigungen erstellt und Exim läuft als Benutzer Debian-exim. Ohne Leserechte kann Exim den Schlüssel nicht laden — E-Mails gehen ohne DKIM-Signatur raus, ohne offensichtliche Fehlermeldung im Mainlog.
Lösung: Berechtigungen explizit setzen: chown Debian-exim:Debian-exim /etc/exim4/dkim/ihre-domain.de.private und chmod 600. Prüfen Sie: sudo -u Debian-exim cat /etc/exim4/dkim/ihre-domain.de.private.
DKIM-Anleitung auch für:
Wie steht Ihre Domain bei DKIM?
Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 165 Prüfpunkte.