OpenDKIM installieren und einrichten
OpenDKIM ist eine Open-Source-Implementierung von DKIM. Das Programm kann gleichermaßen ausgehende Mails mit einem eigenen Schlüssel signieren als auch die Signatur eintreffender Mails überprüfen. OpenDKIM ist mit diversen MTAs kompatibel. Diese Anleitung zeigt das Zusammenspiel von DKIM mit Postfix, wobei das Hauptaugenmerk des Artikels beim korrekten Signieren liegt. Das Ziel ist es also, Postfix so zu konfigurieren, dass es ausgehende Mails DKIM-konform signiert und so die Wahrscheinlichkeit mindert, dass die Mail vom Empfänger als Spam betrachtet wird.
Zuerst installieren Sie OpenDKIM:
apt-get install opendkim opendkim-tools
Dann richten Sie ein Verzeichnis für die DKIM-Schlüssel ein:
mkdir /etc/opendkim
mkdir /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys
Konfigurationsdatei opendkim.conf
Die zentrale Konfigurationsdatei von OpenDKIM ist /etc/opendkim.conf
. Erstellen Sie opendkim.conf
wie im folgenden Muster. Details zu den Dateien trusted
, key.table
und signing.table
, auf die die Konfiguration verweist, folgen gleich. Einzelheiten zu den diversen opendkim.conf
-Optionen können Sie mit man opendkim.conf
nachlesen.
# Datei /etc/opendkim.conf
# OpenDKIM agiert als Mail Filter (= Milter) in den
# Modi signer (s) und verifier (v) und verwendet eine
# Socket-Datei zur Kommunikation (alternativ: lokaler Port)
Mode sv
# Socket local:/var/run/opendkim/opendkim.sock
Socket inet:12345@localhost
# OpenDKIM verwendet diesen Benutzer bzw.
# diese Gruppe
UserID opendkim:opendkim
UMask 002
PidFile /var/run/opendkim/opendkim.pid
# OpenDKIM bei Problemen neustarten,
# aber max. 10 mal pro Stunde
AutoRestart yes
AutoRestartRate 10/1h
# Logging (wenn alles funktioniert eventuell reduzieren)
Syslog yes
SyslogSuccess yes
LogWhy yes
# Verfahren, wie Header und Body durch
# OpenDKIM verarbeitet werden sollen.
Canonicalization relaxed/simple
# interne Mails (signieren, nicht verifizieren)
InternalHosts refile:/etc/opendkim/trusted
# Hosts, denen vertraut wird (vermeidet Warnungen beim Logging)
ExternalIgnoreList refile:/etc/opendkim/trusted
# welche Verschlüsselungs-Keys sollen für welche
# Domains verwendet werden
# (refile: für Dateien mit regulären Ausdrücke)
SigningTable refile:/etc/opendkim/signing.table
KeyTable /etc/opendkim/key.table
# diesen Signatur-Algorithmus verwenden
SignatureAlgorithm rsa-sha256
# Always oversign From (sign using actual From and a null From to prevent
# malicious signatures header fields (From and/or others) between the signer
# and the verifier. From is oversigned by default in the Debian pacakge
# because it is often the identity key used by reputation systems and thus
# somewhat security sensitive.
OversignHeaders From
/etc/default/opendkim: Bitte beachten Sie, dass unter Debian und Ubuntu beim Start von OpenDKIM auch die Datei
/etc/default/opendkim
ausgewertet wird. Dort durchgeführte Einstellungen haben Vorrang gegenüberopendkim.conf
. Ich gehe in dieser Anleitung davon aus, dass Sie die dort vorgesehenen Defaulteinstellungen durch das Einfügen von Kommentarzeichen deaktivieren. (EinzigRUNDIR
sollten Sie belassen.)
Keine Signatur für interne Mails
Die Datei trusted
gibt an, welchen Hosts der Mail-Server vertraut, d.h., für welche Hosts auf die DKIM-Signatur verzichtet wird. Ersetzen Sie die drei tuxis.de
-Einträge durch entsprechende Einträge mit dem Hostnamen Ihres Mail-Servers!
# Datei /etc/opendkim/trusted 127.0.0.1 ::1 localhost tuxis
tuxis.de
Welcher Schlüssel für welchen Hostnamen?
Als nächstes richten Sie mit einem Editor die Dateien signing.table
und key.table
gemäß dem folgenden Muster ein. signing.table
gibt an, für welche From
-Adressen welcher Schlüssel verwendet werden soll. Die zweite Spalte in signing.table
bezieht sich dabei auf die erste Spalte in key.table
.
# Datei /etc/opendkim/signing.table
# für E-Mails von xxx@tuxis.de
den Schlüssel 'tuxis
' # zum Signieren verwenden *@tuxis.de
tuxis
key.table
gibt dann den tatsächlichen Ort der Schlüsseldateien an. Die zweite Spalte besteht dabei aus drei Teilen: Dem Hostnamen (hier tuxis.de
), dem Selektor (hier 201611
) und dem eigentlichen Dateinamen. Die Verwendung einer Zeitangabe für den Selektor hilft dabei einen Überblick zu behalten, wann die Schlüssel erzeugt wurden — hier also im Nov. 2016.
# Datei /etc/opendkim/key.table
# der Schlüssel 'tuxis
' befindet sich in # des Datei /etc/opendkim/keys/tuxis
.private tuxis
tuxis.de
:201611:/etc/opendkim/keys/tuxis
.private
Wenn Ihr Mail-Server für mehrere Hosts zuständig ist, ergänzen Sie key.table
und signing.table
um entsprechende Einträge für alle weiteren Hosts.
Schlüssel generieren
Das Kommando opendkim-genkey
erzeugt einen privaten Schlüssel (name.private
) und einen öffentlichen Schlüssel (name.txt
). Der private Schlüssel verbleibt am Server und darf nicht in falsche Hände geraten! Der öffentliche Schlüssel wird später im DNS-TXT-Record des Mail-Servers gespeichert. Die wichtigsten Optionen des Kommandos lauten:
-d domain
gibt an, für welche Domain die Schlüssel gelten sollen. Die Option wird aktuell nur dazu verwendet, um einen Kommentar inname.txt
einzubauen. Ohne die Option verwendetopendkim-genkey
die Zeichenketteexample.com
.-
-b 2048
gibt an, dass ein Schlüssel in der Länge von 2048 Bits generiert werden soll. Größere Schlüssel sind momentan mit der gängigen Mail-Server-Infrastruktur inkompatibel. Standardmäßig verwendetopendkim-genkey
1024 Bits, was aber vielfach als nicht mehr als ausreichend sicher erachtet wird. -
-r
gibt an, dass der Schlüssel ausschließlich zur Signatur von E-Mails verwendet werden darf (restricted). -
-s selector
gibt eine Selektor-Zeichenkette an, um das Schlüsselpaar zu identifizieren (standardmäßig:default
). Die Selektor-Zeichenkette bestimmt die Namen der Schlüsseldateien.-s 201611
bewirkt also, dass die Dateien201611.txt
und „201611.private` erzeugt werden. Vorsicht. Eventuell schon vorhandene Schlüsseldateien werden ohne Rückfrage überschrieben.
Um also Schlüssel zu erzeugen, die zum obigen Beispiel passen, führen Sie das folgende Kommando aus:
cd /etc/opendkim
opendkim-genkey -d tuxis.de
-b 2048 -r -s 201611
Die resultierenden Dateien sehen so aus:
cat 201611.private
-----BEGIN RSA PRIVATE KEY-----
totalGeheimBlaBla123
...
-----END RSA PRIVATE KEY-----
cat 201611.txt
201611._domainkey IN TXT (
"v=DKIM1; k=rsa; s=email; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCA...73Qzl5Czna79"
"7955/zX7Bp10e/lATZbVtP6Qu6eC2TMpWx06bEDRZ...oAtNNuhQIDAQAB"
) ; ----- DKIM key 201611 for tuxis.de
Die Dateien müssen nun noch entsprechend der Angaben in key.table
platziert werden. Zuletzt stellen Sie sicher, dass nur der Benutzer opendkim
auf die Dateien und Verzeichnisse zugreifen darf:
cd /etc/opendkim
mv 201611.private keys/tuxis
.private mv 201611.txt keys/tuxis
.txt chown -R opendkim:opendkim /etc/opendkim chmod -R go-rwx /etc/opendkim/keys
DNS-TXT-Eintrag hinzufügen
Der nächste Schritt besteht darin, den öffentlichen Teil der DKIM-Schlüssels, also in der Logik dieses Beispiels den Inhalt von
in einem TXT-Eintrag in der DNS-Konfiguration Ihres Hostnamens zu speichern. Dabei verwenden Sie die Zeichenkette vor dem Schlüsselwort tuxis
.txtIN
für das Feld Hostname des DNS-Eintrags und den gesamten Text zwischen den runden Klammern für das Feld Destination. In der Weboberfläche meines Hosters sieht der Dialog zum Einrichten eines neuen DNS-Eintrags vom Typ TXT
so aus: