DKIM mit Exim4 Drucken E-Mail
Geschrieben von: Administrator   
Montag, 21. Januar 2008 09:27

DKIM erlaubt eine Authentifizierung der Absenderdomain, so dass damit ein Lösung für das leidige Problem Mail von Dial-In Anschlüssen gelöst werden kann. Aktuell macht taunusstein.net Versuche mit DKIM, wobei die Signatur noch nicht als Indiz für den Absender der Mail verwendet werden sollte.

DKIM als Lösung für Mail von Dialin-Anschlüssen ?

Der Ansatz besteht darin, dass jeder taunusstein.net Mail Benutzer einen RSA Schlüssel  verwendet, um seine Mails zu signieren. Dabei dient als DKIM Selector der Mailname ohne Domain als Selector. Unter diesem Selector wird dann der public-Key des Benutzers im DNS für taunusstein.net hinterlegt. Verschickt der Benutzer Spam, Malware etc., wird der public Key wieder aus dem DNS entfernt.

Wir hoffen, dass auch andere Mailprovider dann zumindest DKIM signierte Mails auch von Dialin Anschlüssen wieder annehmen, doch dazu muss sich DKIM zunächst auf breiter Ebene durchsetzen und dieses Verfahren auch von den größeren Mailprovidern so umgesetzt werden.

DKIM (DomainKeys Identified Mail) is ein neuer Versuch, den Spamfluten Einhalt zu gebieten. Das Prinzip beruht darauf, im DNS Public-Keys der legitimen Server zu veröffentlichen und die Mails mit dem private Key zu signieren. In diesem Beitrag wird gezeigt, wie das bei [http://www.taunusstein.net taunusstein.net] implementiert wurde.

Praktische Anwendung


Versuche laufen auf taunusstein.net mit Exim 4.69. Es wurde folgende Betriebsweise implementiert.

  • Abgehende E-Mails werden mit DKIM signiert
  • Ankommende E-Mails werden via Spamassassin auf DKIM Signatur geprüft. Korrekte Signatur gibt für das Spamrating ein -0.1
  • DKIM Signaturen sind nicht zwingend

RSA Key


Zunächst wird ein RSA Key gebraucht:

#!/bin/sh

KEYLEN=1024
dkim_selector=tsst2008
dkim_domain=mydomain.de

openssl genrsa -out /etc/exim4/${dkim_selector}.${dkim_domain}.private.pem ${KEYLEN>
openssl rsa -in rsa.private -out /etc/exim4/${dkim_selector}.${dkim_domain}.public.pem \
-pubout -outform PEM


Ältere DNS Implementierungen haben Probleme mit UDP Paketen, die länger als 512 Bytes sind, daher können Probleme mit längeren Keys auftreten, weil ein BASE64 codierter Key dann nicht mehr in ein DNS-UDP Paket passt.

Exim4 Konfiguration


Exim 4.69 mit DKIM Support compiliert und installiert. Ältere Exim Versionen unterstützen ohne Patches kein DKIM.

Im Exim Source-Tree gibt es das File ''doc/experimental-spec.txt'', dort wird genau beschrieben, wie der DKIM Support in Exim 4.69 aktiviert wird. Vorher muss unbedingt libdkim-1.0.15-tk.tar.gz compiliert werden. Der Pfad ist dabei egal, dieser muss nur beim Compilieren von Exim mit übergeben werden.

Debian Exim Config (split config) wie folgt geändert:

### transport/30_exim4-config_remote_smtp
#################################
# This transport is used for delivering messages over SMTP connections.
remote_smtp:
  debug_print = "T: remote_smtp for $local_part@$domain"
  driver = smtp
  .ifdef OUTGOING_INTERFACE
  interface = OUTGOING_INTERFACE
  .endif
  dkim_domain = $sender_address_domain
  dkim_selector = tsst2008
  dkim_private_key = /etc/exim4/${dkim_selector}.${dkim_domain}.private.pem
  # to disable TLS on outgoing connections, uncomment this
  # hosts_avoid_tls = *

Das Debian Skript update-exim4.config funktioniert damit immer noch und wird auch genutzt.

DNS Konfiguration


Erstellung eines passenden DNS Eintrags für taunusstein.net und die anderen Domains. Für taunusstein.net sieht das nun so aus:

<pre>tsst2008._domainkey IN TXT "k=rsa; t=y;p=MIG...QAB"
_ssp._domainkey     IN TXT "t=y; dkim=unknown"</pre>

Dabei bedeuten:

  • tsst2008 ist ein willkürlich gewählter Selector, man könnte auch genauso gut blahfasel123 nehmen
  • _ssp ist die Senderpolicy für DKIM, wobei hier ''dkim=unknown'' bedeutet: "Mail wird signiert, oder auch nicht" _domainkey ist per RFC spezifiziert
  • k=rsa Signaturverfahren
  • t=y wobei y für Test steht
  • p=... ist der BASE64 codierte Public-Key


Im Spamassassin wird in der local.cf einfach nur eingetragen ''loadplugin Mail::SpamAssassin::Plugin::DKIM'', jedoch muss das Paket ''libmail-dkim-perl'' installiert sein.

Links zu DKIM


DKIM Homepage

RFC-4871 DKIM RFC

draft-allman-dkim-base-01

DKIM mit Sendmail , aber auch interessante Anleitung für DNS