Exim4 DKIM
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 taunusstein.net implementiert wurde. Der aktuelle Stand ist unter www.taunusstein.net zu finden.
Inhaltsverzeichnis
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:
tsst2008._domainkey IN TXT "k=rsa; t=y;p=MIG...QAB" _ssp._domainkey IN TXT "t=y; dkim=unknown"
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
DKIM mit Sendmail, aber auch interessante Anleitung für DNS