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…
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
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
DKIM DNS-Einträge anlegen
Am DNS-Server muss nun für alle Domains ein TXT-Record mit der Bezeichnung ”
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
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