Sophos UTM und DKIM

DKIM oder auch DomainKeys genannt, ist ein Verfahren um die Authentizität von E-Mails festzustellen. Die grundlegende Funktionsweise ist dabei recht einfach erklärt:

Der sendende Mailserver berechnet einen Hashwert für jede von ihm gesendete Mail und hängt diesen Hash an jede Mail im E-Mail Header an. Der empfangene Mailserver kann die Signatur auswerten und ebenfalls den Hash berechnen. Stimmt der im Mail Header angegebene Hash mit dem berechnetem Hash überein, ist sichergestellt, dass die Mail vom E-Mail Servers des Absenders stammt und nicht verändert wurde.

Damit der Hash nicht einfach während der Übertragung der Mail verändert werden kann, wird der Hash vom sendenden Mailserver verschlüsselt und vom empfangenden Mailserver entschlüsselt. Die Verschlüsslung basiert auf asymmetrischer Verschlüsselung und die erforderlichen Schlüssel können einfach selbst erstellt werden. Eine Zertifizierungsstelle wie bei SSL-Zertifikaten benötigt es dazu nicht.

RSA Schlüssel erstellen

Um DKIM nutzen zu können, wird ein privater Schlüssel und ein öffentlicher Schlüssel benötigt. Der öffentliche Schlüssel wird im DNS als TXT-Record veröffentlicht, der private Schlüssel dient zum signieren der Mail. Die entsprechenden Schlüssel können einfach selbst erzeugt werden. Mit dem Programm OpenSSL lässt sich unter Windows (und Linux) die entsprechenden Schlüssel für DKIM ziemlich einfach erstellen.

Für Windows Betriebssysteme wird zunächst OpenSSL benötigt, welches hier runtergeladen werden kann:

OpenSSL kann auf einem beliebigen Rechner installiert werden. In der Standardinstallation wird es unter “C:\Program Files (x86)\OpenSSL” installiert:

OpenSSL Windows

Nach der Installation, kann eine Eingabeaufforderung (cmd) mit Administrator Rechten gestartet werden. Mit dem folgenden Befehl muss dann zunächst in das Programverzeichnis von OpenSSL gewechselt werden:

cd "C:\Program Files (x86)\OpenSSL\bin"

OpenSSL Windows

Mit dem folgenden Befehl kann jetzt der private Schlüssel erstellt werden:

openssl.exe genrsa -out DKIM_Private_Key.key 2048

OpenSSL Windows

Der öffentliche Schlüssel wird dann mit dem folgenden Befehl erzeugt:

openssl.exe rsa -in DKIM_Private_Key.key -out DKIM_Public_Key.public -pubout -outform PEM

OpenSSL Windows

Im Verzeichnis liegen nun 2 Dateien, der Öffentliche Schlüssel “DKIM_Public_Key.public” und der private Schlüssel mit dem Namen “DKIM_Private_Key.key”:

OpenSSL Windows

Der öffentliche Schlüssel muss nun etwas bearbeitet werden, damit dieser später im DNS veröffentlicht werden kann. Aktuell enthält der Public Key (DKIM_Public_Key.public) mehrere Zeilen:

OpenSSL Windows

Die Zeilen mit “—–BEGIN PUBLIC KEY—–“ und “—–END PUBLIC KEY—–“ werden entfernt:

OpenSSL Windows

Danach werden die Zeilenumbrüche entfernt, der komplette Schlüssel steht nun in einer Zeile:

OpenSSL Windows

Hinweis: Unbedingt darauf achten, dass keine Zeichen des Schlüssels entfernt werden, der Schlüssel ist sonst ungültig.

DNS Eintrag erstellen

Damit DKIM funktioniert, muss ein entsprechender DNS-Eintrag erstellt werden. Es handelt es sich um einen TXT-Eintrag, ähnlich des TXT-Eintrags für SPF.

Der TXT-Record für DKIM wird hier beispielhaft bei dem Hoster Strato gesetzt. Die DNS Einstellungen finden sich im Kundencenter unter dem Punkt “Domainverwaltung”:

DKIM Strato

Hier können für die jeweilige Domain neue TXT-Records angelegt werden:

DKIM Strato

DKIM TXT-Records sind nach dem folgenden Schema aufgebaut:

keyselector._domainkey.domain.tld

Der “Keyselector” ist ein frei wählbarer Name um den DKIM Eintrag zu identifizieren. Es können also mehrere DKIM-Einträge existieren. Der Key Selector wird an eine DKIM signierte Mail im Header angegeben, sodass ein empfangender Mailserver daraus den entsprechenden DNS-Record zusammensetzen und abrufen kann.

Für den Wert werden die folgenden Optionen angegeben:

  • v=DKIM1 (Die genutzte DKIM Version)
  • k=rsa (Angabe des Schlüsseltyps, in diesem Fall “rsa”)
  • p=Öffentlicher Schlüssel (Hier wird der zuvor generierte Öffentliche Schlüssel angegeben.

Bei Strato sieht es dann so aus:

DKIM Strato

Ich habe “dkim1” als Selector gewählt, bei Bedarf kann ich so einfach die Selektoren erhöhen, falls dies nötig sein sollte.

Nachdem der TXT-Eintrag gesetzt wurde, lassen sich die Einstellungen auch direkt überprüfen:

Auf der Webseite kann der Keyselector und die Domain angegeben und geprüft werden:

DKIM Strato

Die Webseite liefert dann den DNS-Eintrag und das Ergebnis. Hier sieht man, dass aus Selector und Domain der entsprechende DNS Eintrag zusammengesetzt wurde:

DKIM Strato

Wenn die Prüfung erfolgreich war, kann die Konfiguration der Sophos UTM beginnen.

Konfiguration Sophos UTM

Die Konfiguration der UTM ist schnell erledigt. Die DKIM-Einstellungen finden sich unter dem Punkt “Email Protection” auf dem Reiter “Erweitert”:

Sophos UTM DKIM

Unter dem Punkt “DomainKeys Identified Mail (DKIM)”, wird nun der private Schlüssel (DKIM_Private_Key.key) eingetragen. Der Schlüssel kann komplett übernommen werden. Es ist nicht nötig Passagen zu entfernen.

Im Feld “Schlüsselselektor” wird nun der zuvor vergebene Selector aus dem DNS Eintrag eingetragen, in diesem Fall also “dkim1”. Es handelt sich hier nicht um die Version (v-Option im DNS-Eintrag“), sondern um den frei wählbaren Namen (Selector).

Im Feld DKIM-Domänen werden die Domänen angegeben, für die der DKIM-Header angefügt werden soll. Gibt es mehrere E-Mail Domänen, können hier auch mehrere Domänen angegeben werden. Bei mehreren Domänen muss der DKIM-DNS Eintrag auch für die weiteren Domänen angelegt werden:

Sophos UTM DKIM

Nachdem die Einstellungen übernommen wurden, kann getestet werden.

Test

Ob die DKIM Konfiguration funktioniert, lässt sich einfach testen indem eine E-Mail an die folgende Adresse verschickt wird:

Sophos UTM DKIM

Der Dienst prüft die SPF und DKIM Einstellungen und informiert über das Resultat.

Sophos UTM DKIM

In diesem Fall wird die Mail über einen Exchange Server versendet, Exchange muss die ausgehenden Mails über die Sophos UTM ins Internet leiten, da die DKIM Signatur erst durch die Sophos UTM angehangen wird.

Hinweis: Exchange Server bietet kein Bordmittel für das Hinzufügen der DKIM Signatur.

Nach kurzer Zeit wird ein Authentication Report zurück gesendet. Der Report enthält dann die Ergebnisse:

Sophos UTM DKIM

Wenn in der Antwortmail “DKIM check pass” angezeigt wird, funktionieren die DKIM Einstellungen.

Etwas weiter unten in der Antwortmail findet sich auch der DKIM Header der Original Mail. Hier sieht man die Signatur, welche durch die UTM angehangen wurde:

Sophos UTM DKIM

Die Antwortmail enthält ebenfalls eine DKIM Signatur, welche im Header sichtbar ist:

Sophos UTM DKIM

14 Gedanken zu „Sophos UTM und DKIM“

  1. Hallo zusammen,
    ich hole diesen Threat mal hoch weil ich dazu eine grundlegende Frage habe. Wie sieht eine Überprüfung auf der Empfängerseite aus? Muss dafür etwas konfiguriert werden? Alle Informationen die ich bisher gefunden haben beziehen sich auf den Sender (Exchange/Sophos, Provider usw.) Nur weil dort DKIM eingerichtet ist und Emails signiert versendet werden, ist dies doch nur die Hälfte des Weges. Was muss ich ggf. in der Sophos/Exchange (oder bei meinem Email-Client Zuhause) konfigurieren damit eine eintreffende Email mit DKIM Signatur auch geprüft wird? Und wie bekomme ich dies mit?
    Kann ich davon ausgehen (wie in diesem Beispiel), dass wenn DKIM in der Sophos korrekt konfiguriert ist (und im DNS) auch eintreffende Emails automatisch überprüft werden?
    Oder habe ich da einen Denkfehler?
    Meine einfache Denke ist: Mail-Server/Sophos sendet DKIM signierte Mails an den Empfänger. Der Empfänger (-Mail-Server) kann nun die Signatur mit Hilfe des DNS überprüfen (TXT Record usw.). Kann, muss er doch aber nicht, oder? Wo ist dies Konfiguriert?
    Der Empfänger kann ja nur überprüfen wenn eine Mail auch DKIM signiert ist. Keine Signatur, keine Überprüfung, oder?
    DKIM ist bei uns auf der Sophos korrekt konfiguriert als auch im DNS. Also versenden wir alle schön Mails mit der Signatur. Ob es etwas bringt, kann ich nicht nachprüfen. Und ich als Empfänger? Ich sitze vor meinem Outlook im Büro und bekomme Emails die mit DKIM signiert sind. Eine Mail, die irgendwie nicht ok ist weil an der Signatur etwas nicht stimmt, habe ich noch nie gesehen. Spam wird in der Sophos mal mehr, mal weniger gut als Spam zurückgehalten. Meist durch RBL’s. Einen Eintrag der irgendwie mit DKIM in Zusammenhang steht kann ich nicht finden.
    Somit befürchte ich, ich habe es grundlegend nicht verstanden.
    Wer kann mich erhellen?
    Gruß
    Frank L.
    (ein seltener Name )

    Antworten
  2. Ich stelle fest, dass Outlook immer mit der Meldung „The digital signature on this message can’t be verified“ um die Ecke kommt. Ist ja auch klar, die UTM stellt die Signaturen in ihrem Namen aus…..gibt es hier einen Ausweg ?

    Antworten
  3. @Chris: Danke für den Hinweis zum splitten des DNS Eintrag.
    Ich habe es nun mit 2048 hin bekommen.
    Der Trick war nun bei SchlundTech einen freien Texteintrag wie folgt einzutragen:
    dkim1._domainkey.domain.de. IN TXT („STRING1“ „STRING2″)
    Die beiden Strings habe ich wie folgt per Powershell aus der public-Datei erzeugt:
    (‚v=DKIM1; k=rsa; p=’+(‚ ‚+(Get-Content .\DKIM_Public_Key.public | Select-Object -Skip 1 | Select-Object -SkipLast 1)).replace(‚ ‚,“)).substring(0,254)
    (‚v=DKIM1; k=rsa; p=’+(‚ ‚+(Get-Content .\DKIM_Public_Key.public | Select-Object -Skip 1 | Select-Object -SkipLast 1)).replace(‚ ‚,“)).substring(254)

    Antworten
    • Hallo Joerg,
      ja, allerdings nutzen viele Provider bereits DKIM für die Smarthosts / Relays. Schau dir den Header einer von dir gesendeten Mail vorher einmal an, ggf. findet sich dort schon die DKIM Signatur des Providers (z.B. Strato).
      Gruß,
      Frank

      Antworten
  4. Als Tipp für diejenigen, die DKIM im im Office365 / Exchange Online nutzen möchten: Microsoft lässt dort leider keine Einträge per TXT-Record, sondern lediglich per CNAME zu. Ihr solltet euch also einen DNS Provider suchen, welcher Unterstriche in Subdomains erlaubt. Bei Strato war dies bei mir nicht der Fall… (Stand: ca. ~Juni 17.)

    Antworten

Schreibe einen Kommentar