DKIM mit OpenDKIM und Postfix auf CentOS

DKIM für Domain Keys Identified Mail

DKIM fügt den Mails eine eindeutige Signatur hinzu, die sich der Domain zuordnet und für alle Nachrichten benutzt wird die versendet werden. Dies hilft dem Internet Service Provider (ISP) bei der Kontrolle der Authentizität der E-Mails und garantiert für die Integrität der Nachrichten.

Ursprünglich sollte das Verfahren DomainKeys Identified Mail nur die Spam-Flut eindämmen. Doch da es gefälschte Absenderadressen entdeckt, hilft es besser gegen Phishing.

OpenDKIM ist die Open-Source Technologie unter Linux für digitale E-Mail-Signatur und Verifikation, die bereits von namhaften E-Mail-Anbieter unterstützt wird.

In diesem Artikel wird beschrieben wie OpenDKIM auf CentOS 5/6/7 integriert und konfiguriert wird.

Das EPEL-Repository wird zur Installation benötigt, falls dieses nicht schon auf dem System integriert ist, wird folgendes vorgehen ausgeführt.

CentOS 5.x Extras Repository
wget -P /tmp https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm
sudo rpm -Uvh /tmp/epel-release-5*.rpm

CentOS 6.x Extras Repository
wget -P /tmp https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
sudo rpm -Uvh /tmp/epel-release-6*.rpm

CentOS 7.x Extra Repository
yum -y install epel-release

Nun kann OpenDKIM auf dem Server installiert werden.

yum -y install opendkim

Nach dem OpenDKIM installiert ist, wird die Hauptkonfiguration erstellt. Dabei wird die original Datei opendkim.conf vor dem editieren erst kopiert.

cp /etc/opendkim.conf /etc/opendkim.conf.orig
vi /etc/opendkim.conf

AutoRestart             Yes
AutoRestartRate         10/1h
LogWhy                  Yes
Syslog                  Yes
SyslogSuccess           Yes
Mode                    sv
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
SignatureAlgorithm      rsa-sha256
Socket                  inet:8899@localhost
PidFile                 /var/run/opendkim/opendkim.pid
UMask                   022
UserID                  opendkim:opendkim
TemporaryDirectory      /var/tmp

Nun werden die Verzeichnisse und ein DomainKey für die Beispiel Domain maildomain.ch durch die folgenden vier Eingaben generiert.

mkdir /etc/opendkim/keys/maildomain.ch
opendkim-genkey -D /etc/opendkim/keys/maildomain.ch/ -d maildomain.ch -s maildomain
chown -R opendkim: /etc/opendkim/keys/maildomain.ch
mv /etc/opendkim/keys/maildomain.ch/maildomain.private /etc/opendkim/keys/maildomain.ch/maildomain

Den DomainKey zur maildomain.ch hinzufügen.
vi /etc/opendkim/KeyTable

maildomain._domainkey.maildomain.ch maildomain.ch:maildomain:/etc/opendkim/keys/maildomain.ch/maildomain

DomainKey zur Unterzeichnung eintragen.
vi /etc/opendkim/SigningTable

*@maildomain.ch maildomain._domainkey.maildomain.ch

Welche Domains und Hosts sollen DKIM verwenden.
vi /etc/opendkim/TrustedHosts

127.0.0.1
maildomain.ch
host.maildomain.ch
# external host
1.2.3.4

Den DomainKey auf dem Nameserver als DNS TXT Record zur Zone maildomain.ch hinzufügen. Beispiel: maildomain.txt, zu beachten ist, das die Key Zeile auf einer Linie zu stehen kommt.

cat /etc/opendkim/keys/maildomain.ch/maildomain.txt

mmaildomain._domainkey  IN  TXT ( "v=DKIM1; k=rsa; "
"p=ECGfMA0GCSpGSIb3DQEBAQUBB436ADCBiQKBgQC8ixCqCQG4iMnHjWaZMt24l8dadmHzc9qIXLj5gUjP4kdWwpz569FGFjaPII9ec1G3AqvsBvWfLtGEvk20xBoOmAc2sOP0JdaBenYU-0JLuuBsS5JI+up0GQC5LacnQRegsBiYvLyRDqJoFiY6cWL8iuOzcTaIpYMKs2iSx8L9JwIZFJLE" ) ; ----- DKIM key maildomain for maildomain.ch

Und wenn wir schon dabei sind, kann auch gleich ein TXT Record für SPF, Sender Policy Framework hinzugefügt werden.

maildomain.ch.  14400  IN  TXT  "v=spf1 a mx ~all"

Mit dem domain information groper – dig lässt sich ein query des DomainKey mit folgender Eingabe ausgeben.

dig +short maildomain._domainkey.maildomain.ch TXT

Bei Postfix muss noch der milter integriert werden. Das Domain signing wird zum SMTP-Header hinzugefügt und über Port 8899 an Postfix zurückgegeben.

vi /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8899
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
milter_protocol = 2

Dann die Services starten.

service opendkim start
chkconfig opendkim on
service postfix restart

Mit einem Test Mail an check-auth@verifier.port25.com wird die DKIM Signatur überprüft und das Resultat gleich als Antwort zurück gesendet. Das Ergebnis sollte dann in etwa wie folgt aussehen.

==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
DKIM check: pass

Quellen Links:
DomainKeys Wiki

Symlinks unter Windows

Unter Linux sind symbolische Links ein fester Bestandteil des Betriebssystems. Kaum bekannt ist aber, dass auch unter Windows solche Verknüpfungen unterstützt werden.

Symbolische Links oder Symlinks sind spezielle Dateitypen, die als eine Verknüpfung auf eine andere Datei oder ein anderen Ordner zeigen. In der Praxis kann man solche Links beispielsweise nutzen, um Netzwerkfreigaben mit einem Ordner zu verknüpfen.

Der Vorteil dabei ist, ändert sich der Ort der Netzwerkresource, muss man nur den Symlink entsprechend umbenennen, für Anwendungen, die auf ein Symlink zugreifen, ändert sich nichts.

Im Unix/Linux-Umfeld sind Symlinks ein alltägliches Werkzeug, weniger bekannt ist, dass Microsoft Windows diese Links ebenfalls unterstützt – zumindest, solange ein NTFS-Dateisystem zum Einsatz kommt.

Unter Windows lassen sich neue Symlinks mit dem Kommandozeilenbefehl mklink anlegen. Dazu öffnet man mit  +X die Eingabeaufforderung als Administrator, und gibt folgende Syntax ein:

MKLINK [[/D] | [/H] | [/J]] Verknüpfung Ziel

Und wenn wir schon mal dabei sind, legen wir gleich mal ein Symlink an, für die unter Linux bekannten Kommandozeilenbefehle ps und kill, mit folgender Eingabe:

mklink %systemroot%\System32\ps.exe %systemroot%\System32\tasklist.exe

mklink %systemroot%\System32\kill.exe %systemroot%\System32\taskkill.exe

mklink ps tasklink
mklink ps tasklink

Jetzt können im Arbeitsspeicher laufende Prozesse wie unter Linux mit ps aufgelistet werden, und ggf. mit kill beendet werden. Hilfe wird mit kill /? oder taskkill /? ausgegeben, ebenso für ps /? oder tasklist /?

Möchte man jetzt noch den Kommandozeilenbefehl mklink mit dem Befehl ln ersetzen, geschieht dies mit echo dieses durch den pipe direkt die neue Datei ln.cmd erstellt.

echo mklink > %systemroot%\system32\ln.cmd

echo mklink ln
echo mklink ln

mklink ist ein interner Befehl welcher vom Kommando-Prozessor selbst ausgeführt wird, der CMD-Batch ln.cmd ruft lediglich mklink auf.

Ohne Parameter erzeugt mklink wie auch ln unter Linux Symbolische Links, bei festen Verknüpfungen (Hard Links) die mit der Option /H angelegt werden, ist zu beachten, das feste Verknüpfungen die Datei oder den Ordner selbst abbilden, wenn also ein Ordner mit fester Verknüpfung gelöscht wird, wird der Ordner mit dem gesamten Inhalt gelöscht, was bei einem Symlink nicht der fall ist, hier wird nur die Symbolische Link Datei gelöscht.

Symbolische Links
Symbolische Links werden als Datei Typ symlink angegeben