2008-07-07: DKIM- und DomainKeys Signaturen unter Debian mit Postfix
Dieser Artikel beschreibt die Installation und Einrichtung von DKIM- und DomainKeys-Signaturen von Emails unter Debian mit Postfix und DKIMproxy.Einleitung
Immer mehr Provider, besonders im Ausland, verwenden ausser Content-Filtern, Black- und Whitelists sowie Spam-Filtern weitere Methoden, um sich vor SPAM zu schützen. Eine Art sind DNS-basierte Authentifizierungs-Methoden. Hierbei wird an Hand von Merkmalen in der Nachricht beim DNS-Server der Absender Domain überprüft, ob diese Email tatsächlich eine legitim versendete Mail für diese Domain ist.Hier gibt es im Groben zwei Ansätze:
- Die Verifizierung der versendeten IP-Adresse (SPF, Microsoft-SenderID)
- Die Verifizierung der Mail an Hand eine speziellen Signatur, deren Public-Key im DNS hinterlegt ist (DKIM, Yahoo! DomainKeys)
Vorbereitung
Zunächst werden die Abhängigkeiten installiert:# apt-get install postfix libssl-dev make autoconf gcc g++ libtool
Hierbei wird der Standard-Mailserver Exim deinstalliert. Danach werden die Perl-Module , installiert, die von DKIMproxy benötigt werden:
# cpan install Crypt::OpenSSL::RSA
# cpan install Mail::DKIM
# cpan install Error
# cpan install Net::Server
Installation DKIMproxy
Nachdem das Paket DKIMproxy heruntergeladen (Download) und extrahiert wurde, überprüft man mit dem Befehl# ./configure --prefix=/usr/local/dkimproxy
die Erfüllung der Perl-Abhängigkeiten. Fehlen Module, kann man diese mit
# cpan install Modulname
nachinstallieren. Sind alle Abhängigkeiten erfüllt, wird das Paket mit
# make install
installiert.
Konfiguration DKIMproxy
Folgende Schritte sind nach der Installation nötig, damit DKIMproxy zuverlässig arbeitet:- Benutzer und Gruppe anlegen:
# groupadd dkimproxy
# useradd -gdkimproxy dkimproxy - Private- und PublicKey erstellen:
# openssl genrsa -out private.key 1024
# openssl rsa -in private.key -pubout -out public.key
# chown dkimproxy private.key && chmod 400 private.key - DNS-Eintrag für die Domain vornehmen. Hierfür ist es notwendig, dass
man einen Namen für den Selector wählt. Dieser name flie$szlig;g in die
Signatur mit ein und wird vom überprüfenden Mailserver verwendet, um den richtigen
Public-Key aus dem DNS zu wählen. Als Beispiel verwende ich hier 'dkim'. Der DNS-Eintrag
sieht wie folgt aus:
dkim._domainkey.example IN TXT "k=rsa; t=s; p=MIGfMA[...]kQIDAQAB"Der Teil hinter p=ist der PublicKey in voller Länge.
# IP/Port auf dem DKIMproxy hört
listen 127.0.0.1:10027
# IP/Port an den DKIMproxy die signierte Mail weitergibt
relay 127.0.0.1:10028
# Domains, für die DKIMproxy signiert
domain example.org
# Signaturen, die durchgeführt werden sollen
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
# Pfad zum Private Key
keyfile /usr/local/dkimproxy/etc/private.key
# Name des Selectors
selector dkim
# Benutzer und Gruppe
user dkimproxy
group dkimproxy
Diese Datei speichert man unter /usr/local/dkimproxy/etc/dkimproxy_out.cnflisten 127.0.0.1:10027
# IP/Port an den DKIMproxy die signierte Mail weitergibt
relay 127.0.0.1:10028
# Domains, für die DKIMproxy signiert
domain example.org
# Signaturen, die durchgeführt werden sollen
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
# Pfad zum Private Key
keyfile /usr/local/dkimproxy/etc/private.key
# Name des Selectors
selector dkim
# Benutzer und Gruppe
user dkimproxy
group dkimproxy
DKIMproxy kann nun gestartet werden:
# /usr/local/dkimproxy/dkimproxy.out \
--conf_file=/usr/local/dkimproxy/etc/dkimproxy_out.cnf \
-daemonize
Konfiguration Postfix
Damit ausgehende Mails nun durch DKIMproxy signiert werden, müssen in der Datei /etc/postfix/master.cf folgende Abschnitte geändert bzw. hinzugefügt werden:
submission inet n - - - - smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=yes
-o content_filter=dksign:[127.0.0.1]:10027
-o receive_override_options=no_address_mappings
-o smtpd_recipient_restrictions=permit_mynetworks,
permit_sasl_authenticated,reject
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=yes
-o content_filter=dksign:[127.0.0.1]:10027
-o receive_override_options=no_address_mappings
-o smtpd_recipient_restrictions=permit_mynetworks,
permit_sasl_authenticated,reject
dksign unix - - n - 10 smtp
-o smtp_send_xforward_command=yes
-o smtp_send_xforward_command=yes
127.0.0.1:10028 inet n - n - 10 smtpd
-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
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Alle Mails, die auf Port 587 eingereicht werden, werden nun durch DKIMproxy
signiert, wenn die Absenderdomain mit der konfigurierten übereinstimmt.
-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
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Test
Um die Signatur zu testen, eignet sich der Versand einer Mail an einen Yahoo- und einen GoogleMail-Account. Bei Yahoo wird der Absender mit einem Schlüssel-Symbol gekennzeichnet, wenn die Signaturprüfung erfolgreich war:
Bei GoogleMail enthält die Quelltext-Ansicht der Empfangenen Nachricht ein zusätzliches Header-Feld "Authentication-Results", das bei erfolgreicher DKIM-Signatur-Prüfung den Eintrag "dkim=pass header.i=@domain.de" enthält. Eine weitere Test-Möglichkeit bieten verschiedene "Reflectors", Email-Adressen, an die man eine DKIM-Signierte Mail versendet und von denen man automatisch eine Antwort mit dem Überprüfungs-Ergebnis erhält. Beispiele für solche Adressen:
- test(AT)dkimtest(DOT)jason(DOT)long(DOT)name
- dkim-test(AT)mtcc(DOT)com
- dktest(AT)exhalus(DOT)net
- dktest(AT)blackops(DOT)org
- sa-test(AT)sendmail(DOT)net
DKIM-Signaturprüfung
Mit DKIMproxy lassen sich auch eingehende Nachrichten auf eine gültige DKIM-Signatur prüfen. Hierzu erstellt man eine Konfigurationsdatei /usr/local/dkimproxy/etc/dkimproxy_in.conf mit folgendem Inhalt:
# IP/Port, auf dem DKIMproxy hört
listen 127.0.0.1:10025
# IP/Port, zu dem DKIMproxy überprüfte Nachrichten weiterleitet
relay 127.0.0.1:10026
Nun startet man DKIMproxy:listen 127.0.0.1:10025
# IP/Port, zu dem DKIMproxy überprüfte Nachrichten weiterleitet
relay 127.0.0.1:10026
# /usr/local/dkimproxy/bin/dkimproxy.in \
--conf_file=/usr/local/dkimproxy/etc/dkimproxy_in.conf \
--daemonize
Auch zur Signaturprüfung bedarf es einiger Anpassungen in der master.cf von postfix:
smtp inet n - n - - smtpd
-o smtpd_proxy_filter=127.0.0.1:10025
-o smtpd_client_connection_count_limit=10
-o smtpd_proxy_filter=127.0.0.1:10025
-o smtpd_client_connection_count_limit=10
127.0.0.1:10026 inet n - n - - smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks
Erklärung: Direkt nach dem Eingang der Nachricht an Port 25 wird die Mail zur Überprüfung an
DKIMproxy an Port 10025 weitergeleitet. Nach der Überprüfung wird die Mail an Port 10026
wieder durch postfix entgegengenommen und weiter verarbeitet.
Ob die Signaturprüfung erfolgreich war, erkennt man an einem zusätzlichen Header-Feld "Authentication-Results",
das den Signaturstatus enthält.
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks
Weiterführende Links
DKIMDomainKeys Library
DKIMproxy
Kommentare
Kommentieren| Bisher keine Kommentare. |
Zurück zu Technik | Mail
Hat Ihnen der Artikel weitergeholfen? Sie wollen sich in irgendeiner Art für die geleistete Hilfe erkenntlich zeigen? Schauen Sie doch einmal auf meiner Amazon-Wunschliste vorbei, ich freue mich immer über eine kleine Sachspende:
Zur Wunschliste






![Validate my RSS feed [Valid RSS]](/img/valid-rss.png)
