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. Für die Schlüsselerzeugung aber auch Prüfung kann opendkim benutzt werden.
apt-get install opendkim-tools
Ich verwende für jede Domain ein eigenes Unterverzeichnis. Dort werden auch die Schlüsseldateien abgelegt.
mkdir /etc/exim4/domains/planet-laas.de
cd /etc/exim4/domains/planet-laas.de
opendkim-genkey --selector mail --domain planet-laas.de
chown -R root:Debian-exim dkim.pem
chmod 600 dkim.pem
Zuletzt werden noch die Zugriffsrechte korrekt gesetzt, damit der exim4 die Dateien auch nutzen kann. In neueres Versionen darf nur noch für den Eigentümer das Leserecht vorliegen, ansonsten verweigert exim4 die Nutzung der Schlüssel. Für jede Domain werden zwei Dateien erzeugt. Die Datei mit der Endung .private entält den privaten Schlüssel Die Datei mit der Endung .txt enthält den öffentlichen Schlüssel, so wie er im Nameserver hinterlegt werden muss.
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/domains/${lookup{${lc:${domain:$h_from:}}}dsearch{/etc/exim4/domains/}}/mail.private
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
DKIM_SELECTOR = mail
DKIM_CANON = relaxed
DKIM_STRICT=1
Der Wert DKIM_SELECTOR ist für den späteren DNS-Eintrag wichtig, kann aber ziemlich beliebig gewählt werden. Eine Neuerzeugung der Konfiguration sowie ein Neustart des Mailservers schließen diesen Teil ab.
update-exim4.conf
systemctl restart exim4
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