DKIM und SPF

DKIM (DomainKeys Identified Mail) ist eine Technik, Emails zu signieren. Ich gebe hier eine Anleitung, wie dies mit dem Mailserver exim4 auf Debian-Systemen einzurichten ist.

Schlüsselerzeugung

DKIM benötigt für jede Domain ein Schlüsselpaar. Mit dem privaten Schlüssel wird die ausgehende Email signiert. Im DNS wird der öffentliche Schlüssel hinterlegt, so dass Empfänger die Signatur prüfen können. Als Schlüssellänge wird 2048 Bits empfohlen. Problematisch kann es werden, wenn der Provider keine DNS-TXT-Einträger zulässt, die länger als 255 Zeichen sind. Dann muss als Schlüssellänge auf 1024 zurückgegriffen werden.

mkdir /etc/exim4/dkim
cd /etc/exim4/dkim
openssl genrsa -out planet-laas.de.pem 2048
openssl rsa -in planet-laas.de.pem -pubout > planet-laas.de.pub
chown -R Debian-exim:Debian-exim /etc/exim4/dkim/
chmod 640 /etc/exim4/dkim/*

Die Schlüssel werden im Unterverzeichnis /etc/exim4/dkim abgelegt. Zuletzt werden noch die Zugriffsrechte korrekt gesetzt, damit der exim4 die Dateien auch nutzen kann. Für jede Domain werden zwei Dateien erzeugt. Die Datei mit der Endung .pem entält das komplette Schlüsselpaar. Die Datei mit der Endung .pub enthält den öffentlichen Schlüssel.

Konfiguration des Mailservers exim4

In der Datei /etc/exim4/exim4.conf.localmacros sind die folgenden Zeilen anzufügen.

DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim4/dkim/${lc:${domain:$h_from:}}.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
DKIM_SELECTOR = mail
DKIM_CANON = relaxed

Der Wert DKIM_SELECTOR ist für den späteren DNS-Eintrag wichtig, kann aber ziemlich beliebig gewählt werden. Ein Neustart des Mailservers schließt diesen Teil ab.

DNS-Einträge

Für DKIM muss ein spezieller DNS-Eintrag eingerichtet werden. In meinem Fall muss ich einen TXT-Eintrag für mail._domainkey.planet-laas.de hinzufügen. Dabei steht mail für den Selektor, welcher in der Exim4-Konfiguration angegeben worden ist. Der Wert des Eintrags enthält auch den öffentlichen Schlüssel, allerdings ohne die Begrenzer. Es muss also nur der Teil zwischen "-----BEGIN PUBLIC KEY-----" und "-----END PUBLIC KEY-----" verwendet werden. Alles muss in einer Zeile stehen, Zeilenumbrüche sind also vorher zu entfernen.

Der Eintrag beginnt immer mit v=DKIM1. Dies zeigt die Version an, aktuell gibt es nur diese. Weiterhin wird mit k=rsa der Typ des Schlüssels angegeben. Hinter p= folgt der öffentliche Schlüssel. Das Flag t=s gibt an, dass signiert werden soll. Alle Werte sind durch Semikolon voneinander getrennt. Ich gebe beispielhaft meinen Eintrag an.

v=DKIM1; t=s; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzDXUQ4+f35IKgDyQVQdoVU+gIpXBuIXDlCNPJUn/8Gzj86newOPsQWvpeabhcLq3GCqO08O+FvHQTlozfBg78Wgp0OQwMUQ794oTATjvh1vXe4Da4p176K40TmLXxDekCLO4ge6HneUTh2qL/hbfgp+LuLdS+yG1wNy/fl8rILZL2h9RwziXjmIf8ZbIALtHLiLN/ucpe8LZisfjFVISjp8CCOW5v81yWwtm3XvhotANDEfG/wTkYoy5P0u1hl8HKbhuchzuG90uWUzyEu8qIX0YQcaDRPqw5owtoks1t/cdTgw/eSPotDMRHg4RB9PA9l1vz1touv4qgF/3jmvaQIDAQAB

Änderungen an den DNS-Einträgen dauern leider einige Zeit, manchmal bis zu 24 Stunden, bis sie weltweit propagiert sind. Direkt auf der Konsole kann der Eintrag mit

dig mail._domainkey.planet-laas.de TXT

geprüft werden. Alternativ kann auch einer der angegebenen Checks benutzt werden.

SPF

Sender Policy Framework ist ein Verfahren, um die Zustellung von Spam zu erschweren. Es wird ein DNS-Eintrag angelegt, in welchen angegeben wird, von welchen IP-Adressen Mails über diesen Server versendet werden dürfen. Der Empfänger prüft bei Empfang, ob der Sender dazu berechtigt war. SPF ist schnell eingerichtet und erfordert wenig Aufwand.

Im einfachsten Fall wird ein TXT-Eintrag für die Domain hinzugefügt.

v=spf1 a -all