Installation

Für die Validierung nutzen wir das Tool DKIMproxy. Dieses erlaubt es uns, Nachrichten beim Eintreffen auf eine gültige Signatur hin zu überprüfen und ausgehende Nachrichten zu signieren.

Die Installation birgt keine Überraschungen. Aus den Ports installieren wir DKIMproxy mit Hilfe des folgenden Befehls:

# cd /usr/ports/mail/dkimproxy/ && make install clean

Anschliessend finden wir zwei Dateien im Verzeichnis /usr/local/etc/dkimproxy_in.conf.sample und dkimproxy_out.conf.sample. Uns interessieren momentan nur eingehende Nachrichten, daher wechseln wir in das Verzeichnis /usr/local/etc/ und kopieren die Datei dkimproxy_in.conf.sample.

# cp dkimproxy_in.conf.sample dkimproxy_in.conf

Diese Datei beinhaltet bereits eine Beispielkonfiguration, die wir gleich anpassen werden.

Änderungen am jetzigen Ablauf

Wie bereits erwähnt, beschreibt diese Anleitung die Erweiterung des Szenarios, das in meinem Buch beschrieben ist. Der Email-Verlauf ist nach diesem Szenario aktuell daher wie folgt:

  1. Postfix (Port 25)
  2. DSPAM (Port 10025)
  3. Postfix (Port 10026)
  4. Dovecot

Die DKIM-Prüfung müssen wir vor DSPAM integrieren, da DSPAM einen Email-Token in den Body der Email einfügt. Wenn nun die Validierung durchgeführt wird, passt die Signatur nicht mehr zu dessen Body. Der neue Ablauf sieht daher wie folgt aus (achte auf die Ports):

  1. Postfix (Port 25)
  2. DKIMproxy (Port 10025)
  3. DSPAM (Port 10026, vorher 10025) 
  4. Postfix (Port 10027, vorher 10026)
  5. Dovecot

DKIM Proxy konfigurieren

Zunächst konfigurieren wir DKIMproxy, indem wir folgende Zeilen in die dkimproxy_in.conf eintragen, die wir vorhin durch Kopieren der Vorlage erstellt haben:

listen 10.0.0.3:10025
relay 10.0.0.3:10026

Hiermit weisen wir DKIMproxy an auf Port 10025 zu lauschen und die Email an Port 10026 weiterzureichen. Folgende Zeilen müssen wir noch in die /etc/rc.conf eintragen, starten können wir den Proxy allerdings noch nicht, da DSPAM noch läuft und auf Port 10025 lauscht.

dkimproxy_in_enable="YES"

DSPAM-Konfiguration ändern

DSPAM soll neu auf Port 10026 lauschen und geprüfte Nachrichten an Port 10027 weiterreichen. Wir passen daher die folgenden Werte in der Datei /usr/local/etc/dspam.conf an:

(...)
ServerPort   10026
DeliveryPort   10027
(...)

Postfix-Konfiguration anpassen

DKIMproxy wird später über den Filter-Trigger in der Datei /usr/local/etc/postfix/dspam/dspam_filter angesprochen. Diese Datei müssen wir anpassen und anschliessend in der master.cf DKIMproxy als Dienst definieren.

Vorher:

(...)
/./ FILTER dspam-smtp:[10.0.0.3]:10025

Nachher:

(...)
/./ FILTER dkim-in:[10.0.0.3]:10025

Anschliessend führen wir ein postmap auf die dspam_filter aus.

# postmap /usr/local/etc/postfix/dspam/dspam_filter

Nun definieren wir In der master.cf den Dienst, über den DKIMproxy angesprochen wird:

(...)
dkim-in unix   -   -   n   -   10   lmtp
      -o smtp_send_xforward_command=yes
      -o disable_mime_output_conversion=yes
      -o smtp_generic_maps= (...)

Jetzt müssen wir nur noch den Rücknahmeport von Postfix in der master.cf von 10026 auf 10027 ändern:

(...)
10.0.0.3:10027   inet   n   -   n   -   16   smtpd
(...)

Server neustarten und Konfiguration testen

Nun haben wir alle Konfigurationen angepasst und können die einzelnen Dienste neustarten. Da sich belegte Ports ändern müssen wir natürlich auf die Reihenfolge achten.

# /usr/local/etc/rc.d/postfix restart

Jetzt lauscht Postfix auf Port 25 und 10027.

# /usr/local/etc/rc.d/dspam restart

DSPAM nimmt nun Emails auf Port 10026 entgegen und reicht sie an Postfix auf Port 10027 weiter.

# /usr/local/etc/rc.d/dkimproxy_in start

DKIMproxy lauscht jetzt auf Port 10025 und reicht Nachrichten an DSPAM auf Port 10026 weiter.

Aber was passiert nun? Beim Nachrichteneingang prüft DKIMproxy, ob in der Email eine DKIM-Signatur enthalten ist. Diese wird dann überprüft und abhängig vom Ergebnis wird ein Header in die Email eingefügt. Bei einer erfolgreichen DKIM-Validierung steht bspw. folgender Header in der Nachricht, wobei mail.example.com unser Emailserver ist:

Authentication-Results: mail.example.com; dkim=pass header.i=@example.org
X-DKIM-Authentication-Results: pass

Falls der Absender DKIM nicht konfiguriert hat, kannst du jetzt folgenden Header in der Email finden:

Authentication-Results: mail.example.com; 
X-DKIM-Authentication-Results: none

Schlägt die DKIM-Validierung aufgrund einer manipulierten Nachricht fehl, sieht der Header hingegen so aus:

Authentication-Results: mail.example.com; 
X-DKIM-Authentication-Results: fail

In einem weiteren Tutorial schauen wir uns noch an, wie wir ausgehende Nachrichten von DKIMproxy signieren lassen und einen korrekten DNS-Record für die Validierung definieren.