Perfektes DKIM mit exim und Multidomains

 

E mail concept on white backgroundDomainKeys Identified Mail (DKIM) ist neben Sender Policy Framework (SPF) ein etabliertes Verfahren, welches das Fälschen des Absenders einer E-Mail verhindern soll. Eingeführt und forciert wurde DKIM um 2005 maßgeblich von Yahoo. Mittlerweile nutzten die meisten großen Mailprovider, so z.B. auch Google, DKIM als Verfahren um SPAM-Emails bereits an der Quelle zu eliminieren. Dieses Howto beschreibt das Setup für DKIM mit einem exim Mailserver. Damit unser DKIM die bestmöglichste Kompatiblität mit Mailprovidern aufweist, bedarf es einiger kleiner aber feiner Tweaks. Dieses Howto setzt einen laufenden und funktionierenden exim-Mailserver ab Version 4.72 voraus.

Zertifikat erstellen

Zuerst wird ein Private- und Public-Key Schlüsselpaar erzeugt. Wichtig dabei ist, dass der Private-Key mindestens 1024 Bit Stark ist. 768 Bit oder weniger wird von Google-Mail nicht mehr akzeptiert. Auf der Shell in das Verzeichnis /etc/exim4/ wechseln und mit den folgenden zwei Befehlen den Private- und Public-Key erzeugen:

openssl genrsa -out dkim.private.key 1024
openssl rsa -in dkim.private.key -out dkim.public.key -pubout -outform PEM

exim Konfigurieren

Als nächstes die Konfigurationsdatei von exim anpassen. Je nachdem ob „Combined“ oder „Splitted Configuration“ gewählt wurde, muss die entsprechende Datei geöffnet werden. Jetzt in der Config lokalisieren wo „remote_smtp“ definiert wird. Vor der „remote_smpt“ Konfiguration folgende Variablen setzten, die Änderungen speichern und anschließen den exim-Server neu starten.

DKIM_DOMAIN = $sender_address_domain
DKIM_SELECTOR = x
DKIM_PRIVATE_KEY = /etc/exim4/dkim.private.key
DKIM_CANON = relaxed

Bei den exim-Konfigurationen ab (mindestens 4.72) werden die gesetzten Variablen im Verlauf der Config von „remote-smpt“ verwendet. Ist dies nicht der Fall, müssen die Werte entsprechend direkt gesetzt werden. Durch das dynamische setzten von DKIM_DOMAIN mit $sender_address_domain haben wir nebenbei mal ganz smart den exim für DKIM in einer Multi-Domain Umgebung fit gemacht, da je nach Absender-Domain die DKIM-Domain gesetzt wird. Der Absolute Pfad zum Private-Key ist für exim wichtig, der Key wird andernfalls zur Laufzeit nicht gefunden und es erscheint im exim-Log die Fehlermeldung „Exim DKIM Error: DKIM: signing failed (RC -101)“

DNS Konfigurieren

Um unser DKIM für extern zu propagieren, müssen für jede Domain zwei TXT-Einträge im DNS vorgenommen werden. Je nach Architektur ist das entweder im Zone-File oder in den DNS-Einstellungen der Domain.

_domainkey.domain.tld.     IN TXT "o=~;"
x._domainkey.domain.tld.   IN TXT "v=DKIM1; k=rsa; p=[public-key]"

Diverse Tutorials, die man über Google findet, haben gerne einen Test-Flag in TXT-Record implementiert (t=y). Diesen sollte man entfernen. Zum Beispiel wertet Google-Mail die DKIM-Signatur nicht als zusätzliches positives Kriterium, wenn dieser Test-Flag aktiv ist. Das kann man dann an dem Eintrag „dkim=pass (test mode)“ in er Original-Ansicht der entsprechenden E-Mail in Google Mail erkennen. „[public-key]“ ist der Platzhalter für den Public-Key. Dort kommt der Inhalt aus der zuvor generierten Public-Key Datei dkim.public.key hin. „—–BEGIN PUBLIC KEY—–“ und „—–END PUBLIC KEY—–“ können weg gelassen werden.

DKIM testen

Am einfachste testet man das DKIM, indem man sich eine E-Mail zu einem Google-Mail Postfach sendet. Dort die E-Mail öffnen und den Original-Header der E-Mail anzeigen lässt. Wenn alles geklappt hat, sollte der Abschnitt für DKIM in etwa so aussehen:

dkim=pass header.i=@domain.tld
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=domain.tld; s=x;
	h=Subject:Content-Type:MIME-Version:Message-ID:Reply-To:From:To:Date; bh=7JPP6xT1Q2DnnzeWpggCGEx039jxQrucYJN3aB4hmg8=;
	b=Y19bvLbZkK9mopgHdhdBATMzZhWhQGWOlsvQ5KR8tE7nE32pHN2W/uKw/5rwFhsJL2XMuaBHkfCl6Gw7RwdbSvUdRM91Hhu5ojQH9tJUfntOTE+m+FQxCjFcKoaKP76cJr6GmLSmoRTG+v02RQvq5uW/Kwz7qqnjGO3WYibNRys=;

Wichtig ist die Meldung hinter „dkim=“. Dort signalisiert ein „pass“, dass DKIM erfolgreich für diese E-Mail validiert wurde. Falls das DKIM nicht funktioniert hat, sieht man dort auch eine entsprechende Fehlermeldung. Beim Testen berücksichtigen: Nach dem setzten der TXT-Records im DNS kann es bis zu 48 Stunden dauern bis diese vollständige unter den DNS-Servern verteilt wurden.