Installation und Konfiguration von DKIM mit Postfix unter Ubuntu

Einleitung

Die Einstufung von E-Mails als Spam kann diverse Gründe haben, wird aber meistens durch einen der folgenden Punkte verursacht:

  • Der Server ist ein Open Relay
  • Der Absender oder die Server IP steht auf einer Blacklist
  • Der Server hat keinen FQDN und/oder PTR Eintrag
  • Der Sender Policy Framework (SPF) DNS Eintrag fehlt oder ist fehlerhaft konfiguriert
  • Die Implementierung von DomainKeys Identified Mail (DKIM) fehlt oder ist nicht korrekt aufgesetzt

Die Spamfilter testen auf einige Basis Eigenschaften. Das Erfüllen dieser Eigenschaften ist sehr wichtig für gut konfigurierte Mailserver.
Im Folgenden wird die Einrichtung von DKIM beschrieben. Genutzt wird dazu “OpenDKIM”, eine OpenSource Implementierung des “DKIM sender authentication system”.

DKIM

DKIM ist ein Internet Standard, der es ermöglicht, Personen oder Unternehmen und deren Domainnamen einer E-Mail Nachricht zu verknüpfen. DKIM funktioniert über eine asymmetrische Verschlüsselung. Der MTA signiert jede ausgehende Mail mit seinem privaten Schlüssel. Der Empfänger erhält den öffentlichen Schlüssel vom DNS des Absenders. Er verifiziert anschließend, ob es keine Veränderungen im Mail Body und einigen der Header Feldern seit der Signierung gibt.

Installation von OpenDKIM

Vor der Installation sollte ein Systemupdate erfolgen und das Paket anschließend installiert werden.
apt-get update && apt-get upgrade
apt-get install opendkim opendkim-tools

Konfiguration von OpenDKIM

Zur Konfiguration müssen einige Dateien angepasst oder erstellt werden.
Angefangen mit der Hauptkonfigurationsdatei:

nano /etc/opendkim.conf

Hier sollten folgende Dinge an die Konfiguration angehängt werden:

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

Erklärung

  • AutoRestart: Startet den Filter bei Fehlern automatisch neu
  • AutoRestartRate: Gibt an, wie oft der Filter maximal neugestartet werden darf. Sollte ein Neustart öfter erfolgen, so wird der Filter beendet; 10/1h – 10 maximal 10 Neustarts pro Stunde sind erlaubt.
  • UMask: Erteilt vollständige Zugriffsrechte für die Gruppe, welche durch die UserID definiert ist. Andere Benutzer dürfen die Dateien ausführen und lesen. In diesem Fall wird das Erstellen und Bearbeiten der Pidfile erlaubt.
  • Syslog, SyslogSuccess, *LogWhy: Erlauben detailliertes Logging via Syslog.
  • Canonicalization: Legt die Methode der Kanonisierung beim Signieren fest. Die “simple” MEthode erlaubt fast keine Modifikationen, wohingegen die “relaxed” Methode kleinere Änderungen erlaubt wie das Entfernen von Leerzeichen; relaxed/simple – Header: relaxed, Body: simple
  • ExternalIgnoreList: Legt Hosts fest, die Mails mit der Domain durch diesen Server versenden dürfen, ohne, dass Anmeldedaten mitgegeben werden müssen.
  • InternalHosts: Legt eine Liste von Hosts fest, dessen Mail nicht verifiziert aber signiert werden soll.
  • KeyTable: Ordnet maps key names den signing keys zu
  • SigningTable: Liste der Signaturen, die auf die Mail angewendet werden soll, basierend auf dem Header Feld “From”
  • Mode: Legt den Modus der Ausführung fest. In diesem Fall arbeitet der milter als Signierer (s) und Verifizierer (v)
  • PidFile: Pfad zur Pidfile, welche die Nummer des Prozesses beinhaltet
  • SignatureAlgorithm: Algorithmus, der beim Erstellen der Signaturen verwendet wird.
  • UserID: ID (Benutzer und Gruppe) unter welcher der Prozess läuft
  • Socket: Der Milter hört auf diesen Port, Postfix sendet Mails an opendkim zur Signierung und Verifikation an diesen Socket. 12301@localhost TCP Socket, der auf Localhost, Port 12301 hört.

Mehr Infos zu den Einstellungen und Möglichkeiten gibt es hier.

Verbinden des Milters zu Postfix:

nano /etc/default/opendkim

Die folgende Zeile muss eingefügt und evtl. angepasst werden, sollte ein anderer Port genutzt worden sein:

SOCKET="inet:12301@localhost"

Postfix mitteilen, dass er den Milter nutzen soll:

nano /etc/postfix/main.cf

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Oder so, falls schon andere Filter vorhanden sind (SpamAssasin etc.)

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

Nun müssen die Ordner erstellt werden, die die oben definierten Hosts, Tabellen und Schlüssel beinhalten:

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

Hosts defninieren:

nano /etc/opendkim/TrustedHosts

Diese Datei gilt für die Richlinie ExternalIgnoreList und InternalHosts. Mails dieser Hosts, Domänen und IP Adressen wird vertraut und werden signiert.

127.0.0.1
localhost
192.168.0.1/24

*.tj-braun.de

Keytable anlegen:

nano /etc/opendkim/KeyTable

Diese Tabelle enthät das “Selector/Domain” Paar und den Pfad zum privaten Schlüssel. Jeder String kann als Selector genutzt werden. Hier ist es “mail”

mail._domainkey.tj-braun.de tj-braun.de:mail:/etc/opendkim/keys/tj-braun.de/mail.private

SigningTable anlegen:

nano /etc/opendkim/SigningTable

Diese Datei wird für die Definition der Domains/E-Mails und deren Selektoren verwendet.

*@tj-braun.de mail._domainkey.tj-braun.de

Privaten und öffentlichen Schlüssel generieren

Wechsel ins Schlüsselverzeichnis:

cd /etc/opendkim/keys

Ordner für die Domain erstellen.

mkdir tj-braun.de
cd tj-braun.de/

Schlüssel generieren

opendkim-genkey -s mail -d tj-braun.de

-s definiert der Selektor und -d die Domain. Es werden 2 Dateien erstellt. mail.private enthält den privaten Schlüssel und mail.txt den öffentlich Schlüssel.

Öffentlichen Schlüssel zum DNS hinzufügen

Inhalt der mail.txt

mail._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=MIGfMA0GCSqGSIb3DQEBAQU...KPofdPZnZjpk5kQ5+PdomLzxesY2NYOG---- DKIM key mail for tj-braun.de

Mit diesem Schlüssel erstellt man nun einen TXT Record  im DNS.

Name: mail._domainkey
Text: "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQU...KPofdPZnZjpk5kQ5+PdomLzxesY2NYOG"

Nameserver

Neustart von Postfix und OpenDKIM

service postfix restart
service opendkim restart

Testen

1. Leere Mail an check-auth@verifier.port25.com, dort sollte “DKIM check: pass” stehen, wenn alles funktioniert.

==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham

2. Mail an eine GMail Adresse schicken. Dort kann man sich den Header anschauen, der so aussehen sollte:

Received-SPF: pass (google.com: domain of tj-braun.de designates 81.169.183.170 as permitted sender) client-ip=81.169.183.170;
Authentication-Results: mx.google.com;
dkim=pass header.i=@tj-braun.de;
spf=pass (google.com: domain of tj-braun.de designates 81.169.183.170 as permitted sender) smtp.mailfrom=tj-braun.de

3. Syslog

opendkim[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][12772]: 2F49015260E04: DKIM-Signature field added (s=mail, d=tj-braun.de)[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s