Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_amavis_dkim_einsetzen

Postfix AMaViS DKIM einsetzen

DKIM - DomainKeys ist ein Identifikationsprotokoll zur Sicherstellung der Authentizität von E-Mail-Absendern, das von Yahoo entwickelt wurde und seit Ende 2004 in Erprobung ist. Es wurde konzipiert, um bei der Eindämmung von unerwünschter E-Mail wie Spam oder Phishing zu helfen.

Genauere und Detailliertere Informationen können unter folgendem Link nachgelesen werden - DomainKeys.

Voraussetzungen

Als Voraussetzung für den Einsatz von DKIM sind folgende Komponenten erforderlich:

:!: HINWEIS - Wenn die oben genannten Komponenten installiert sind, ist keine zusätzliche Installation von Software mehr nötig!

Konfiguration

:!: DANKSAGUNG - Dieser DokuWiki ist mit außerordentlicher Unterstützung von Michael Nausch entstanden - siehe DokuWiki @ nausch.org!

Schlüsselverzeichnis erstellen

Wie auch in anderen Bereichen, wenn es um Verschlüsselung und Signierung geht z.B. (ssh, gnupg, s_mime) ist es auch logischerweise beim Einsatz von DKIM erforderlich, ein Schlüsselpaar, bestehend aus einem

  • öffentlichen Schlüssel
  • privaten Schlüssel

zu erstellen.

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Vor der eigentlichen Erstellung des Schlüsselpaares, ist es jedoch zwingend erforderlich ein Verzeichnis und ein Unterverzeichnis zu erstellen, in dem AMaViS später den privaten Schlüssel finden kann. Dies könnte z.B. im Verzeichnis

  • /etc/pki/

mit nachfolgenden Befehlen durchgeführt werden:

Erstellung des Verzeichnises /etc/pki/amavis

# mkdir /etc/pki/amavis

Erstellung des Unterverzeichnises /etc/pki/amavis/dkim

# mkdir /etc/pki/amavis/dkim

Schlüssel erstellen

Mit nachfolgendem Befehl wird das Schlüsselpaar jetzt

  • im Verzeichnis /etc/pki/amavis/dkim
  • als key.pem-Datei im PEM-Dateiformat

erstellt:

# amavisd genrsa /etc/pki/amavis/dkim/key.pem
Private RSA key successfully written to file "/etc/pki/amavis/dkim/key.pem" (1024 bits, PEM format)

:!: WICHTIG - Damit AMaViS auf die private Schlüssel-Datei auch Zugriff hat, ist es erforderlich die Besitzrechte wie folgt mit nachfolgendem Befehl anzupassen:

# chown amavis.amavis /etc/pki/amavis/dkim/key.pem

Die Verzeichnisstruktur und deren Inhalt sollte danach in etwa wie folgt aussehen und kann mit nachfolgenden Befehlen angezeigt werden (nur relevanter Ausschnitt):

# ll /etc/pki/
total 44
drwxr-xr-x 3 root root 4096 Jul 17 10:29 amavis
...

# ll /etc/pki/amavis/
total 4
drwxr-xr-x 2 root root 4096 Jul 17 10:41 dkim

# ll /etc/pki/amavis/*
total 4
-rw------- 1 amavis amavis 887 Jul 17 10:41 key.pem

Der Inhalt der privaten Schlüssel-Datei kann mit nachfolgendem Befehl angezeigt werden und sollte in etwa wie folgt aussehen:

# cat /etc/pki/amavis/dkim/key.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDWypzomx/COZmYML/9j/MRNH9Chw652qzbHjM4RdzpeWzainKC
+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq34MgWsDi3h/mFekOqtnIHTZM
16CLtzQUHAEwCUZqouQkDzQUHAEwCUZq2F9qbRFRB4WWJyuCF6GNQLX9jQIDAQAB
AoGAFgSC/R0ZrlE1O3KT26wr4HGfMfSiP874tSVtXrFaqdw2mlhi0KZTv6+dFzAC
5H+YgllJ6Uv97bccY3AFqStc6FMuEnbZBzQUHAEwCUZqMUvln1Hm+pt9nKmc2T1d
4NZFpm9wdghEolGgdQUJtqaKiClSJGAW28qne4TxQ/4s8skCQQDx07HAUveFk7dN
zHdO+LYDyXGW/Z4/Hd/+N1ckI$twIRkl1chNeFAULeSAU+/Gyi8P8TTpIIeCFhao
/R0euJY/AkEA42FJITBi3W8D4i1ifVZUnCFdBUHiZx2wpWNmkFHbMBGSddmLq1SD
o0FkSK2yUUSQr+y2C6ksJ2ULbGyI+imndrRwmd63qPdmvd+84GD5dfsddDfgg7dx
5Kcimm3a1RXTenwsD1lvVM46tmfa83vIKzgM2oI8SnZijjXqOEbMfudf1QJBAIG8
E261XeN8IRoezRA4fsQqoRmL0vME1LI4+d8kZUyS6h8FxhQ2f3lZqS9ys8h8yqzN
guSfl3OAyWCTvWXwyFMCQFb0t7soo/mHoS5EP+Q7/TRyjdzUzRrVZO5sO0HUMyhL
SPfoF9go3M+8jZ2ac/kbs6iUlQT/zS4/T4DVScoPgCs=
-----END RSA PRIVATE KEY-----

:!: WICHTIG - Dieser Schlüssel ist sehr wichtig, da damit der e-Mail-Verkehr signiert wird und muss auf jeden Fall geheim gehalten werden !!!

Einbindung in AMaViS

Der erstellte private Schlüssel muss nun noch mit nachfolgenden Anpassungen der Konfigurationsdatei /etc/amavisd.conf in AMaViS eingebunden werden (nur relevanter Ausschnitt):

...
# Tachtler
# default: $enable_dkim_verification = 1;  # enable DKIM signatures verification
$enable_dkim_verification = 0;  # enable DKIM signatures verification
# Tachtler
# default: $enable_dkim_signing = 1;    # load DKIM signing code, keys defined by dkim_key
$enable_dkim_signing = 0;    # load DKIM signing code, keys defined by dkim_key
# Tachtler
dkim_key('tachtler.net', 'main', '/etc/pki/amavis/dkim/key.pem');
@dkim_signature_options_bysender_maps = (
      { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } }
    );
...

Erklärung:

Variablenname Wert Erklärung
$enable_dkim_signing 1 Aktivieren der DKIM-Signierung
dkim_key 'tachtler.net' Domainname zum DKIM-Schlüssel
'main' Selector der mit der Kennung _domainkey und dem Domainnamen benutzt wird, um über eine TXT-Record Abfrage an den DNS-Server den verwendeten öffentlichen Schlüssel zu erfragen. Hier: main._domainkey.tachtler.net
'/etc/pki/amavis/dkim/key.pem' Privater Schlüssel, mit Pfadangabe und Dateinamen
@dkim_signature_options_bysender_maps '.' Sender abhängige Angabe, auf die die nachfolgenden Parameter angewandt werden sollen. Hier: alle
ttl ⇒ 21*24*3600 TTL (Time To Live)
c ⇒ 'relaxed/simple' Message canonicalization (plain-text; OPTIONAL, Standard ist „simple/simple“).

Um weitere Informationen zu den oben genannten Parameter zu erhalten, können nachfolgende externe Links genutzt werden:

Jetzt ist der richtige Zeitpunkt gekommen, um AMaViS zum ersten mal neu zu starten, was mit folgendem Befehl erfolgen kann:

# service amavisd restart
Shutting down Mail Virus Scanner (amavisd):                [  OK  ]
Starting Mail Virus Scanner (amavisd):                     [  OK  ]

:!: HINWEIS - Zum jetzigen Zeitpunkt, wäre es möglich die „Verifizierung“ von e-Mails bereits zu aktivieren, OHNE selbst bereits e-Mails zu signieren!

Die notwendigen Einstellungen dafür können mit folgender Anpassung der Konfigurationsdatei /etc/amavisd.conf durchgeführt werden (nur relevanter Ausschnitt):

...
$enable_dkim_verification = 1;  # enable DKIM signatures verification
...

DNS-Eintrag

:!: WICHTIG - Um selbst e-Mails signieren zu können, ist es erforderlich, dass der öffentliche Schlüssel via DNS abfragbar ist, was durchaus die Mithilfe des Providers erfordern kann!

Dazu ist es erforderlich erst einmal den öffentlichen Schlüssel mit der Hilfe von AMaViS aus der Schlüsseldatei /etc/pki/amavis/dkim/key.pem zu erhalten, was mit nachfolgendem Befehl erreicht werden kann:

# amavisd showkeys
; key#1, domain tachtler.net, /etc/pki/amavis/dkim/key.pem
main._domainkey.tachtler.net.   3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJR"
  "RxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+ln"
  "Sp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkY"
  "iJw8V1oSoafME1WklQIDAQAB")

Welcher aber in nachfolgender Form in den DNS-Record eingetragen werden muss (ohne „-Zeichen und <leer>-Zeichen):

v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJRRxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+lnSp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkYiJw8V1oSoafME1WklQIDAQAB

Nachfolgende DNS-Einträge müssen zum DNS hinzugefügt werden, um den öffentlichen Schlüssel via DNS abfragbar zu machen (nur relevanter Ausschnitt):

...
main._domainkey.tachtler.net.           IN      TXT     "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJRRxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+lnSp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkYiJw8V1oSoafME1WklQIDAQAB"
...

:!: HINWEIS - Es ist nicht erforderlich, dass die neue Sub-Domain - main._domainkey.tachtler.net auf eine gültige IP-Adresse auflöst, noch irgendwelche MX-Einträge besitzt!

:!: WICHTIG - Nach dieser Änderung am DNS, ist ein restart des jeweiligen DNS-Servers notwendig!

Zum testen, ob AMaViS den öffentlichen Schlüssel richtig erreichen und abfragen kann, sind z.B. nachfolgende Befehle hilfreich:

AMaViS-Test

# amavisd testkeys
TESTING#1: main._domainkey.tachtler.net      => pass

DNS-Abfrage (beim eigenen DNS-Server)

# dig main._domainkey.tachtler.net TXT

; <<>> DiG 9.3.4-P1 <<>> main._domainkey.tachtler.net TXT
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7422
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;main._domainkey.tachtler.net.  IN      TXT

;; ANSWER SECTION:
main._domainkey.tachtler.net. 86400 IN  TXT     "v=DKIM1\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJRRxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+lnSp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkYiJw8V1oSoafME1WklQIDAQAB"

;; AUTHORITY SECTION:
tachtler.net.           86400   IN      NS      ns.tachtler.net.

;; ADDITIONAL SECTION:
ns.tachtler.net.        86400   IN      A       192.168.0.1

;; Query time: 6 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Fri Jul 17 11:57:07 2009
;; MSG SIZE  rcvd: 319

DNS-Abfrage (beim fremder DNS-Server)

$ dig @62.146.28.82 main._domainkey.tachtler.net TXT

; <<>> DiG 9.2.4 <<>> @62.146.28.82 main._domainkey.tachtler.net TXT
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31744
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;main._domainkey.tachtler.net.  IN      TXT

;; ANSWER SECTION:
main._domainkey.tachtler.net. 1048576 IN TXT    "v=DKIM1\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJRRxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+lnSp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkYiJw8V1oSoafME1WklQIDAQAB"

;; Query time: 6 msec
;; SERVER: 62.146.28.82#53(62.146.28.82)
;; WHEN: Fri Jul 17 12:04:36 2009
;; MSG SIZE  rcvd: 286

DKIM aktivieren

Jetzt ist der Zeitpunkt für die Aktivierung von DKIM mit AMaViS gekommen.

Folgende abschließende Anpassungen müssen an der Konfigurationsdatei /etc/amavisd.conf vorgenommen werden (nur relevanter Ausschnitt):

...
$enable_dkim_verification = 1;  # enable DKIM signatures verification
$enable_dkim_signing = 1;    # load DKIM signing code, keys defined by dkim_key
# Tachtler
dkim_key('tachtler.net', 'main', '/etc/pki/amavis/dkim/key.pem');
@dkim_signature_options_bysender_maps = (
      { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } }
    );
...

Abschließend ist AMaViS zum zweiten mal neu zu starten, was wie schon erwähnt mit folgendem Befehl erfolgen kann:

# service amavisd restart
Shutting down Mail Virus Scanner (amavisd):                [  OK  ]
Starting Mail Virus Scanner (amavisd):                     [  OK  ]

Konfiguration DKIM

Received-Zeilen ausnehmen

Laut RFC 4871 können auch die

  • Received: from-Zeilen

zur Signierung der e-Mail mit herangezogen werden.

Dies hat jedoch den Nachteil, dass bei einer Veränderung der Received: from-Zeilen im Nachhinein, wie es z.B. bei der Einlieferung durch Postfix via smtpd_proxy_filter (Pre-Queue) bei AMaViS der Fall sein könnte, die DKIM-Sigantur sprichwörtlich „kaputt“ geht. Siehe nachfolgenden Auszug aus den Header-Zeilen (nur relevanter Ausschnitt):

...
Authentication-Results: viruswall.dmz.tachtler.net (amavisd-new);
	dkim=fail (1024-bit key) reason="fail (message has been altered)"
	header.d=tachtler.net
...

Dies kann durch hinzufügen von nachfolgender Konfigurationszeile in die

  • /etc/amavisd.conf
$signed_header_fields{'received'} = 0;  # turn off signing of Received

verhindert werden, indem die Received: from-Zeilen nicht mehr mit in die Berechnung der DKIM-Signatur mit einfließen.

Test DKIM

AMaViS-Test

Mit nachfolgendem Befehl, kann eine Test des Gültigkeit der DKIM-Signatur unter Zuhilfenahme von AMaViS durchgeführt werden:

# amavisd testkeys
TESTING#1: main._domainkey.tachtler.net      => pass

DNS-Test

Mit nachfolgenden Befehlen, kann eine entsprechende DNS-Abfrage durchgeführt werden, um zu testen, ob der entsprechende Schlüssel im DNS korrekt eingebunden ist:

# host -t TXT main._domainkey.tachtler.net
main._domainkey.tachtler.net descriptive text "v=DKIM1\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJRRxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+lnSp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkYiJw8V1oSoafME1WklQIDAQAB"

oder

# dig @8.8.8.8 main._domainkey.tachtler.net TXT

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> @8.8.8.8 main._domainkey.tachtler.net TXT
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51364
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;main._domainkey.tachtler.net.  IN      TXT

;; ANSWER SECTION:
main._domainkey.tachtler.net. 21599 IN  TXT     "v=DKIM1\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCW697RxGpSmHUxXFMgirRcDKJRRxoDuuIxlH/69QsHeee+hBC0Uwg72tcQ8dkmQfJwpcHAIt8nP/0VQnRc2uyRr+lnSp89Diahd3frfgnPnyKjhoNglJNlsinEksKnsQ40G6rki1kH3Sf0mq+Hn0RYozkYiJw8V1oSoafME1WklQIDAQAB"

;; Query time: 118 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Mar  9 08:48:07 2014
;; MSG SIZE  rcvd: 286

* Anfrage z.B. an den Google DNS-Servers !

e-Mail

Folgender Text-Auszug sollte nun beim e-Mail-Verkehr im Quelltext im Header einer e-Mail erscheinen (nur relevanter Ausschnitt):

...
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tachtler.net; h=
	user-agent:content-transfer-encoding:content-disposition
	:content-type:content-type:mime-version:subject:subject:from
	:from:date:date:message-id:received:received:received; s=main;
	 t=1247825666; x=1249640066; bh=zkfBNgBkKqRSYHugI+0qnNCPdrpy1OCX
	05xaRMuDqHM=; b=k6+oUVv686bTSWNp+3MDpJRKWzf9oEipgx6z8TGgG/KlET0X
	NiydYWN+PMJSEobjAPta9GpUvG5k+VCLyT26mrk5/I9ApBHGQpmdb0cB/j6kXqAA
	KenY0BIV4rLgWIjqkdCFeW40IgxNj3ur5WNxHPxJWGdpLGtP+SPJYBRM/EM=
...

Der empfangende Mailserver ist mit Hilfe des Authentication-Results:-Header in der Lage festzustellen, ob die eMail unverändert angekommen und somit nicht manipuliert wurde:

Authentication-Results: viruswall.dmz.tachtler.net (amavisd-new);
	dkim=pass (4096-bit key) header.d=nausch.org

Wurde die Nachricht hingegen verändert, so schlägt die Überprüfung fehl:

Authentication-Results: viruswall.dmz.tachtler.net (amavisd-new);
	dkim=fail (1024-bit key) reason="fail (message has been altered)"
	header.d=tachtler.net
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/postfix_amavis_dkim_einsetzen.txt · Zuletzt geändert: 2014/03/14 09:10 von klaus