Tech

DKIM – Ein Baustein im Kampf gegen Spam mit gefälschten Absenderadressen

30. Aug 2017

DKIM (DomainKeys Identified Mail, RFC6376) geht auf eine Entwicklung von Yahoo aus dem Jahre 2004 zurück. Es handelt sich dabei um ein Protokoll zur Sicherstellung der Authentizität von Absendern in E-Mails. Der Standard dient also der Eindämmung von unerwünschten E-Mails wie Spam oderPhishing, welche grösstenteils mit gefälschtem Absender in den elektronischen Postfächern landen.

Der DKIM-Standard

DKIM basiert auf asymmetrischerVerschlüsselung. E-Mails werden um eine digitale Signatur ergänzt, welche empfangende E-Mail Server anhand eines öffentlichen Schlüssels verifizieren können. Der öffentliche Schlüssel wird dafür im DNS mittels TXT-Record zur Verfügung gestellt. Schlägt die Verifikation beim empfangenden E-Mail Server fehl, hat dieser die Möglichkeit die E-Mail abzuweisen oder entsprechend als Spam zu klassifizieren. Umgekehrt werden zudem bei vielen der grossen E-Mail Dienstleister wie Google oder Microsoft (Office 365) E-Mails mit einer gültigen Signatur seltener als Spam klassifiziert. DKIM kann also auch die Zustellsicherheit von E-Mails erhöhen.

Signieren von E-Mails am Beispiel von Postfix und OpenDKIM

Das Kernelement von DKIM sind die den E-Mails hinzugefügten Signaturen. Im folgenden Abschnitt stellen wir eine einfache Konfiguration der dafür benötigen Komponenten vor.

DISCLAIMER: Zum sicheren Betrieb eines E-Mail Servers ist eine Konfiguration nötig, welche den Umfang dieses Blogeintrags deutlich sprengen würde. Die gezeigte Konfiguration dient einzig zur Veranschaulichung des Prinzips und sollte keinesfalls ungeändert in die Praxis übernommen werden.

Wie im Ablaufdiagramm ersichtlich, geschieht die Signierung der E-Mails auf dem Mailserver des Absenders. Als Basis in diesem Konfigurationsbeispiel dient uns ein Ubuntu Server in der Version 16.04. Weiter gehen wir davon aus, dass der E-Mail Server direkt mit einer öffentlich erreichbaren IP-Adresse im Internet steht.

Konfiguration Postfix

Als erstes Installieren wir Postfix. Das DEBIAN_FRONTEND=non-interactive dient dazu, den automatischen Konfigurationsdialog zu unterdrücken.

sudo DEBIAN_FRONTEND=non-interactive apt-get install postfix

Nun konfigurieren wir Postfix so, dass es Mails von unserem Client entgegennimmt und weiterschickt:

sudo postconf smtpd_recipient_restrictions=permit_mynetworks,reject
sudo postconf smtpd_relay_restrictions=permit_mynetworks,reject
# In unserem Beispiel erlauben wir das Versenden von E-Mails den Clients aus dem Netz 192.0.2.0/24
sudo postconf mynetworks=192.0.2.0/24
sudo postfix reload

Ab diesem Zeitpunkt können Clients aus dem Subnetz 192.0.2.0/24 Mails mittels SMTP über den Server verschicken.

Konfiguration OpenDKIM

Als nächstes folgt die Installation von OpenDKIM

sudo apt-get install opendkim
sudo install -d -o opendkim -g opendkim -m 0750 /etc/opendkim/keys

Ist OpenDKIM installiert, müssen einige Konfigurationsoptionen angepasst werden. Dies geschieht in der Datei /etc/opendkim.conf:

# OpenDKIM wird in diesem Setup nur zum Signieren verwendet
Mode s
# Definition, welche Absender DKIM signierte Mails verschicken dürfen
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
# Definition der Schlüssel
KeyTable refile:/etc/opendkim/KeyTable
# Zuordnung Schlüssel zu Absenderdomains
SigningTable refile:/etc/opendkim/SigningTable

Die in der Konfiguration verlinkten Dateien müssen nun natürlich ebenfalls erstellt und befüllt werden:
/etc/opendkim/TrustedHosts:

# Wir definieren hier das selbe Netz wie für Postfix
192.0.2.0/24

/etc/opendkim/KeyTable:

default-key %:default:/etc/opendkim/keys/default.private

/etc/opendkim/SigningTable:

*@example.net default-key

Zum Abschluss der Konfiguration generieren wir noch den in der KeyTable referenzierten Schlüssel:

sudo -u opendkim opendkim-genkey -D /etc/opendkim/keys/ -d default-key -s default -b 2048
  • -d definiert den Schlüsselnamen.
  • -s definiert den Selektor. Unter dem Selektor wird später der Schlüssel im DNS abgelegt.
  • -b definiert die Schlüssellänge in Bits.

Damit die Konfiguration aktiv wird, müssen wir OpenDKIM nun noch neustarten

sudo systemctl restart opendkim.service

Einbinden von OpenDKIM in Postfix

Nun da beide Komponenten eingerichtet sind, müssen sie noch miteinander verknüpft werden. Postfix wird so konfiguriert, dass alle Mails vor dem Senden an OpenDKIM zum Signieren übergeben werden. Dies geschieht über das milter Interface:

sudo postconf smtpd_milters=inet:127.0.0.1:8891
sudo postconf non_smtpd_milters=inet:127.0.0.1:8891
sudo postfix reload

Testen des neuen Setups

Ab nun sollten alle E-Mails, welche mit der Absender-Domain example.net über diesen Server versendet werden, mit einer Signatur versehen sein. Die Signatur wird als Header in das E-Mail eingefügt und sieht wie folgt aus:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=example.net;
    s=default; t=1504018341;
    bh=g3zLYH4xKxcPrHOD18z9YfpQcnk/GaJedfustWU5uGs=;
    h=From:Subject:To:Date:From;
    b=PS9GNwiaaRVDtlLU+AQgAuwKIuPe5sE+zDuxUHXiZlZtVrW5vrC64GuZ3XnjvWECS
     2lXqt6XZlbj5JjEGMyQNydpBG5pyRdGQJf8up+tXRwLu3FxDew/cVgg90TaeXYVL/y
     xCzbmtIaHYUd/Bw3svd85ZS8PnMw0GHQkSm1XUL9EfBnW1ouRE6ro9N6gX1Z2P4jcS
     RvL1gSe/q5upbqzzrQc7WHmfMMCb3F09wlx3BqrsaN72k6l1KdfwToBwkgPpGZRlkH
     o7X0SFc//FT69spvxiZurgxw8Gag/DiEdke6tYoRwX550QCd+p72lhuRlFPdK2+RgT
     DfNJ1tEPq8NOA==

Neben der kryptographischen Checksumme, enthält die Signatur auch folgende Information:

  • d Absender Domain
  • s Schlüssel Selektor

Anhand dieser Informationen kann der E-Mail Server des Empfängers den korrekten öffentlichen Schlüssel zur Verifikation der Signatur aus dem DNS abrufen. Dazu müssen wir natürlich den öffentlichen Schlüssel im DNS unserer Absender-Domain example.net publizieren. Der nötige DNS-Eintrag wurde bei der Erstellung des Schlüssels in die Datei /etc/opendkim/keys/default.txt geschrieben und sieht folgendermassen aus:

default._domainkey  IN  TXT (
"v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwxRzzyY7okZbT8CzR4pCW+MCugptW43NDzSm5jDc9PAlTQL9MGSeZ9K8Q2CUcnVDUU5MO9Ptn7J06JqlfOisj44bCzgI8fbLHmXZm3oaHD1SPJvDu+w9CfphvT4jjfRsMpR/C+FzjtlzEFGI8OXAJWUlarLsC6ZjEPUW0aj9R6uE0AjGZKsWWHIhIpJ5UWhRSarjsqV8/zzZoT" "SjvXRVjXbIyPdPXTjClyZupjylNzf7NRFg03Bs2a46+J46KGKBv1YQWc7Y7qdk6gTD80qg6L56hYpegcyZFIZQYmmNoww2rpH7XhZU0oQaHAyZmw+eZCKVWJEMI7ESiWxy/gkzwQIDAQAB"
)

Weiterführende Informationen

Dieser Blogeintrag kann nur einen kleinen Einblick in die Welt von DKIM geben. Weiterführende Informationen zum Thema findet man auf der offiziellen Webseite zum Standard: (Englisch).
Selbstverständlich stehen auch die VSHNeers gerne bei Fragen rund um das Thema zur Verfügung.

andre.keller

Kontaktiere uns

Unser Expertenteam steht für dich bereit. Im Notfall auch 24/7.

Kontakt