DomainKeys ist ein Identifikationsprotokoll zur Sicherstellung der Authentizität von E-Mail-Absendern. Wie genau das funktioniert und weitere Erklärungen kann man z.B. auf Wikipedia nachlesen.
In diesen Tutorial wird die Installation und Konfiguration von OpenDKIM und Postfix unter CentOS 7 beschrieben. Diese Anleitung funktioniert auch unter CentOS 6. Bei anderen Distributionen sollte es aber fast identisch sein.
OpenDKIM Installation
Die Installation von OpenDKIM setzt ein eingebundenes EPEL-Repo voraus. Wenn diese Voraussetzungen geschaffen sind kann man OpenDKIM wie folgt installieren:
yum install opendkim
Anschliessend nehmen wir OpenDKIM in den Autostart auf.
#CentOS 6 chkconfig opendkim on #CentOS 7 systemctl enable opendkim.service
Domain-Key erstellen
Nun müssen wir für jede Domain einen eigenen Domain-Key generieren und OpenDKIM entsprechend konfigurieren. In unserem Beispiel verwenden wir die Domain der-linux-admin.de
export MYDOMAIN=der-linux-admin.de mkdir /etc/opendkim/keys/$MYDOMAIN cd /etc/opendkim/keys/$MYDOMAIN opendkim-genkey -d $MYDOMAIN -s default chown -R opendkim:opendkim /etc/opendkim/keys/$MYDOMAIN echo "default._domainkey.$MYDOMAIN $MYDOMAIN:default:/etc/opendkim/keys/$MYDOMAIN/default.private" >> /etc/opendkim/KeyTable echo "*@$MYDOMAIN default._domainkey.$MYDOMAIN" >> /etc/opendkim/SigningTable
Nun können wir uns den DKIM-KEY für diese Domain anzeigen lassen.
cat /etc/opendkim/keys/$MYDOMAIN/default.txt
Die Ausgabe sollte in etwa wie folgt aussehen:
default._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqqN1PV0SVRxJDroI8sepENY+Z6iH0T4m1cSqnjHOnIQ9beeElpe1zzctpjc9GItgvzi5/jbltb9vBl91BGKhNzaW9qhlbX+dKYWftwdLEFyuNCtEJ12AbYN+dHa48bsPLxSOxXMS2UB0YwcgtOJoERRPl2dvHB5ekR4aZ22qN9QIDAQAB" ) ; ----- DKIM key default for der-linux-admin.de
Diese Angaben verwenden wir um unseren Domain-Key in unseren DNS-Einstellungen zu hinterlegen. Das geschieht in einen TXT-Record im Zone-File unserer Domain und muss, sofern wir keinen eigenen DNS-Server für unserer Domain betreiben, beim Domain Name Registrar erfolgen.
OpenDKIM konfigurieren
In der Konfiguration von OpenDKIM unter /etc/opendkim.conf müssen noch einige Anpassungen vorgenommen werden.
Den Modus von nur verify auf sign und verify ändern.
# Selects operating modes. Valid modes are s (sign) and v (verify). Default is v. # Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing # messages. Mode v
ändern in:
Mode sv
KeyFile deaktivieren.
# Gives the location of a private key to be used for signing ALL messages. This # directive is ignored if KeyTable is enabled. KeyFile /etc/opendkim/keys/default.private
ändern in:
#KeyFile /etc/opendkim/keys/default.private
KeyTable und SigningTable aktivieren.
# Gives the location of a file mapping key names to signing keys. In simple terms, # this tells OpenDKIM where to find your keys. If present, overrides any KeyFile # directive in the configuration file. Requires SigningTable be enabled. #KeyTable /etc/opendkim/KeyTable # Defines a table used to select one or more signatures to apply to a message based # on the address found in the From: header field. In simple terms, this tells # OpenDKIM how to use your keys. Requires KeyTable be enabled. #SigningTable refile:/etc/opendkim/SigningTable
ändern in:
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Danach können wir OpenDKIM neu starten.
#CentOS 6 service opendkim restart #CentOS 7 systemctl restart opendkim.service
Konfiguration von Postfix für OpenDKIM
Der Postfix Konfiguration /etc/postfix/main.cf müssen folgende Zeilen hinzugefügt werden.
# dkim milter smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 milter_default_action = accept
Danach Postfix neu starten.
#CentOS 6 service postfix restart #CentOS 7 systemctl restart postfix.service
Nun können wir mit dem Testen fortfahren.
Testen von OpenDKIM und Postfix
Dazu versenden wir einfach eine E-Mail an einem Empfänger.
echo "TESTMAIL" | mail -s TESTBETREFF <email@domain.tld>
Jetzt sehen wir unter /var/log/maillog das unsere Signatur eingefügt wurde.
Aug 29 21:59:26 servername postfix/cleanup[13209]: B7FFD3BC0DE0: message-id=<20140829215926.B7FFD3BC0DE0@der-linux-admin.de> Aug 29 21:59:26 servername opendkim[13170]: B7FFD3BC0DE0: DKIM-Signature field added (s=default, d=der-linux-admin.de)
In unserer Mail finden wir im E-Mail-Header nun folgende Zeilen.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=der-linux-admin.de; s=default; t=1409349566; bh=Gc0firiYNUPW2Ab17mKLy4V+AsqX/5v8tdtON0wHOR0=; h=Date:To:Subject:From; b=WnuA3KSF7ADq2rbCDtBfMAuP1qhtg09+Vr22X97DL6DoGkk5whnc9L66HBfIjmGr5 ia3ILnIgyIqh2MZojk+yfq7RE9tUzQFqn7QVPSopfy9bAGjvneWfy+eGZP3Xap84lU AsMkaAUz07JwHlFBK61Efqy0eTqhTa3f0QJyH1lY=
Wir haben es geschafft. Alle ausgehenden E-Mails werden nun mit unseren Domain-Key signiert und die Authentizität ist gegeben.
Fazit
Viele Mailserver prüfen bereits auf DomainKeys. Ich kann leider keine genauen Angaben machen, in wie weit das Spam-Scoring bei Gmail oder GMX dadurch beeinflusst wird. Wenn man die Möglichkeit hat DKIM-Signaturen zu verwenden sollen man dies auch tun.
Vorsicht, falsche Einstellungen im DNS-Record können dazu führen das E-Mails als Spam abgewiesen werden.
Es ist zu beachten, dass die Serverlast dadurch auch ein wenig steigt. Es müssen schliesslich alle ausgehenden E-Mails mit einer Signatur versehen werden. Je nach E-Maildurchsatz kann dies auch zu Überraschungen führen :)
Abschliessend noch der Verweis auf die Projektseite von OpenDKIM und Postfix.