Postfix Mailserver (Icon)

Beim Versuch, die Mails meines Postfix-Mailservers möglichst simpel mit DKIM zu signieren bin ich auf ein schlecht dokumentiertes Feature von OpenDKIM gestoßen.

Da der Mailserver nur für eine Handvoll Domains und ein sehr überschaubares Mailvolumen genutzt wird war es mir wichtig, die Konfiguration möglichst einfach zu gestalten. Daher wollte ich uA. nur einen Schlüssel für das Signieren aller ausgehenden Mails verwalten.

In der opendkim.conf lässt sich dabei mit den Direktiven „Domain *“ und „KeyFile …“ ein Schlüssel für alle Domains zuordnen. Voraussetzung ist natürlich, dass alle Domains denselben „Selector“ verwenden (können).

Auszug aus der Config:

Selector k201903 # Selector für ALLE Domains
Domain   *
KeyFile  /etc/opendkim/keys/k201903.private # Key für ALLE Domains

Hier noch die vollständige Konfiguration incl. dem Einbinden von OpenDKIM in Postfix als Milter…

1. OpenDKIM konfigurieren

Zurerst mal das OpenDKIM-Package aus dem Repo installieren…

yum install opendkim

… und die Konfigurationsdatei /etc/opendkim.conf anpassen (Auszug):

Mode    sv # s = Signing (ausgehend eMails), v = Verify (eingehende eMails)
Socket  inet:8891@localhost # Der OpenDKIM lauscht auf Port 8891, NUR lokal

Selector k201903
Domain   *
KeyFile  /etc/opendkim/keys/k201903.private

Anschließend noch die Liste der TrustedHosts konfigurieren (Achtung, 127.0.0.1 soll in der Liste immer an erster Stelle stehen):

127.0.0.1
::1
mail.server.com # FQDN des Mailservers
mail # Hostname des Mailservers
1.2.3.4 # IP-Adresse des Mailservers

2. Schlüssel erzeugen

Der Schlüssel zum Signieren der Mails muss dem „Selektor“ (in der opendkim.con definiert) entsprechen und kann einfach via opendkim-genkey erstellt werden:

opendkim-genkey -b 2048 -h rsa-sha256 -r -s k201903 -d mail.server.com -v

Im Verzeichnis /etc/opendkim/keys wird dabei der Schlüssel (.private) und eine Textdatei (.txt) mit dem Public Key für den DNS-Eintrag angelegt. Der Public Key aus der Textdatei wird in Schritt 3 benötigt.

Der private Schlüssel darf natürlich nur von OpenDKIM selbst genutzt werden können. Es empfiehlt sich daher, die Berechtigungen entsprechend restriktiv zu setzen:

chown -R opendkim:opendkim /etc/opendkim
chmod go-rwx /etc/opendkim/keys

Anschließend starten wir den Service (neu):

service opendkim restart

3. DKIM DNS-einträge anlegen

Am DNS-Server muss nun für alle Domains ein TXT-Record mit der Bezeichnung „<Selektor>._domainkey“ nach dem folgenden Schema angelegt werden:

v=DKIM1; k=rsa; p=MI[...]QAB

Wobei hier v=DKIM1 (Version) und k=rsa (Key) Standardwerte sind und p= den Public Key enthält. Der Public Key wurde mittels „opendkim-genkey“ (siehe oben) erstellt.

Wenn die DNS-Einträge angelegt wurden können sie mit dem folgenden Befehl auf ihre Richtigkeit geprüft werden:

opendkim-testkey -d <Domain> -s <Selektor> -vvv

4. OpenDKIM in Postfix einbinden

Um OpenDKIM in Postfix einzubinden muss die Milter-Konfiguration in /etc/postfix/main.cf angepasst und der Service neu gestartet werden:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891 # Sind bereits andere Milter im Einsatz, z.B.
non_smtpd_milters = inet:localhost:8891 # ClamAV, dann die Einträge mit Komma trennen