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.

Exim · Schritt für Schritt

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.

1 Schritt 1 von 4

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.

Terminal Schlüsselgenerierung
# 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
Dateinamenkonvention

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.

2 Schritt 2 von 4

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.

30_exim4-config_remote_smtp Exim Transport
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

  1. dkim_domain — wird dynamisch aus dem From-Header extrahiert, unterstützt Multi-Domain
  2. dkim_selector — der Selector-Name, hier default (frei wählbar)
  3. dkim_private_key — Pfad zum privaten Schlüssel, dynamisch per Domain aufgelöst
  4. dkim_canonrelaxed ist toleranter bei Leerzeichen-Änderungen durch Relay-Server
  5. dkim_sign_headersDKIM_SIGN_HEADERS ist Exims integrierte Standardliste sicherheitsrelevanter Header
Terminal Konfiguration prüfen und anwenden
# Exim-Konfiguration auf Syntaxfehler prüfen
exim4 -bV

# Bei Split-Konfiguration: Konfiguration zusammenbauen
update-exim4.conf

# Exim neu laden
systemctl reload exim4
3 Schritt 3 von 4

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.

Terminal Öffentlichen Schlüssel extrahieren
# 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

  1. Melden Sie sich bei Ihrem DNS-Provider an
  2. Erstellen Sie einen neuen TXT-Record
  3. Name/Host: default._domainkey
  4. Wert: v=DKIM1; k=rsa; p=IHR_OEFFENTLICHER_SCHLUESSEL_BASE64
  5. Ersetzen Sie IHR_OEFFENTLICHER_SCHLUESSEL_BASE64 durch die Ausgabe des grep-Befehls
  6. TTL: 3600 (1 Stunde) oder Standard-Wert des Providers
4 Schritt 4 von 4

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.

Terminal Verifikation
# 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.

Terminal Ed25519
# 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.

Wie steht Ihre Domain bei DKIM?

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