Domainkeys (DKIM) mit exim

In drei Schritten werden ausgehende E-Mails automatisch von exim signiert.

DKIM: Ausgangssituation

  • OS: FreeBSD 9.0-STABLE, bzw. 8.2-RELEASE-p5 (amd64)
  • MTA: exim 4.77 (mysql)
  • Nameserver: BIND 9.8.1-P1
  • SSL: 0.9.8q 2 Dec 2010

Voraussetzungen für die Konfiguration sind Zugriff auf die exim-Konfiguration und auf die Zone der Domain.

DKIM: Zertifikat erstellen

Werden die folgenden beiden Befehle ausgeführt

  1. openssl genrsa -out dkim.private.key 768
  2. openssl rsa -in dkim.private.key -out dkim.public.key -pubout -outform PEM

werden zwei Dateien erstellt. Der private RSA Schlüssel in der Datei dkim.private.key und der öffentlich RSA Schlüssel in der Datei dkim.public.key.

DKIM: exim Konfiguration

Im Abschnitt Transport-Konfiguration in der Datei configure sollte remote_smtp definiert sein. Unter driver = smtp wird die DKIM-Konfiguration erstellt:

  1. remote_smtp:
  2. driver = smtp
  3. dkim_domain = example.com
  4. dkim_selector = x
  5. dkim_private_key = dkim.private.key
  6. dkim_canon = relaxed

Die dkim-Optionen müssen unter der driver-Option stehen.

Der DKIM Selector x wird im nächsten Schritt für die Nameserver Konfiguration verwendet. Für dkim_canon siehe Abschnitt 3.4 Canonicalization in RFC 4871.

DKIM: Bind Konfiguration

Für die bisher beschriebene Konfiguration werden zwei Zeilen im Zonefile ergänzt:

  1. _domainkey.example.com. IN TXT "t=y; o=~;"
  2. x._domainkey.example.com. IN TXT "v=DKIM1; t=y; k=rsa; p=<public key>"

<public key> ist ein Platzhalter für den Inhalt der Datei dkim.public.key. Aus dem kompletten Inhalt, der z.B. so aussehen kann

  1. -----BEGIN PUBLIC KEY-----
  2. MHwwDQYJKoZIhvcNAQEBBQADawAwaAJhAK7uSvR8LJZX2cV8hBfaPIbWKDJi3u04
  3. cUT+Or9vipXD9F0sviSoI/sjGQ9bhxG/Usb/CgJFF9NZMkJ6COHtugr8iXBhXDV0
  4. 9mZEQKTp7zIKP4bEio8bMeeaNMzlKij/hwIDAQAB
  5. -----END PUBLIC KEY-----

werden nur die drei Zeilen zwischen -----BEGIN PUBLIC KEY----- und -----END PUBLIC KEY----- benötigt. Außerdem sollten die Zeilenumbrüche entfernt werden.

Nach laden der neuen Konfigurationen von BIND und exim sollten ausgehende E-Mails für die Domain example.com automatisch signiert werden.

DKIM: Testen

Z.B. eine E-Mail zu der eigenen gmail Adresse senden und sich den Quelltext der Datei ansehen. Folgende Zeilen sollten zu finden sein:

  1. Received-SPF: pass (google.com: best guess record for domain of mail@example.com designates 192.168.0.2 as permitted sender) client-ip=192.168.0.2;
  2. Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of mail@example.com designates 192.168.0.2 as permitted sender) smtp.mail=mail@example.com; dkim=neutral header.i=@example.com
  3. DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=example.com; s=x;

Kommentare

Sehr gute Anleitung! Beim Aufsetzten des DKIM für EXIM sind mir noch ein paar Pitfalls aufgefallen, z.B. Schlüsselstärke auf 1024 setzten anstatt nur 768 oder für das Keyfile einen absoluten Pfad anzugeben.

Danke für den Hinweis!
Sobald es meine Zeit erlaubt, werde ich den Artikel überarbeiten.