April 2, 2013

DKIM mit Postfix - Beweise, dass Du senden darfst

DKIM – Einrichtung für Postfix

Einleitung

Durch die Flut an SPAM ist es unübersichtlich geworden in manchen Mailboxen. So ist es mittlerweile zur Gewohnheit geworden mindestens einen SPAM-Filter zu verwenden, um zumindest einen Teil der unerwünschten Post fernzuhalten. Manch einer dieser Wächter ist dabei so scharf eingestellt, dass auch so manche erwünschte Post verloren geht.

In einigen Ländern, z.B. den USA, stehen mittlerweile horrende Strafen auf den Versand von UCE. Das Problem ist, dass das SMTP Protokoll, über das eMails verschickt werden, aus einer Zeitepoche stammt, in der man sich über Authentizität eines Senders noch keine Gedanken machte. Dies nutzen die Spammer aus und versenden SPAM unter falscher Flagge, fälschen Absenderadressen und nutzen Botnetze, um ihre Werbung zu verbreiten.

Ein Ansatz, um dem entgegenzuwirken, ist DKIM – Domain Keys Identified Mail. Mittels diesem Verfahren veröffentlicht man einen Schlüssel im DNS seiner Domain, mit dem der empfangende Mailserver sicherstellen kann, dass eine eMail tatsächlich von einem authorisiertem Mailserver verschickt wurde.

Dieses Tutorial setzt einen funktionalen Postfix Mailserver voraus. Desweiteren basiert es auf einem heise.de Artikel, wurde jedoch in einigen Bereichen angepasst um flexibler zu sein bzw. um auf bestimmte Eigenarten in Debian einzugehen.

Einrichtung

Schritt 1: Schlüssel erstellen

Zunächst muss ein Schlüssel erstellt werden. Dies wird mit folgendem Kommando erledigt:

openssl genrsa -out mail200801.private 1024

Der Name kann frei gewählt werden. Es empfiehlt sich, ihn genauso zu nennen wie den DNS-Eintrag. Mit obigem Kommando wird ein Schlüssel mit 1024bit Stärke erstellt, welches als Mindestanforderung an einen validen DKIM Schlüssel gilt. Als nächstes muss der öffentliche Schlüssel mail200801.public extrahiert werden. Das geschieht mit

openssl rsa -in mail200801.private -out mail200801.public -pubout -outform PEM

Schritt 2: In DNS einfügen

Um eine möglichst große Kompatibilität mit vorhandenen DNS zu erreichen kann der Schlüssel per DNS als TXT-Record verbreitet werden. Später soll ein eigener Record-Typ definiert werden. Der Inhalt der eben erzeugten PEM-Datei eignet sich jedoch noch nicht als DNS-Record. Das Kommando

grep -v -e "^-" mail200801.public | tr -d "\n"

entfernt den Public-Key-Header und -Footer sowie die Zeilenumbrüche.

Beispieleintrag Bind (alles in einer Zeile):

mail200801._domainkey IN TXT "v=DKIM1\; k=rsa\; t=y\;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBbq6m S9PifYFlBcEe2nAvw6lR5RotPOyBm2tUks1Ytqqrr7W+CiiFj3Giy/Psd7sazBKUB/0IMYQ1BwglsUrUWOa+VKYSIFGAqx6fnaZ 4Uab0Kv5k8Nlo3LLcwDF311Jn7M4PvQRzelsFOteFbq/ugDTm+gq9FwsB/PSdrbYeEQIDAQAB"

Fügt man dem Schlüsselnamen eine Versionsnummer hinzu kommt man später nicht durcheinander, wenn der Schlüssel – wie es stark empfohlen wird – regelmäßig ausgetauscht wird. Ein nicht mehr genutzer Schlüssel sollte nicht gelöscht werden, vielmehr gehört es zum guten Ton, ihn zu widerrufen. Dazu modifiziert man den TXT Record und entfernt den Schlüssel:

mail200801._domainkey IN TXT "v=DKIM1\; p="

Die verwendete Subdomain „_domainkey “ ist im RFC vorgeschrieben und schließt Komplikationen mit vorhandenen Einträgen im DNS quasi aus.
Es gibt neben dem Schlüssel (p=) noch weitere Parameter, die alle in der Form PARAMETER=WERT\; angegeben werden

  • Der v-Parameter benennt die benutzte Version des DKIM-Standards. Das v= muss als erster Eintrag genannt werden. Bislang ist nur DKIM1 erlaubt.
  • Der k-Parameter, der den Schlüsseltyp (key type) spezifiziert. Die Vorgabe ist „rsa „.
  • Der t-Parameter, der Sondereigenschaften spezifiziert, zum Beispiel, ob es sich um einen Testlauf (t=y) handelt. Dann nämlich dürfen Verifizierer die Signatur zwar prüfen, das Ergebnis aber nicht in Bewertungen der Nachricht einfließen lassen.

Abfrage des DKIM Eintrags

Linux
dig mail200801._domainkey.domain.de TXT +short
Windows
nslookup -type=TXT mail200801._domainkey.domain.de.

Schritt 3: DKIM-Filter installieren und Einrichten

Zunächst installieren wir das benötigte Paket

aptitude install dkim-filter

Nun geht es ans Modifizieren der Konfigurationsdateien

Inhalt /etc/dkim-filter.conf
Syslog              yes
Mask                002
Selector            mail200801
Background          yes
Canonicalization    relaxed/simple
DNSTimeout          5
Mode                s
SubDomains          yes
KeyList             /etc/dkim-keylist.conf
RequiredHeaders     yes
OmitHeaders         Return-Path,Received,Comments,Keywords,Bcc,Resent-Bcc
Inhalt /etc/dkim-keylist.conf
#pattern:domain:keypath
*domain.de:domain.de:/etc/ssl/certs/DKIM/mail200810
Inhalt /etc/default/dkim-filter
SOCKET="inet:8891@127.0.0.1"
Änderung /etc/postfix/main.cf
smtpd_milters = inet:localhost:8891
Neustart der Dienste
etc/init.d/dkim-filter restart
/etc/init.d/postfix force-reload

Testen der Konfiguration

Die Betreiber von DKIM.org haben zum Test DKIM-signierter E-Mails die Adresse dkim-test@testing.dkim.org eingerichtet. Wer dorthin eine Nachricht sendet, sollte kurz danach eine E-Mail-Antwort mit dem Signaturstatus seiner Nachricht erhalten. Sie vermerkt gegen Ende, im Authentication-Results-Header, ob dkim.org die Signatur verifizieren konnte. Ist dkim.org zufrieden, ist die Implementierung der signierenden Instanz erfolgreich abgeschlossen.