CentOS 7 – Postfix – OpenDKIM (DomainKeys Identified Mail)

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.