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
Cy97oGMwSPsOQ7RtirwBeLWKQlBwKVkva1Xg5wu
1zSQJMsABBujs2DRg4hqrewRKdeQ/APXEkEShEYad
VCo+dITweAcQKA8SfkrsMgWA8GkSddbOEZPTBN0
rQuoL6ddZ2mVTShPQoBf3UT6gYaob+HkAfrCH5vZ
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.