DomainKeys / DKIM

Aus Line5 Wiki
Wechseln zu: Navigation, Suche

<adsense>a</adsense>

DomainKeys & DKIM

DomainKeys und DKIM wurden mit dem Ziel der Eindämmung von E-Mail Spam entwickelt. Die entsprechende Technik muss beim Postausgangsserver und DNS-Server der versendenden Seite sowie beim Spamfilter der empfangenden Seite installiert werden. Der Empfänger kann dann feststellen, ob ihm die E-Mail von einem autorisierten E-Mail Server zugestellt wurde, oder möglicherweise gefälscht ist.

Funktionsweise

Der versendete Server signiert die ausgehende E-Mail und schreibt die Signatur in spezielle Tags im Header. Der empfangende Server besorgt sich zur Prüfung der Signatur zunächst den dazugehörigen öffentlichen Schlüssel (Public Key) vom für die Absenderdomain zuständigen DNS-Server und kann anhand dessen die Gültigkeit der Signatur prüfen.

Es ist dabei durchaus möglich, E-Mails von mehreren Absenderdomains mit ein und demselben Zertifikat zu signieren. Jede Absenderdomain benötigt lediglich die entsprechenden TXT DNS-Records im Nameserver.

Einrichtung / Installation unter Postfix

Die Einrichtung von (ausgehenden) DomainKeys mit Postfix besteht aus folgenden Schritten:

1. Installation der DomainKeys/DKIM-Lösung für den MTA, zum Beispiel "DomainKeys filter for Postfix" von Jason Long (http://jason.long.name/dkfilter/). Diese Lösung agiert als eigenständiger Server, der lediglich für die Signierung der E-Mails zuständig ist und per master.cf in die Postfix-Pipe eingebunden wird.

Installation benötigter Module
# apt-get install libmail-dkim-perl
# cpan install Mail::DKIM
Herunterladen, entpacken, installieren
# wget http://surfnet.dl.sourceforge.net/sourceforge/dkimproxy/dkimproxy.tar.gz
# tar -xvf dkimproxy-1.0.1.tar.gz
# cd dkimproxy-1.0.1
# ./configure --prefix=/usr/local/dkimproxy
# make install
# useradd dkim
# cp sample-dkim-init-script.sh /etc/init.d/dkim
Generieren des privaten und des öffentlichen Schlüssels
# cd /usr/local/dkimproxy/etc
# openssl genrsa -out private.key 1024
# openssl rsa -in private.key -pubout -out public.key
Konfigurieren von dkimproxy
# cd /usr/local/dkimproxy/etc
# cp dkimproxy_out.conf.example dkimproxy_out.conf

In der Datei dkimproxy_out.conf müssen folgende Anpassungen vorgenommen werden:

  • domain - Hier muss die Liste der zu signierenden Absenderdomains eingetragen werden (z. B. domain line5.tv,line5.de,line5.eu). Wichtig ist, dass kein Leerzeichen zwischen den Domains steht, sondern nur jeweils ein Komma.
  • Die Zeile "keyfile" soll wie folgt aussehen: keyfile /usr/local/dkimproxy/etc/private.key

Der Rest kann bleiben, wie er ist. DKIMproxy kann nun - für ausgehende E-Mails - gestartet werden:

# /etc/init.d/dkim start-out
Konfigurieren von Postfix

In der Datei <hh>/etc/postfix/master.cf</hh> müssen einige Anpassungen vorgenommen werden:

a)

# Die erste "smtp"-Zeile muss durch eine -o .... Zeile ergänzt werden:
smtp    inet  n    -    n    -    -    smtpd
      -o content_filter=dksign:[127.0.0.1]:10027
# Bitte die Leerzeichen / Tabs vor dem "-o" übernehmen.
# Postfix wird hier angewiesen, E-Mails an DKIMproxy weiterzuleiten.

b)

# Diese Zeilen können weiter unten eingefügt werden, z. B. am Ende:
dksign    unix  -    -    n    -    10   smtp
       -o smtp_send_xforward_command=yes

c)

# Diese Zeilen können nach (b) eingefügt werden:
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
       -o mynetworks=127.0.0.0/8
       -o smtpd_authorized_xforward_hosts=127.0.0.0/8
       -o smtpd_use_tls=no
Hinzufügen der DNS-Records

Dem entsprechenden Nameserver müssen zwei DNS-Records hinzugefügt werden:

selector1._domainkey.line5.tv TXT t=y; o=~; n=http://antispam.yahoo.com/domainkeys
_domainkey.line5.tv TXT k=rsa; t=y; p=MIGfMA...DAQAB

"MIGfMA...DAQAB" muss durch den öffentlichen Schlüssel (Public Key) ersetzt werden. Dieser befindet sich in der Datei /usr/local/dkimproxy/etc/public.key. Der Public Key ist der Abschnitt zwischen den Zeichenfolgen -----BEGIN PUBLIC KEY----- und -----END PUBLIC KEY----- ohne Zeilenumbrüche (diese müssen unbedingt vor Einfügen in den DNS-Record gelöscht werden).

Für die Klassifizierung von eingehenden E-Mails sollte eine Erweiterung des Spamfilters genügen, da lediglich DNS-Abfragen und die Überprüfung von Zertifikaten notwendig sind.

DomainKeys-DNS / DKIM-DNS

Argumente DomainKeys DNS-Eintrag

Hostname: _domainkeys.meinedomain.de

Die Parameter werden durch Semikolon und Leerzeichen voneinander getrennt, z. B.: t=y; o=~

Parameter Erklärung
n Kommentar

n=http://antispam.yahoo.com/domainkeys

o Gibt an, ob alle oder manche (~) E-Mails signiert sind

o=~

t Gibt an, ob die Domain im Testmodus (y) ist

t=y

Argumente DomainKeys Selector-DNS-Eintrag

Hostname: selector1._domainkeys.meinedomain.de ("selector1" ggf. durch anderen Selector ersetzen)

Die Parameter werden durch Semikolon und Leerzeichen voneinander getrennt, z. B. t=y; k=rsa

Parameter Erklärung
k Key-Typ

k=rsa

n Kommentar

n=http://antispam.yahoo.com/domainkeys

p Public Key

p=MIGfMA0GCSqGSIb3DQEBAQUAA4...US+bZNm5cXgAmqb27wzqCTcfDXEb3AwIDAQAB Der Key darf keine Leerzeichen und/oder Zeilenumbrüche enthalten.

t Gibt an, ob die Domain im Testmodus (y) ist

t=y

Weitere Einstellungen: http://dkim.org/specs/rfc4871-dkimbase.html#key-text

Beispiel DNS-Einträge

Mit diesen DNS Records werden die E-Mails von Yahoo akzeptiert ("Dieser Absender wurde mit DomainKeys überprüft").

Record
Inhalt
selector1._domainkey.line5.tv t=y; o=~; n=http://antispam.yahoo.com/domainkeys
_domainkey.line5.tv k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDiNcEarFkyAZOz16d2JVlcwNXoUyUhcUuztka43it+Cq+TY/PLLLVHIe6KqNLd5B66AmXjbdLLfQHU41PWQ/grf8Bgdqn9ZB0+B2qKl7OTqsTVYoSYuV69JJSxUy8ZywJ0ic20B7G1F44US+bZNm5cXgAmqb27wzqCTcfDXEb3AwIDAQAB

DNS Check

Mit diesen Werkzeugen lassen sich die DomainKeys DNS-Einträge prüfen:

Vorsicht: Beide Tools haben eine sehr lange Refresh-Zeit. Try-And-Error kann sich hinziehen...

Links

<adsense>a</adsense>