Archiv für ‘DKIM’

DKIM mit Postfix und Spamassassin

20. August 2009 19:24 | Autor: Marc | 3 Kommentare | Kategorie(n): Sicherheit

DKIM als Authentifizierungsmechanismus für E-Mails ist ein Zusammenspiel von DNS, MTA und Spam-Filter. Der versendende Mailserver versieht den Header ausgehender Mails mit einer Signatur (Private Key), welche der empfangende MTA anhand eines speziellen DNS TXT-RR (Public Key) verifizieren kann.

Mag kompliziert klingen, ist aber eigentlich ganz einfach umzusetzen, wie das folgende Beispiel auf einem Debian Lenny-Server mit Postfix, BIND und Spamassassin belegen soll. Vorausgesetzt wird hierbei, dass die drei genannten Dienste bereits im Normalbetrieb funktionieren.

Als Erstes muss das Schlüsselpaar erstellt werden. Dies geschieht mit den folgenden Kommandos:
openssl genrsa -out <Schlüsselbez.>.private 1024
openssl rsa -in <Schlüsselbez.>.private -out \
<Schlüsselbez.>.public -pubout -outform PEM

Die Schlüsselstärke von 1024 Bit ist die Minimalanforderung von DKIM, ein längerer Private Key hätte aber naturgemäß auch einen längeren Public Key zu Folge, und hier spielt BIND dann aufgrund einer begrenzten Größe des TXT-RR nicht mehr mit.

Nun kann der Public Key per DNS bekannt gemacht werden. Da dies ohne Zeilenumbrüche geschehen muss, werden eben diese kurzerhand ignoriert:
cat <Schlüsselbez.>.public | tr -d "\n"

Der reine Schlüssel (ohne Header) kann jetzt in die Zonendatei der Domain kopiert werden, die mit DKIM ausgestattet werden soll. Hierfür wird die spezielle Subdomain <Schlüsselbez.>._domainkey verwendet. Ein kompletter TXT-RR für DKIM kann wie folgt aussehen:

mail2009._domainkey   IN TXT "v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADC (gekürzt)"

Es macht Sinn, den Schlüssel regelmäßig auszutauschen und dies auch im DNS zu dokumentieren. Statt den alten Schlüssel einfach zu löschen, wird er widerrufen. Einer entsprechender Eintrag im TXT-RR sieht dann so aus: "v=DKIM1\; k=rsa\; p="

Auf dem System kann nun das Paket dkim-filter installiert werden. Dies ist in den Repositories von Debian vorhanden und kann somit per apt installiert werden. Die Konfigurationsdateien sollten in etwa folgendermaßen modifiziert werden (meine Konfiguration ist auch auf dem Gopher zu finden):

/etc/default/dkim-filter:
SOCKET="inet:8891@127.0.0.1"

/etc/dkim-keys.conf:
*domain.tld:domain.tld:/etc/mail/dkim/mail2009

(eine Zeile für jede Domain)

/etc/dkim-filter.conf:
Syslog   yes
UMask   002
Background   yes
SubDomains   yes
KeyList   /etc/dkim-keys.conf
RequiredHeaders   yes
OmitHeaders   Return-Path,Received,Comments,Keywords,Bcc,Resent-Bcc

Außerdem muss die Postfix-Konfiguration noch modifiziert werden:

/etc/postfix/main.cf
(...)
smtpd_milters = inet:localhost:8891

Nach dem Restart der Dienste dkim-filter und postfix kann das System bereits für ausgehende Mails genutzt werden. Ob alles funktioniert, kann mit einer Testmail an check-auth@verifier.port25.com überprüft werden. Nach kurzer Zeit erhält man eine Mail mit einem detaillierten Bericht.

Für die DKIM-Integration in Spamassassin wird nun noch das Paket libmail-dkim-perl benötigt und anschließend die Konfiguration angepasst.

/etc/spamassassin/v320.pre:
loadplugin   Mail::SpamAssassin::Plugin::DKIM

/etc/spamassassin/local.cf:
whitelist_from_dkim *@googlemail.com googlemail.com
score USER_IN_DKIM_WHITELIST -10.0
score DKIM_VERIFIED -5.0
score DKIM_POLICY_TESTING 0

Die Score-Werte in der local.cf können natürlich angepasst werden. Evtl. ist hier ein wenig Testen erforderlich.