OpenDKIM mit Postfix

linux postfix spam mailserver mail smtp howto opendkim dkim

Quasi als Erweiterung meines SPF-Artikels geht es diesmal um DKIM (DomainKeys Identified Mail). Ähnlich wie bei SPF geht es auch bei DKIM darum SPAM zu minimieren und E-Mail vertrauenswürdiger zu machen.

E-Mails erhalten bei DKIM eine Signatur mit deren Hilfe der Mailserver des Empfängers prüfen kann ob die Mail von einem offiziellen Mailserver des Absenders stammt. Des weiteren kann der Mailserver so erkennen ob einige Eigenschaften der Mail auf dem Transportweg verändert wurden.

Wie bei SPF sind ein paar DNS-Einstellungen nötig, damit alles korrekt funktioniert, doch zunächst sollten die nötigen Pakete installiert und konfiguriert werden:

apt-get install opendkim opendkim-tools
adduser postfix opendkim

Anschließend wird ”/etc/opendkim.conf” mit folgenden Werten befüllt:

Syslog yes
UMask 002
UserID opendkim
KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList /etc/opendkim/trusted.hosts
InternalHosts /etc/opendkim/trusted.hosts
Canonicalization relaxed/simple
Mode sv
SubDomains no
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
OversignHeaders From

Die Dateirechte sollten noch angepasst werden:

chmod 644 /etc/opendkim.conf

Anschließend werden die Verzeichnisse für die weitere Konfiguration angelegt:

mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Zunächst werden die Namen/IPs, denen OpenDKIM stets vertrauen soll, in der Datei /etc/opendkim/trusted.hosts hinterlegt:

127.0.0.1
::1
localhost
21×9
21×9.org
example
subdomain.example.com
example.com

Nun wird die Datei /etc/opendkim/signing.table erzeugt:

*@21×9.org 21×9
*@example.com example

In der ersten Spalte werden die Mailadressen eingetragen, für die es einen DKIM-Key geben wird. Der Einfachheit halber wurde ein Wildcard-Eintrag gewählt. Die zweite Spalte ist ein Unique-Identifier der nun in der Datei /etc/opendkim/key.table weiter genutzt wird:

21×9 21×9.org:201605:/etc/opendkim/keys/201605_21x9.private
example example.com:YYYYMM:/etc/opendkim/keys/YYYYMM_example.private

Die erste Spalte ist die Referenz auf den entsprechenden Eintrag in die Signing Table. Die zweite Spalte teilt sich auf in den Domainnamen, einen weiteren Identifier (hier bietet sich eine Kombination aus Jahr/Monat an, da der DKIM-Key regelmäßig erneuert werden sollte), der letzte Teil gibt dann den Pfad/Dateinamen zum Key an.

Die Keys werden wie folgt erzeugt:

opendkim-genkey -d 21×9.org -b 2048 -r -s 201605
mv 201605.private /etc/opendkim/keys/201605_21x9.private
mv 201605.txt /etc/opendkim/keys/201605_21x9.txt

Der Vorgang muss für jeden Eintrag in der Signing/Key-Table wiederholt werden. Wenn dies abgeschlossen ist sollten die Dateirechte korrekt gesetzt werden:

chown -R opendkim:opendkim /etc/opendkim
chmod 644 /etc/opendkim/*
chmod 700 /etc/opendkim/keys
chmod 600 /etc/opendkim/keys/*

Nun kann OpenDKIM gestartet werden:

systemctl restart opendkim
systemctl status -l opendkim

Die Informationen aus den erzeugten Keys müssen jetzt ins DNS-System übernommen werden, damit die empfangenden Mailserver diese Werte von dort abholen und prüfen können. Hier werden die von opendkim-genkey erzeugten .txt-Dateien genutzt:

201605._domainkey IN TXT ( “v=DKIM1; k=rsa; s=email; ”
“p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptZyZguv31v+0G3O0DgLJtVzCco8Gxc6rTlQ4cH9UfMbkSa3Z+aL6ctp+KZBKFIVnVMBv5G4ihRfPoAGuvAVBI6deW73VcTvtiHOZE0vXfL/tziQ7LaOxIJMdWt9l4jzV53srm0pCfTv3BLDROlYUX73cTVY1M+IuAQ/xXyPgRk02xgaYljq5QWvqYF2vH8OX5ybVk3062ThF6”
“zUXZt4US/jY0a9Pjtaf/U+rSraA+tubEKdaQDOKV4fiPXXEfUT1Q8BD4WFcaFzqA35oPvXxAQtaZ7WmpdMeHhHA0VxV3J9N2XLdK9XKldBA8FEsjxRwYYZYMIX1ltG7beiZUb7+wIDAQAB” ) ; —– DKIM key 201605 for 21×9.org

Hat man direkten Zugriff auf das Zonefile seiner Domain kann man den obigen Output direkt übernehmen. Die meisten anderen Domainanbieter benötigen ein anderes Format, dieses kann man mittels cat /etc/opendkim/keys/201605_21x9.txt | awk -F'”‘ ‘{print $2}’ | tr -d ‘\n’ erzeugt werden:

v=DKIM1; k=rsa; s=email; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAptZyZguv31v+0G3O0DgLJtVzCco8Gxc6rTlQ4cH9UfMbkSa3Z+aL6ctp+KZBKFIVnVMBv5G4ihRfPoAGuvAVBI6deW73VcTvtiHOZE0vXfL/tziQ7LaOxIJMdWt9l4jzV53srm0pCfTv3BLDROlYUX73cTVY1M+IuAQ/xXyPgRk02xgaYljq5QWvqYF2vH8OX5ybVk3062ThF6zUXZt4US/jY0a9Pjtaf/U+rSraA+tubEKdaQDOKV4fiPXXEfUT1Q8BD4WFcaFzqA35oPvXxAQtaZ7WmpdMeHhHA0VxV3J9N2XLdK9XKldBA8FEsjxRwYYZYMIX1ltG7beiZUb7+wIDAQAB

Wie zu sehen werden hierbei die in Klammern stehenden Werte aus der .txt-Datei hintereinander gestellt. Diesen Wert fügt man nun als TXT-Record in die DNS-Einstellungen der jeweiligen Domain ein. Der Name des Eintrags sollte 201605._domainkey lauten, um die Zuordnung des Eintrags zum entsprechenden Datum zu erleichtern, der Part ._domainkey ist so zwingend nötig.

Optional kann ein weitere TXT-Record mit dem Namen _adsp._domainkey und dem Wert dkim=all erzeugt werden. Dies signalisiert einem empfangenden Mailserver dass Mails von dieser Domain immer DKIM-Signiert sein sollten. Ist dies dann nicht der Fall kann das als ein Indiz für Spam gewertet werden.

Ob alles geklappt hat kann mit dem Befehl opendkim-testkey -d 21×9.org -s 201605 -vvv geprüft werden. Der Output sollte wie folgt aussehen:

opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key ‘201605._domainkey.21×9.org’
opendkim-testkey: key not secure
opendkim-testkey: key OK

Die Meldung key not secure ist in Ordnung, sofern die entsprechende Domain nicht mittels DNSSEC abgesichert ist.

Nun fehlt nur noch die Postfix-Konfiguration. Zunächst ist noch ein weiteres Verzeichnis nötig:

mkdir /var/spool/postfix/opendkim
chown opendkim:postfix /var/spool/postfix/opendkim

In /etc/defaults/opendkim muss noch der Pfad zum Socket gesetzt werden:

SOCKET=”local:/var/spool/postfix/opendkim/opendkim.sock”

Fehlt nur noch die Postfix-Config selbst. An das Ende von /etc/postfix/main.cf wird folgendes eingefügt:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = local:/opendkim/opendkim.sock

Nach einem Neustart von OpenDKIM und Postfix sollte alles funktionieren:

systemctl restart opendkim
systemctl restart postfix

Ob wirklich alles klappt wie gewünscht kann mit dem Service von port25.com unter https://www.port25.com/support/authentication-center/email-verification/ getestet werden.


Comments

Blog Comments powered by Disqus.

Next Post Previous Post