Exim4 DKIM

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

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.

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

draft-allman-dkim-base-01

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

Christian

essay writing service