DKIM für den Mailversand einrichten

DKIM aka Domain Keys Identified Mail

Bei DKIM werden aus Teilen der Mailheader Signaturen gebildet. Der private Schlüssel zum Signieren liegt dabei auf dem absendenden Mailserver, und der empfangende Mailserver holt sich den öffentlichen Schlüssel aus dem für die Absenderdomain verantwortlichen DNS-Server. Damit kann der absendende Mailserver bestätigen, dass er der richtige Mailserver ist und für das Versenden der Mail auch zuständig ist. Anders als bei Verfahren wie S/Mime, PGP oder GPG muss im Mailclient nichts konfiguriert werden, denn jegliche Verarbeitung findet am Mailserver statt. Im Gegenzug kann DKIM den Absender einer Mail nicht sicher belegen.

OK, wir brauchen nun noch ein bisschen Software. Als Paket nutzen wir dkimproxy. Je nach Distribution gibt es verschiedene Installationswege. Ein apt-get install dkimproxy könnte schon die Lösung sein. Nach der Installation passen wir die Konfiguration an, nur die für ausgehenden Verkehr. Hier liegt die in /etc/dkimproxy/dkimproxy_out.conf

listen    127.0.0.1:10027
relay     127.0.0.1:10028
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
selector  selector1

In /etc/default/dkimproxy musste ich auch Anpassungen machen.

RUN_DKIMPROXY_OUT=1
RUN_DKIMPROXY_IN=0
DKIMPROXY_OUT_CONF=“/etc/dkimproxy/dkimproxy_out.conf“
DKIMPROXY_OUT_PRIVKEY=“/etc/postfix/dkim/private.key“
DOMAIN=domain1.de, domain2.de

Damit ist der DKIM-Proxy erst mal konfiguriert. Jetzt brauchen wir die Schlüssel und die Einträge im DNS.

Erzeugen der Schlüssel

Zum Schlüsselerzeugen nutzen wir openssl.

openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key

Den Private Key kopieren wir nach /etc/postfix/dkim/

Der öffentliche Schlüssel sieht irgendwie so aus

—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ
Cy97oGMwSPsOQ7RtirwBeLWKQl
BwKVkva1Xg5wu
1zSQJMsABBujs2DRg4hqrewRKdeQ/APXEkEShEYad
VCo+dITweA
cQKA8SfkrsMgWA8GkSddbOEZPTBN0
rQuoL6ddZ2mVTShPQoBf3UT6gYaob+HkAfr
CH5vZ
T7AIhOE0v8jEQIDAQAB

—–END PUBLIC KEY—–

Wir entfernen Header und Footer, und die Zeilenumbrüche.

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy97oGMwSPsOQ7RtirwBeLWKQlBwKVkva1Xg5wu1zSQJMsABBujs2DRg4hqrewRKdeQ/APXEkEShEYadVCo+dITweAcQKA8SfkrsMgWA8GkSddbOEZPTBN0rQuoL6ddZ2mVTShPQoBf3UT6gYaob+HkAfrCH5vZT7AIhOE0v8jEQIDAQAB

In den DNS packen wir (in einer Zeile!)

selector1._domainkey IN TXT „k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy97oGMwSPsOQ7RtirwBeLWKQlBwKVkva1Xg5wu1zSQJMsABBujs2DRg4hqrewRKdeQ/APXEkEShEYadVCo+dITweAcQKA8SfkrsMgWA8GkSddbOEZPTBN0rQuoL6ddZ2mVTShPQoBf3UT6gYaob+HkAfrCH5vZT7AIhOE0v8jEQIDAQAB“

Nun müssen wir nur noch dem Postfix erklären, den DKIMPROXY auch zu nutzen.

Konfiguration des Postfix

In der Master ändern wir dazu die Zeile aus unserer Amavis-Konfiguration.

127.0.0.1:10025 inet…

und packen ein -o content_filter=dksign:[127.0.0.1]:10027 mit rein.

127.0.0.1:10025 inet    n       –       –       –       –       smtpd
        -o content_filter=dksign:[127.0.0.1]:10027
        -o local_recipient…

Außerdem fügen wir am Ende hinzu

dksign  unix    –       –       n       –       10      smtp
        -o smtp_send_xforward_command=yes
        -o smtp_discard_ehlo_keywords=8bitmime,starttls

 

127.0.0.1:10028 inet    n       –       n       –       10      smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject

Wir suchen uns die Zeile

pickup    fifo  n       –       –       60      1       pickup

und erweitern die auf

pickup    fifo  n       –       –       60      1       pickup
        -o content_filter=dksign:[127.0.0.1]:10027

 

Was passiert jetzt? Der AmavisD wird beim Virencheck die Mail an den Postfix auf Port 10025 zurückgeben. Der gibt sie weiter auf Port 10027, und dort lauscht unser DKIM. DKIM macht seinen Voodoo, wenn er sich zuständig fühlt für die Absenderdomain. Das Resultat gibt er an Postfix auf Port 10028 zurück.

Wer Amavis nicht einsetzen will, macht trotzdem alles wie beschrieben, mit einer Ausnahme:

smtp      inet  n       –       –       –       –       smtpd
        -o content_filter=dksign:[127.0.0.1]:10027

Hurra, wir haben DKIM für ausgehende Mails. Man könnte auch eingehende Mails prüfen, aber das soll hier aktuell nicht unser Thema sein.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.