Ubuntu 16.04 - SPF, DKIM und DMARC in Postfix einrichten
Verwenden Sie die Dokumentation nur noch bei gerechtfertigten Anwendungsfällen.
Vorwort
Diese Dokumentation beschreibt den Installationsvorgang von SPF, DKIM und DMARC zur Erweiterung von Postfix.
Bitte vergewissern Sie sich, dass Ihr System über die nötigen Voraussetzungen verfügt, wie in der Infobox beschrieben. Weiterhin sind Grundkenntnisse im Umgang mit Linux erforderlich, da die Vorgehensweise, wie sie hier beschrieben ist, in manchen Teilen abweichen kann. Kein System ist wie das Andere. Die Dokumentation wurde sorgfältig von mir geprüft. Dennoch kann ich keinerlei Haftung für Schäden an Ihrem System oder eine Gewährleistung übernehmen. Bitte verwenden Sie diese Dokumentation auf eigene Gefahr.
Verwendete Software:
Voraussetzungen:
- Ubuntu 16.04
- Postfix (fertig eingerichtet), z.B.:
- Zugriff auf den DNS-Server für Ihre Domain
Weitere, empfohlene Dokumentationen:
- SpamAssassin in Postfix einrichten
- Postfix als Relayhost (Smarthost)
- Postfix als Mailserver mit Dovecot und PostfixAdmin
Was soll erreicht werden?
Ziel dieser Dokumentation soll sein, einen Mailserver zu betreiben, der über Mechanismen verfügt, die zuverlässig zur Spam-Abwehr und zum Mißbrauch Ihrer Domain-Namen und E-Mail-Adressen beitragen. Gleichzeitig soll die Vertrauensstellung Ihres Mailservers durch deren Einsatz erhöht werden.
Warum SPF?
SPF beschreibt, welcher Mailserver eine E-Mails versenden darf.
Durch den Einstz von SPF geben Sie einem empfangenden Mailserver Informationen darüber, welche Mailserver zum Versand von E-Mails mit, zu Ihrer Mail-Domain gehörenden Absender-Adressen, berechtigt sind. Ohne SPF, kann der Empfänger nicht überprüfen, ob eine E-Mail über einen von Ihnen autorisierten Mailserver versendet wurde. Diese Informationen werden über einen DNS-TXT-Eintrag auf dem, zu Ihrer Domain gehörenden, DNS-Server veröffentlicht.
Die Dokumenatation beschreibt:
- Wie der SPF-Mechanismus in Postfix implementiert wird
- Wie ein SPF-Eintrag auf dem DNS-Server erstellt wird
Warum DKIM?
DKIM beschreibt, dass eine E-Mail unverändert vom tatsächlichen Absender stammt.(Spoofing)
DKIM ist ein weiterer Schritt, die Authentizität Ihrer E-Mails gegenüber des Empfängers nachzuweisen. Bei DKIM wird der Kopfzeile Ihrer E-Mail eine digitale Signatur hinzugefügt, die von einem empfangenden Mailserver anhand eines öffentlichen Schlüssels verifiziert werden kann. Der öffentliche Schlüssel wird über einen DNS-TXT-Eintrag auf dem, zu Ihrer Domain gehörenden, DNS-Server veröffentlicht. Durch den Einsatz von DKIM kann vom emfangenden Mailserver kryptografisch festgestellt werden, ob die Absender-Adresse der E-Mail korrekt ist und ob die E-Mail auf dem Weg der Zustellung inhaltlich verändert wurde.
Die Dokumenatation beschreibt:
- Wie der DKIM-Mechanismus in Postfix implementiert wird
- Wie ein DKIM-Eintrag auf dem DNS-Server erstellt wird
Warum DMARC?
DMARC vervollständigt den Einsatz von SPF und DKIM, indem es festlegt, wie ein empfangender Mailserver mit einer E-Mail umgeht, bei der die SPF- und/oder DKIM-Prüfung fehlgeschlagen ist. Es legt fest, ob die E-Mail dennoch angenommen, als Spam deklariert oder verworfen werden soll. Diese Informationen werden über einen DNS-TXT-Eintrag auf dem, zu Ihrer Domain gehörenden, DNS-Server veröffentlicht.
Die Dokumenatation beschreibt:
- Wie der DMARC-Mechanismus in Postfix implementiert wird
- Wie ein DMARC-Eintrag auf dem DNS-Server erstellt wird
Was muss ich in der Konfiguration anpassen?
Einige Parameter müssen auf Ihre Umgebung angepasst werden. Im Verlauf dieser Dokumentation müssen Sie nur die Parameter anpassen, die in der nachfolgenden Tabelle aufgelistet sind. Sie können also ganz einfach durch die Funktion "Suchen und Ersetzen" (STRG + H), die Konfigurationsdateien auf Ihre Umgebung anpassen. Das Gleiche gilt für auszuführende Kommandos.
Folgende Parameter werden verwendet:
Wert | Hinweis | |
---|---|---|
Allgemein: | ||
Domain | example.com | Ersetzen Sie diesen Wert durch die Domain, die Sie für den E-Mail-Verkehr verwenden. |
Hostname | relayhost.example.com | Ersetzen Sie diesen Wert durch den FQDN Ihres Servers. |
DKIM: | ||
Selector | 201901 | Geben Sie eine Zeichenkette an, mit der das DKIM-Schlüsselpaar identifiziert werden kann. Es ist sinnvoll, das Erstellungsjahr und den Monat zu verwenden. So kann das Erstellungsdatum des Schlüsselpaares nachvollzogen werden. '201901' steht also für '2019 Januar '. |
DMARC: | ||
E-Mail-Adresse
(Absender) |
no-reply.dmarc.reports@example.com | Ersetzen Sie diesen Wert durch eine E-Mail-Adresse, die als Absender für DMARC-Berichte verwendet werden soll. |
E-Mail-Adresse
(Empfänger) |
dmarc@example.com | Ersetzen Sie diesen Wert durch eine E-Mail-Adresse, die als Empfänger für DMARC-Berichte verwendet werden soll. |
Konfigurations-Dateien werden immer nach dem gleichen Muster erstellt. Unter jeder Datei, die eine Anpassung erfordert, finden Sie die nötigen Hinweise.
Dateien, die zwar Parameter aber keine eigentliche Konfiguration enthalten, werden nach dem vorgegebenen Syntax erstellt.
Beispiel:
Im folgenden Beispiel ist die Datei /home/beispiel.conf
zu erstellen und der Parameter domain
anzupassen.
Erstellen Sie eine neue Datei /home/beispiel.conf
mit folgendem Inhalt:
# nano /home/beispiel.conf
url = www.twlnet.com
content = Dokumentationen
domain = example.com
owner = root
# beispiel.conf
[...]
domain = example.com
[...]
Im folgenden Beispiel ist die Datei /home/beispiel.map
mit einer Liste Ihrer E-Mail-Adressen zu erstellen.
Erstellen Sie eine neue Datei /home/beispiel.map
nach folgendem Syntax:
# nano /home/beispiel.map
# beispiel.map
benutzer1@example.com
benutzer2@example.com
benutzer3@example.com
Server vorbereiten
Root-Rechte einräumen
Während der gesamten Dokumentation werden Root-Rechte benötigt. Um auf das Voranstellen von sudo
zu verzichten, verschaffen Sie sich für die gesamte Sitzung erhöhte Rechte mit:
# sudo -i
Update durchführen
Bringen Sie den Server auf den aktuellen Patchstand:
# apt update && apt upgrade
Software herunterladen und installieren
Laden Sie SPF-Python
, OpenDKIM
und OpenDMARC
aus dem offiziellen Ubuntu-Repository herunter:
# apt-get install postfix-policyd-spf-python opendkim opendkim-tools opendmarc
SPF in Postfix implementieren
SPF konfigurieren
Policy-SPF wird in der Datei /etc/postfix-policyd-spf-python/policyd-spf.conf
konfiguriert.
In unserem Setup wollen wir anhand der DMARC-Richtlinie des sendenden Mailservers über die Annahme oder Ablehnung einer E-Mail entscheiden. Wir sorgen also dafür, dass eine eingehende E-Mail, auch bei fehlgeschlagener SPF-Prüfung, angenommen wird. Das Ergebnis der SPF-Prüfung wird aber im Header der E-Mail vermerkt und kann von nachfolgenden Instanzen, wie z.B. DMARC oder auch Spamassassin ausgewertet werden.
Editieren Sie die Datei /etc/postfix-policyd-spf-python/policyd-spf.conf
und ändern Sie folgende Parameter:
# nano /etc/postfix-policyd-spf-python/policyd-spf.conf
[...] HELO_reject = False Mail_From_reject = False [...]
SPF in Postfix aktivieren
Da die SPF-Prüfung kein eigener Postfix-Prozess ist, muss der Prozess über den spawn-daemon
in Postfix aufgerufen werden.
Der spawn-daemon
erstellt bei Bedarf Nicht-Postfix-Prozesse. Er läuft auf einem Unix-Domain-Socket und wird, als untergeordneter Prozess des Postfix-Master-Prozesses, in der Datei /etc/postfix/master.cf
konfiguriert. In unserem Setup läuft er als Dienst policy-spf
.
Bei eingehendem E-Mail-Empfang wird der Dienst im Rahmen der SMTPD Restrictions aufgerufen.
Fügen Sie der Datei /etc/postfix/master.cf
folgendes hinzu:
[...]
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf
[...]
Suchen Sie in der Datei /etc/postfix/main.cf
den Parameter smtpd_recipient_restrictions
.
Fügen Sie check_policy_service unix:private/policy-spf
ein:
[...]
smtpd_recipient_restrictions =
[...]
check_policy_service unix:private/policy-spf
[...]
[...]
Durch falsches Setzen des Parameters kann Ihr Server zu einem offenen Relay werden.
Ihre /etc/postfix/main.cf
muss entweder die folgende Option enthalten,
smtpd_relay_restrictions = [...] reject_unauth_destination
oder Sie müssen den Parameter nach reject_unauth_destination
setzen:
smtpd_recipient_restrictions = [...] reject_unauth_destination check_policy_service unix:private/policy-spf [...]
Setzen Sie in der Datei /etc/postfix/main.cf
das Timeout-Limit für SPF:
[...]
#Milter - DKIM, DMARC, SPF
#########################################################################
policy-spf_time_limit = 3600s
[...]
Starten Sie Postfix neu, damit die Konfiguration angewendet wird:
# service postfix restart
DNS-Eintrag für SPF einrichten
Beispiel:
Das folgende Beispiel sagt aus, dass SPF-Version 1 (v=spf1
) verwendet wird, alle Mailserver, die in Ihrem DNS-Server als MX eingetragen sind (mx
), zum Mailversand berechtigt sind und alle Anderen nicht berechtigt sind (-all
).
Der HELO-Hostname wird ebenfalls überprüft. Für diese Überprüfung ist ein weiterer SPF-Eintrag erforderlich, da nur die Domäne nicht ausreicht. Der SPF-Mechanismus erwartet den FQDN des Mailservers.
Die zwei folgenden Beispiele können Sie verwenden. Andere Varianten sind nur komplexeren Mail-Systemen notwendig.
Hostname | Typ | Priorität | Ziel | Text |
example.com | TXT | v=spf1 mx -all |
Für die HELO-Überprüfung:
Hostname | Typ | Priorität | Ziel | Text |
relayhost.example.com | TXT | v=spf1 a -all |
Weitere Beispiele:
Das folgende Beispiel sagt aus, dass SPF-Version 1 (v=spf1
) verwendet wird, der Mailserver, der die IPv4-Adresse 2.234.54.2 enthält und alle Mailserver, die in Ihrem DNS-Server als MX eingetragen sind (mx
), zum Mailversand berechtigt sind. Alle Anderen sind nicht berechtigt sind (-all
).
Hostname | Typ | Priorität | Ziel | Text |
example.com | TXT | v=spf1 ipv4:2.234.54.2 mx -all |
Das folgende Beispiel sagt aus, dass SPF-Version 1 (v=spf1
) verwendet wird, der Mailserver, der die IPv4-Adresse 2.234.54.2 enthält und alle Mailserver, die in Ihrem DNS-Server als MX eingetragen sind (mx
), zum Mailversand berechtigt sind. Alle Anderen sollen dennoch akzeptiert werden. (~all
).
Hostname | Typ | Priorität | Ziel | Text |
example.com | TXT | v=spf1 ipv4:2.234.54.2 mx ~all |
Erstellen Sie auf dem DNS-Server, der für Ihre Mail-Domain zuständig ist, jeweils einen DNS-TXT-Eintrag für den MX-Eintrag und einen für die HELO-Überprüfung nach folgendem Syntax:
Hostname
für einen SPF-Eintrag ist kein Hostname erforderlich.Typ
hier geben Sie den Typ des DNS-Eintrags an. In unserem Fall muss es ein TXT-Eintrag seinText
hier geben Sie die SPF-Information ein.
SPF-Eintrag für die Domain example.com
Hostname | Typ | Priorität | Ziel | Text |
example.com | TXT | v=spf1 mx -all |
SPF-Eintrag für den HELO-Hostname relayhost.example.com
Hostname | Typ | Priorität | Ziel | Text |
relayhost.example.com | TXT | v=spf1 a -all |
Übersicht der verschiedenen Qualifikatoren und Mechanismen
Qualifikator | Resultat | Bedeutung |
---|---|---|
+ | Pass | Der Host ist berechtigt (Das + muss nicht explizit angegeben werden. +mx ist äquivalent zu mx )
|
- | Fail | Der Host ist nicht berechtigt |
~ | SoftFail | Der Host ist nicht berechtigt, soll aber dennoch akzeptiert werden (z.B. Testumgebung) |
? | Neutral | Keine Angabe zur Berechtigung. Host soll akzeptiert werden |
Mechanismus | Host ist berechtigt wenn... |
---|---|
a[:] | der Host-A/AAAA (oder der Angegebene) Record die IP-Adresse des sendenden Mailservers enthält. |
mx[:] | der MX-Record der Domain (oder der Angegebenen) die IP-Adresse des sendenden Mailservers enthält |
ip4: | die angegebene IPv4-Adresse (oder IPv4-Subnetz) die des sendenden Mailservers ist. |
ipv6: | die angegebene IPv6-Adresse (oder IPv6-Subnetz) die des sendenden Mailservers ist. |
include: | die zusätzliche SPF-Überprüfung der überprüften Domain die, im Include-Statement enthaltene, IP-Adresse des sendenden Mailservers enthält. |
ptr[:] | der Host-A/AAAA (oder der Angegebene) Record eines Reverse-DNS-Lookups der überprüften Domain die IP-Adresse des sendenden Mailservers enthält. |
exists: | wenn der sendende Mailserver einen Host-A-Record hat (gilt auch für IPv6). |
all | immer. |
DNS-Eintrag für SPF prüfen
Prüfen Sie, ob der DNS-TXT-Eintrag bereits aktiv ist. Je nach Hoster bzw. DNS-Server kann es mehrere Stunden dauern, bis DNS-Änderungen verfügbar sind.
Verwenden Sie hierzu folgendes Kommando:
# host -t txt example.com
Wenn Sie folgende Ausgabe erhalten, ist Ihr DNS-TXT-Eintrag aktiv:
host -t txt example.com example.com descriptive text "v=spf1 mx -all"
Wenn Sie folgende Ausgabe erhalten, ist Ihr DNS-TXT-Eintrag noch nicht aktiv:
host -t txt example.com Host example.com not found: 3(NXDOMAIN)
DKIM in Postfix implementieren
DKIM konfigurieren
OpenDKIM wird in der Datei /etc/opendkim.conf
konfiguriert.
In unserem Setup wartet der Dienst als Inet-Socket auf dem TCP/IP-Port 8891 auf eingehende Verbindungen.
Hinweis:
Unter Ubuntu (und Debian) wird auch die Datei /etc/default/opendkim
ausgewertet. Einstellungen in dieser Datei haben Vorrang gegenüber der /etc/opendkim.conf
.
Setzen Sie daher in dieser Datei nur den Inet-Socket und konfigurieren Sie alles Weitere in der opendkim.conf
.
/etc/default/opendkim
Kommentieren Sie in der Datei /etc/default/opendkim
die Zeile SOCKET="local:/var/run/opendkim/opendkim.sock"
aus und die Zeile SOCKET="inet:8891@localhost"
ein:
# nano /etc/default/opendkim
[...]
#SOCKET="local:/var/run/opendkim/opendkim.sock"
[...]
SOCKET="inet:8891@localhost"
[...]
/etc/opendkim.conf
Die Konfigurations-Parameter für OpenDKIM sind sehr überschaubar und werden im weiteren Verlauf noch genauer erwähnt.
Den Parameter Canonicalization
möchte ich aber schon jetzt etwas beleuchten:
Der Kanonisierungs-Algorithmus (Canonicalization
) legt fest, ob der empfangende Mailserver den Header bzw. den Body der E-Mail normalisieren soll, um geringfügige Abweichungen, wie z.B. Leerzeichen oder Zeilenumbrüche, zu berücksichtigen, durch die die Signatur ansonsten ungültig werden würde.
Es können verschiedene Algorithmen, durch Schrägstrich ("/"
) getrennt, verwendet werden. Der Erste wird auf den Header und der Zweite auf den Body der E-Mail angewendet.
Gemäß RFC 4871 stehen zwei Algorithmen zu Verfügung:
simple
Der Header/Body wird nicht normalisiert.relaxed
Der Header/Body wird normalisiert. Es werden alle Leerzeichen und Zeilenumbrüche entfernt. Beim Header werden zusätzlich alle Buchstaben in Kleinbuchstaben geändert.
Die empfohlene Einstellung ist relaxed/relaxed
.
Alle weiteren Konfigurations-Parameter finden Sie auf der Seite von OpenDKIM.
Benennen Sie zunächst die /etc/opendkim.conf
um, damit Sie eine Sicherheitskopie der Original-Datei haben:
# mv /etc/opendkim.conf /etc/opendkim.conf.bak
Erstellen Sie eine neue Datei /etc/opendkim.conf
mit folgendem Inhalt:
# nano /etc/opendkim.conf
UserID opendkim:opendkim
UMask 002
PidFile /var/run/opendkim/opendkim.pid
Mode sv
Domain *
#Selector mail
Canonicalization relaxed/relaxed
SignatureAlgorithm rsa-sha256
OversignHeaders From
AutoRestart yes
AutoRestartRate 10/1h
SigningTable refile:/etc/opendkim/signing.table
KeyTable /etc/opendkim/key.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
Syslog yes
SyslogSuccess yes
LogWhy yes
Ignore-Hosts definieren
Wenn für bestimmte Mailserver keine DKIM-Prüfung gewünscht ist, können diese in der Datei /etc/opendkim/trusted.hosts
definiert werden. Die Datei kann Hostnamen, einzelne IP-Adressen und/oder ganze Adressräume (CIDR-Angaben) enthalten.
Der eigene Host (localhost
) sollte immer ignoriert werden.
Erstellen Sie einen neuen Ordner /etc/opendkim
:
# mkdir /etc/opendkim
Erstellen Sie die Datei /etc/opendkim/trusted.hosts
und definieren Sie die Hosts, für die kein DMARC-Test durchgeführt werden soll.
Normalerweise gilt dies nur für localhost
:
# nano /etc/opendkim/trusted.hosts
127.0.0.1 ::1 localhost
Schlüssel erstellen
Mit dem geheimen Schlüssel wird die digitale Signatur für den E-Mail-Header erzeugt, die vom empfangenden Mailserver anhand des öffentlichen Schlüssels verifiziert werden kann.
Für die Erzeugung des benötigten Hashwertes stehen SHA-1 und SHA-256 zur Verfügung. Der Hashwert wird anschliessend mit dem RSA-Verfahren signiert.
In unserem Setup erzeugen wir natürlich den empfohlenen, grösseren Hashwert mit SHA-256.
Die entsprechenden Parameter finden Sie in der Datei /etc/opendkim.conf
:
# opendkim.conf
[...]
SignatureAlgorithm rsa-sha256
[...]
Das Schlüsselpaar wird mit dem Tool opendkim-genkey
anhand der folgenden Parametrisierung generiert:
-d example.com
Die Mail-Domain, für die der Schlüssel gelten soll. (-d
= Domain)-b 2048
Die Schlüssellänge beträgt 2048 Bits. Standardmäßig verwendet opendkim-genkey eine Schlüssellänge von 1024 Bits. Das ist aber nicht mehr ausreichend. (-b
= bit)-r
Der Schlüssel darf nur zum Signieren von E-Mails verwendet werden. (-r
= restricted)-s 201901
Die Zeichenkette, mit der das Schlüsselpaar identifiziert werden kann. Es ist sinnvoll, das Erstellungsjahr und den Monat zu verwenden. So kann das Erstellungsdatum des Schlüsselpaares nachvollzogen werden. '201901' steht also für 'Januar 2019'. (-s
= selector)
Der öffentliche Schlüssel wird in der Datei example.com.txt
und der geheime Schlüssel in der Datei example.com.private
hinterlegt.
Erstellen Sie ein Verzeichnis für die DKIM-Schlüssel und passen Sie die Berechtigungen an:
# mkdir /etc/opendkim/keys # chown -R opendkim:opendkim /etc/opendkim
Wechseln Sie in den Ordner /etc/opendkim
und erstellen Sie mit dem Kommando opendkim-genkey
das Schlüsselpaar für Ihre Mail-Domain:
# cd /etc/opendkim # opendkim-genkey -d example.com -b 2048 -r -s 201901
Benennen Sie die Dateien, entsprechend Ihrer Mail-Domain um und verschieben Sie diese in den Ordner /etc/opendkim/keys
:
# mv 201901.private keys/example.com.private # mv 201901.txt keys/example.com.txt
Passen Sie die Berechtigungen an:
# chmod -R 700 /etc/opendkim/keys
Schlüssel einer Domain zuweisen
OpenDKIM kann nicht nur für eine einzelne Domain verwendet werden. Die Zuordnung von Domain und Schlüssel erfolgt daher in separaten Dateien, die auch mehrere Domain- und Schlüsselzuordnungen beeinhalten können. Der Dienst entscheidet anhand der hinterlegten Informationen, welchen Schlüssel er für welche Domain verwendet.
Die entsprechenden Parameter finden Sie in der Datei /etc/opendkim.conf
:
# opendkim.conf
[...]
SigningTable refile:/etc/opendkim/signing.table
KeyTable /etc/opendkim/key.table
[...]
Als ersten Schritt geben Sie an, für welche Absender-Adressen (*@example.com
) welcher Schlüssel (example.com
) verwendet werden soll.
Erstellen Sie dazu die Datei /etc/opendkim/signing.table
nach folgendem Syntax:
# nano /etc/opendkim/signing.table
*@example.com example.com
Als zweiten Schritt geben Sie den Ort des Private-Keys für example.com
an.
Erstellen Sie dazu die Datei /etc/opendkim/key.table
nach folgendem Syntax::
# nano /etc/opendkim/key.table
example.com example.com:201901:/etc/opendkim/keys/example.com.private
Passen Sie abschliessend die Berechtigungen an:
# chown -R opendkim:opendkim /etc/opendkim
Starten Sie OpenDKIM neu, damit die Konfiguration angewendet wird:
# service opendkim restart
OpenDKIM prüfen
Testen Sie mit dem Kommando opendkim-testkey
, ob der OpenDKIM-Dienst ordnungsgemäß funktioniert und der DNS-Eintrag korrekt ist.
Der Syntax für das Kommando opendkim-testkey
lautet:
-d
hier geben Sie die Mail-Domain an, die getestet werden soll (Ihre Mail-Domain)-s
hier geben Sie den zu testenden Selector an (z.B.201901
)-vvv
dieser Parameter bewirkt, dass das Kommando Debugging-Informationen anzeigt
Wichtig ist die letzte Zeile opendkim-testkey: key OK
. Das bedeutet, dass alles wie gewünscht funktioniert.
Die Zeile opendkim-testkey: key not secure
bedeutet lediglich, dass Ihr DNS-Server kein DNSSEC verwendet. Das kann ignoriert werden.
# opendkim-testkey -d example.com -s 201901 -vvv opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key '201901._domainkey.example.com' opendkim-testkey: key not secure opendkim-testkey: key OK
OpenDKIM-Milter in Postfix einrichten
OpenDKIM ist ein sogenanntes Milter-Programm.
Das Kofferwort Milter setzt sich aus den Worten Mail und Filter zusammen.
Milter-Programme erhalten von Postfix Voll-Zugriff auf eine E-Mail und dürfen diese auswerten und sogar inhaltlich verändern.
Eine E-Mail wird hierfür zuerst an das entsprechende Milter-Programm übergeben, bevor sie in die Warteschlange eingereiht wird.
Da OpenDKIM dem E-Mail-Header einer ausgehenden E-Mail die DKIM-Signatur hinzufügt (inhaltliche Veränderung) und die Signatur einer eingehenden E-Mail auswertet, muss in Postfix ein entsprechender smtpd-milter definiert werden.
Die Kommunikation zwischen Postfix und OpenDKIM findet über den, anfangs eingerichteten, Inet-Socket statt.
Fügen Sie der Datei /etc/postfix/main.cf
folgendes hinzu:
[...]
#Milter - DKIM, DMARC, SPF
#########################################################################
milter_default_action = accept
milter_protocol = 6
smtpd_milters =
inet:127.0.0.1:8891
non_smtpd_milters =
${smtpd_milters}
[...]
Starten Sie Postfix und OpenDKIM neu, damit die Konfiguration angewendet wird:
# service postfix restart # service opendkim restart
DNS-Eintrag für DKIM einrichten
Der öffentliche Schlüssel muss in Form eines DNS-TXT-Eintrags veröffentlicht werden. Erstellen Sie auf dem DNS-Server, der für Ihre Mail-Domain zuständig ist, einen DNS-TXT-Eintrag nach folgendem Syntax:
Hostname
hier geben Sie die Zeichenfolge (selector) gefolgt von._domainkey.
und Ihrer Mail-Domain anTyp
hier geben Sie den Typ des DNS-Eintrags an. In unserem Fall muss es ein TXT-Eintrag seinText
hier geben Sie die verwendete DKIM-Version und das Hashverfahren anv=DKIM1; k=rsa;
als öffentlichen Schlüssel verwenden Sie den Inhalt der Datei/etc/opendkim/keys/example.com.txt
. (p=MIIBIjANB........
)
Hostname | Typ | Priorität | Ziel | Text |
201901._domainkey.example.com | TXT | v=DKIM1;
k=rsa; |
Je nach Hoster bzw. verwendetem DNS-Server werden die Anführungsstriche entweder nicht akzeptiert oder so interpretiert, als wenn sie Teil des öffentlichen Schlüssels wären. Das führt zwangsläuft zu Fehlern. Kopieren Sie daher den öffentlichen Schlüssel aus der Datei /etc/opendkim/keys/example.com.txt
in einen Text-Editor und entfernen Sie die Anführungsstriche. Achten Sie darauf, dass sich keine Leerzeichen oder Absätze im öffentlichem Schlüssel befinden.
Beispiel:
# Vorher
201901._domainkey IN TXT ( "v=DKIM1; k=rsa; s=email; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCA[...]qxNhoHkVBlgywUlK5D51a9lhhSG"
"1B1mnNcsmfgoP177XqAsWsRdu2zVuwe[...]lLPYmg3qe9bpZxtwWZHtwIDAQAB" )
; ----- DKIM key 201901 for ihredomain.de
# Nachher p=MIIBIjANBgkqhkiG9w0BAQEFAAOCA[...]HkVBlgywUlK5D51a9lhhSG1B1mnNcsmfgoP177XqAsWsRdu2zVu[...]lLPYmg3qe9bpZxtwWZHtwIDAQAB
DNS-Eintrag für DKIM prüfen
Prüfen Sie zunächst, ob der DNS-TXT-Eintrag bereits aktiv ist. Je nach Hoster bzw. DNS-Server kann es mehrere Stunden dauern, bis DNS-Änderungen verfügbar sind.
Verwenden Sie hierzu folgendes Kommando:
# host -t txt 201901._domainkey.example.com._domainkey
Wenn Sie folgende Ausgabe erhalten, ist Ihr DNS-TXT-Eintrag aktiv:
# host -t txt 201901._domainkey.example.com._domainkey 201901._domainkey.example.com descriptive text "v=DKIM1; k=rsa;\013\010p=MIIBIjANBgkqhkiG9w0BAQEFAA OCA.......qxNhoHkVBlgywUlK5D51a9lhhSG1B1mnNcsmfgoP177XqAsWsRdu2zVuwe.......lLPYmg3qe9bpZxtwWZHtwIDAQA"
Wenn Sie folgende Ausgabe erhalten, ist Ihr DNS-TXT-Eintrag noch nicht aktiv:
# host -t txt 201901._domainkey.example.com._domainkey Host 201901._domainkey.example.com not found: 3(NXDOMAIN)
DMARC in Postfix implementieren
OpenDMARC konfigurieren
/etc/opendmarc.conf
.
Wie auch OpenDKIM, läuft der Dienst als Inet-Socket. Er wartet auf dem TCP/IP-Port 8893 auf eingehende Verbindungen.
Die Konfiguration ist recht überschaubar und nicht sehr kompliziert.
Auf die wichtigsten Parameter gehen wir ein:
RejectFailures
Der Parameter legt fest, dass eine eingehende E-Mail, entsprechend der veröffentlichten DMARC-Policy der Absender-Domain behandelt wird. Legt die Absender-Domain keine DMARC-Policy fest (p=none
), wird die E-Mail auch dann angenommen, wenn SPF und/oder DKIM fehlschlugen.
Wird der Parameter auffalse
gesetzt, werden keine Nachrichten abgewiesen. Allerdings macht DMARC dann auch wenig Sinn.
Ausführliche Informationen zur DMARC-Policy erhalten Sie später im Kapitel Bedeutung der DNS-Parameter.SoftwareHeader
Der Parameter fügt dem Header einer eingehenden E-Mail das Ergebnis der DMARC-Prüfung und die verwendete Version von OpenDMARC hinzu. Diese Information kann zu Diagnosezwecken hilfreich sein, sollte aber grundsätzlich deaktiviert werden, da wir keinerlei Infomationen über verwendete Software(-Versionen) preisgeben möchten. Der Parameter wird mitfalse
deaktiviert.DMARC-Filter: OpenDMARC Filter v1.3.1 mailserver.example.com 2345A5432 Authentication-Results: mailserver.example.com; dmarc=pass header.from=example.com
FailureReports
Der Parameter legt fest, ob ein "Aggregated Report" versendet werden soll. MitFailureReportsSentBy
wird die verwendete Absender-Adresse definiert. Grundsätzlich ist das Versenden eines solchen Reports nicht notwendig, aber die Informationen über Nutzung bzw. Mißbrauch einer Domain sind wichtig. Ihre Gegenstellen werden es Ihnen danken.
Auch dieses Thema wird im weiteren Verlauf der Dokumentation unter Aggregate Reporting einrichten ausführlich behandelt.
Der Parameter kann auch deaktiviert werdenfalse
.
Alle weiteren Konfigurations-Parameter finden Sie auf der Seite von OpenDMARC.
Benennen Sie zunächst die /etc/opendmarc.conf
um, damit Sie eine Sicherheitskopie der Original-Datei haben:
# mv /etc/opendmarc.conf /etc/opendmarc.conf.bak
Erstellen Sie eine neue Datei /etc/opendmarc.conf
mit folgendem Inhalt:
# nano /etc/opendmarc.conf
AuthservID mailserver.example.com
TrustedAuthservIDs mailserver.example.com
UMask 0002
UserID postfix
AutoRestart true
Socket inet:8893@127.0.0.1
RejectFailures true
IgnoreMailFrom example.com
IgnoreHosts /etc/opendmarc/ignore.hosts
PublicSuffixList /etc/opendmarc/public_suffix_list.dat
SoftwareHeader false
FailureReports true
FailureReportsSentBy no-reply.dmarc.reports@example.com
#FailureReportsBcc
BaseDirectory /var/run/opendmarc
PidFile /var/run/opendmarc/opendmarc.pid
HistoryFile /var/run/opendmarc/opendmarc.dat
Syslog true
SyslogFacility mail
# opendmarc.conf
AuthservID mailserver.example.com
TrustedAuthservIDs mailserver.example.com
[...]
IgnoreMailFrom example.com
[...]
FailureReportsSentBy no-reply.dmarc.reports@example.com
[...]
Ignore-Hosts definieren
Wenn für bestimmte Mailserver keine DMARC-Prüfung gewünscht ist, können diese in der Datei /etc/opendmarc/ignore.hosts
definiert werden. Die Datei kann Hostnamen, einzelne IP-Adressen und/oder ganze Adressräume (CIDR-Angaben) enthalten.
Der eigene Host (localhost
) sollte immer ignoriert werden.
Erstellen Sie einen neuen Ordner /etc/opendmarc
:
# mkdir /etc/opendmarc
Erstellen Sie die Datei /etc/opendmarc/ignore.hosts
und definieren Sie die Hosts, für die kein DMARC-Test durchgeführt werden soll.
Normalerweise gilt dies nur für localhost
:
# nano /etc/opendmarc/ignore.hosts
127.0.0.1 ::1 localhost
Public Suffix Liste erstellen
Ähnlich wie bei HTTP-Cookies verwendet DMARC diese Liste, um den Geltungsbereich für DMARC-Einträge einzuschränken, wenn die Absender-E-Mail-Adresse eine Sub-Domain enthält. Anhand der Liste kann die sogenannte "Organizational Domain" berechnet werden. (Siehe auch RFC 7489)
Wird z.B. sub.example.com
als Mail-Domain verwendet, sucht DMARC in der Liste nach einer registrierbaren Domainendung und legt diese, zusammen mit der ersten weiteren Ebene, als "Organizational Domain" fest. Auf diese Art und Weise kann festgestellt werden, dass sub
eine Sub-Domain von der "Organizational Domain" example.com
ist.
Beispiel:
E-Mail Adresse | Eintrag in Public-Suffix-Liste | Organizational Domain |
---|---|---|
beispiel@sub.example.de | // Confirmed by registry <ops@denic.de>
de |
example.de |
beispiel@sub.example.co.uk | // Submitted by registry <Michael.Daly@nominet.org.uk>
co.uk |
example.co.uk |
beispiel@sub.example.myfritz.net | // Submitted by Andreas Weise <a.weise@avm.de>
myfritz.net |
example.myfritz.net |
Laden Sie die Datei /etc/opendmarc/public_suffix_list.dat
herunter:
# wget --no-check-certificate -q -N -P /etc/opendmarc https://publicsuffix.org/list/public_suffix_list.dat
Setzen Sie die Zugriffsrechte:
# chown -R opendmarc:opendmarc /etc/opendmarc
Cron-Job einrichten
Erstellen Sie die Datei /etc/cron.daily/opendmarc-download-tdl-suffix
mit folgendem Inhalt:
# nano /etc/cron.daily/opendmarc-download-tdl-suffix
#!/bin/bash
#
#########################################################################
# Script Name : opendmarc-download-tdl-suffix #
# Description : Updates the Mozilla Public-Suffix-List. #
# Creates a Backup of the existing File. #
# Logs to SYSLOG. #
# Runs automatically by a Cron-Job. #
# Args : #
# #
# Version : 1.00 #
# Last Update : 07.02.2019 #
# Author : Twilight #
# Email : twilight@twlnet.com #
# Web: : https://www.twilight-networks.com #
#########################################################################
# Tested with : Ubuntu 16.04 LTS #
# OpenDMARC 1.3.1 #
#########################################################################
# OpenDmarc-Dir
DIR='/etc/opendmarc'
# Download-URL
URL='https://publicsuffix.org/list/public_suffix_list.dat'
# Normaly there is no need to change anything below this comment line!
#########################################################################
(
cd ${DIR}
# Download Suffix-List
wget --no-check-certificate ${URL} -q -N -O public_suffix_list.dat.new
case `cat public_suffix_list.dat.new` in
*"BEGIN ICANN DOMAINS"*)
:;;
*)
# Download failed
echo "opendmarc: error downloading public_suffix_list"
mv public_suffix_list.dat.new public_suffix_list.dat.err
exit 1
;;
esac
# Create Backup (if exists)
if [ -f public_suffix_list.dat ];
then
mv public_suffix_list.dat public_suffix_list.dat.bak
fi
# remove error-file (if exists)
if [ -f public_suffix_list.dat.err ];
then
rm public_suffix_list.dat.err
fi
mv public_suffix_list.dat.new public_suffix_list.dat
# Set permissions
chown opendmarc:opendmarc public_suffix_list.dat
echo "opendmarc: downloading public_suffix_list successful"
) 2>&1 | logger
exit 0
#end
Vergeben Sie die benötigte Berechtigung, damit die Datei ausgeführt werden kann:
# chmod 755 /etc/cron.daily/opendmarc-download-tdl-suffix
OpenDMARC-Milter in Postfix einrichten
Genau wie OpenDKIM ist auch OpenDMARC ein Milter-Programm, da es E-Mails auswerten und verändern dürfen muss.
Die entsprechende Milter-Konfiguration in Postfix haben wir bereits im Abschnit OpenDKIM-Milter in Postfix einrichten durchgeführt und müssen jetzt nur noch den OpenDMARC-Milter hinzufügen. Achten Sie dabei auf die Reihenfolge. Postfix arbeitet Milter der Reihe nach ab. Für unser Setup ist es wichtig, dass der OpenDMARC-Milter die letzte Instanz ist.
Fügen Sie der Datei /etc/postfix/main.cf
folgendes hinzu:
[...]
smtpd_milters =
inet:127.0.0.1:8891
inet:127.0.0.1:8893
[...]
Starten Sie Postfix und OpenDMARC neu, damit die Konfiguration angewendet wird:
# service postfix restart # service opendmarc restart
DNS-Eintrag für DMARC einrichten
Damit ein Empfänger Ihrer E-Mails weiss, wie er mit E-Mails umgehen soll, bei der die SPF- oder die DKIM-Auswertung fehlschlägt, muss diese Information, in Form eines DMARC-DNS-Eintrags, veröffentlicht werden.
Erstellen Sie auf dem DNS-Server, der für Ihre Mail-Domain zuständig ist, einen DNS-TXT-Eintrag nach folgendem Syntax:
Hostname
hier geben Sie_dmarc
an.Typ
hier geben Sie den Typ des DNS-Eintrags an. In unserem Fall muss es ein TXT-Eintrag seinText
hier geben Sie die DMARC-Informationen, gemäß dem folgenden Beispiel an.
Hostname | Typ | Priorität | Ziel | Text |
_dmarc.example.com | TXT | v=DMARC1;
p=reject; sp=reject; adkim=s; aspf=s; pct=100; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=1; |
Bedeutung der DNS-Parameter
Parameter | Bedeutung |
---|---|
v= | Version (Aktuell ist Version 1 gültig.)
|
p= | Policy
Hier wird definiert, wie der Empfänger mit E-Mails umgehen soll, bei der die SPF- und/oder DKIM-Auswertung fehlgeschlagen ist.
|
sp= | Subdomain-Policy
Hier wird definiert, wie der Empfänger mit E-Mails umgehen soll, bei der die SPF- und/oder DKIM-Überprüfung fehlgeschlagen ist.
|
adkim= | Auswertung DKIM
Hier wird definiert, wie streng die DKIM-Auswertung ausfallen soll.
|
aspf= | Auswertung SPF
Hier wird definiert, wie streng die SPF-Auswertung ausfallen soll.
|
pct= | Percent
Hier wird definiert, wie hoch der prozentuale Anteil der zu filternden E-Mails sein soll.
|
rua= | Aggregated Report
Hier wird definiert, wohin der Empfänger den aggregierten Report versenden soll (i.d.R. einmal in 24 Stunden)
|
ruf= | Forensic Report
Hier wird definiert, wohin der Empfänger den forensischen Report versenden soll (i.d.R. einmal in 24 Stunden) Der forensische Report gibt Auskunft darüber, welche Absender versucht haben, E-Mails im Namen Ihrer Mail-Domain zu versenden. (Beachten Sie hier die DSGVO! Gutachten zur Vereinbarkeit von DMARC mit der EU-DSGVO)
|
fo= | Forensic Report Optionen (optional)
Hier wird definiert, welche Informationen bezüglich SPF- und/oder DKIM-Fehler angefordert werden.
|
DMARC und Sub-Domains
Die Suche nach dem passenden DMARC-Eintrag basiert auf der Domäne, die in der Absender-E-Mail-Adresse gefunden wird. Es werden maximal zwei DNS-Anfragen gestellt.
Wenn die Absender-E-Mail-Adresse eine Sub-Domain enthält, gilt der, für die übergeordnete Domäne eingerichtete DMARC-Eintrag nur dann, wenn die übergeordnete Domäne die Organizational Domain ist UND wenn für die Sub-Domain kein DMARC-Eintrag definiert wurde. DMARC-Einträge, die für weitere Sub-Domains existieren, werden ignoriert.
Beispiel:
E-Mail Adresse | Organizational Domain | DMARC-Eintrag |
---|---|---|
beispiel@example.com | example.com | _dmarc.example.com |
In diesem Fall ist die Suche beim ersten Durchgang abgeschlossen, da die enthaltene Mail-Domain der E-Mail-Adresse mit der Organizational Domain übereinstimmt.
E-Mail Adresse | Organizational Domain | DMARC-Eintrag |
---|---|---|
beispiel@sub.example.com | example.com | _dmarc.sub.example.com |
Auch in diesem Fall ist die Suche beim ersten Durchgang abgeschlossen, da ein DMARC-Eintrag für die Sub-Domain existiert und die übergeordnete Domain example.com
mit der Organizational Domain übereinstimmt.
E-Mail Adresse | Organizational Domain | DMARC-Eintrag |
---|---|---|
beispiel@sub.example.com | example.com | _dmarc.example.com |
NUR wenn für die Mail-Domain sub.example.com
kein DMARC-Eintrag _dmarc.sub.example.com
existiert, wird eine zweite Suche auf die Organizational Domain durchgeführt.
E-Mail Adresse | Organizational Domain | DMARC-Eintrag |
---|---|---|
beispiel@sub2.sub1.example.com | example.com | _dmarc.example.com |
beispiel@sub2.sub1.example.com | example.com |
Dieser Fall ist sehr speziell und kommt nur selten vor.
Hier ist zwarsub2
eine Sub-Domain von der übergeordneten Domain sub1.example.com
aber diese stimmt NICHT mit der Organizational Domain überein. Selbst wenn ein DMARC-Eintrag für sub1.example.com
existiert, gilt er nicht für diese E-Mail-Adresse!
DNS-Eintrag für DMARC prüfen
Prüfen Sie, ob der DNS-TXT-Eintrag bereits aktiv ist. Je nach Hoster bzw. DNS-Server kann es mehrere Stunden dauern, bis DNS-Änderungen verfügbar sind.
Verwenden Sie hierzu folgendes Kommando:
# host -t txt _dmarc.example.com
Wenn Sie folgende Ausgabe erhalten, ist Ihr DNS-TXT-Eintrag aktiv:
# host -t txt _dmarc.example.com _dmarc.example.com descriptive text "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s; pct=100; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=1;"
Wenn Sie folgende Ausgabe erhalten, ist Ihr DNS-TXT-Eintrag noch nicht aktiv:
# host -t txt _dmarc.example.com Host _dmarc.example.com not found: 3(NXDOMAIN)
DMARC-Reporting
Was ist das?
Der aggregierte Report enthält Informationen zur Nutzung der Mail-Domain. Er gibt Auskunft darüber, welche Mailserver E-Mails über die Mail-Domain versendet haben.
Beispiel:
From: Domain | IP-Adresse | PTR | E-Mail Anzahl | DMARC-Policy | Grund | SPF (Ergebnis) | DKIM (Ergebnis) | Reporter |
---|---|---|---|---|---|---|---|---|
example.com | 88.88.88.88 | mailserver.example.com | 5 | none | none | pass | pass | example.com |
example.com | 99.99.99.99 | spam.host.de | 2 | reject | spf/dkim fail | fail | none | example.com |
Dieser Report sagt aus, dass insgesamt 7 Nachrichten mit der Domain example.com
an die Domain example.com
versendet wurden.
Legitim waren aber nur 5 dieser E-Mails. Nämlich die, die tatsächlich von dem Mailserver mailserver.example.com
versendet wurden. Ein weitere Mailserver spam.host.de
hat 2 E-Mails mit der Domain example.com
versendet.
Allerdings schlug sowohl die SPF-Prüfung, als auch die DKIM-Prüfung fehl, da dieser Mailserver nicht als authorisierter Mailserver im SPF-Eintrag hinterlegt ist und keine (gültige) DKIM-Signatur gefunden werden konnte.
Der forensische Report geht deutlich weiter in die Tiefe. Er gibt inhaltliche Auskunft über die E-Mail, die fehlerhaft oder mißbräuchlich versendet wurde.
Beispiel:
From | To | Sender-IP | Return-Path | AuthservID | Subject | SPF (Ergebnis) | DKIM (Ergebnis) | Datum |
---|---|---|---|---|---|---|---|---|
spam@spam.host.de | user@example.com | 192.168.0.1 | spam@spam.host.de | spammail.de | Sie haben gewonnen!! | fail | none | 01.01.1970 |
DMARC-Reporting und Datenschutz
Als Firma sollten Sie daher auf das Reporting der forensischen Daten verzichten, da Sie ansonsten Gefahr laufen, gegen die DSGVO zu verstossen. Sie würden, ohne Zustimmung, personenbezogene Daten an Dritte (den Domain-Inhaber) weitergeben.
Zwar können durch Redacting (Schwärzen) die erfassten sensiblen Daten im forensischen Report unkenntlich gemacht werden, dies ist aber mit einem zusätzlichen Aufwand verbunden.
(Siehe auch Gutachten DMARC und DSGVO)
In dieser Dokumentation wird nur der aggregierte Report behandelt, da das Versenden forensischer Reports von OpenDMARC nicht unterstützt wird.
Aggregated Reports versenden
Damit unser Mailserver ebenfalls Report-Anforderungen der Gegenstellen bedienen kann, muss zunächst der Inhalt der Datei, in der OpenDMARC die Informationen über den E-Mail-Verkehr speichert, regelmäßig in eine Datenbank überführt werden. Dieser Import und das anschliessende Versenden des aggregierten Reports wird über einen Cron-Job durchgeführt. Der Cron-Job sorgt auch dafür, dass unsere Datenbank nicht überläuft und löscht automatisch Einträge, die älter als 90 Tage sind.
Das Versenden des aggregierten Reports ist optional und für die eigentliche Funktion von DMARC nicht erforderlich. Es ist aber empfohlen, da die Daten zur Nutzung bzw. zum Mißbrauch einer Mail-Domain für den Domain-Inhaber hilfreich sind.
Forensische Reporte werden aktuell nicht von OpenDMARC unterstützt!
MySQL-Datenbank einrichten
Stellen Sie eine Verbindung zum MySQL-Server her:
# mysql -u root -p
Erstellen Sie eine Datenbank opendmarc
und einen Benutzer opendmarc
. Räumen Sie dem Benutzer die benötigten Rechte ein.
Ersetzen Sie SicheresPasswortVerwenden!
durch ein eigenes Passwort.
CREATE DATABASE opendmarc;
CREATE USER 'opendmarc'@'localhost' IDENTIFIED BY 'StarkesPasswortVerwenden';
GRANT ALL PRIVILEGES ON opendmarc.* TO 'opendmarc'@'localhost' IDENTIFIED BY 'StarkesPasswortVerwenden';
FLUSH PRIVILEGES;
QUIT;
Importieren Sie das OpenDMARC-MySQL-Schema in die Datenbank opendmarc
:
# mysql -u root -p opendmarc < /usr/share/doc/opendmarc/schema.mysql
Cron-Job einrichten
Erstellen Sie die Datei/etc/cron.hourly/opendmarc-reporting
mit folgendem Inhalt:
# nano /etc/cron.hourly/opendmarc-reporting
#!/bin/bash
#
#########################################################################
# Script Name : opendmarc-reporting #
# Description : Imports data from OpenDMARC's opendmarc.dat file into #
# a MySQL Database and sends DMARC failure reports to #
# domain owners. #
# -based on a script from Hamzah Khan #
# Args : #
# #
# Version : 1.00 #
# Last Update : 05.02.2019 #
# Author : Twilight #
# Email : twilight@twlnet.com #
# Web: : https://www.twilight-networks.com #
#########################################################################
# Tested with : Ubuntu 16.04 LTS #
# OpenDmarc 1.3.1 #
#########################################################################
set -e
# Database Connection
DBHOST='localhost'
DBUSER='opendmarc'
DBPASS='StarkesPasswortVerwenden'
DBNAME='opendmarc'
# History-File
HISTDIR='/var/run/opendmarc'
HISTFILE='opendmarc'
# Report-Settings
REPORT_INTERVAL='86400'
REPORT_SENDER='no-reply.dmarc.reports@example.com'
REPORT_ORG='example.com'
REPORT_EXPIRE='90'
# Normaly there is no need to change anything below this comment line!
#########################################################################
# Check history file exists
touch ${HISTDIR}/${HISTFILE}.dat
# Move history file to Temp-Dir for processing
mv ${HISTDIR}/${HISTFILE}.dat /tmp/${HISTFILE}.$$
# Import Temp history file data to MySQL DB and send reports
/usr/sbin/opendmarc-import -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} < /tmp/${HISTFILE}.$$
/usr/sbin/opendmarc-reports -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} --interval=$REPORT_INTERVAL --report-email=$REPORT_SENDER --report-org=$REPORT_ORG
/usr/sbin/opendmarc-expire -dbhost=${DBHOST} -dbuser=${DBUSER} -dbpasswd=${DBPASS} -dbname=${DBNAME} --expire=$REPORT_EXPIRE
# Delete temp history file
rm -rf *.$$
#end
# opendmarc-reporting
[...]
DBPASS='StarkesPasswortVerwenden'
[...]
REPORT_SENDER='no-reply.dmarc.reports@example.com'
REPORT_ORG='example.com'
[...]
Vergeben Sie die benötigte Berechtigung, damit die Datei ausgeführt werden kann:
# chmod 755 /etc/cron.hourly/opendmarc-reporting
Reports empfangen
DMARC-Reports werden normalerweise alle 24 Studen an die, in Ihrem DMARC-Eintrag hinterlegten, E-Mail Adressen versendet (rua= / ruf =
).
Der Report wird im XML-Format bereitgestellt und ist daher nur sehr umständlich auszuwerten.
Allerdings gibt es zahlreiche, zum Teil kostenlose, Anbieter, die die Auswertung der Reports übernehmen und grafisch darstellen. In Ihrem DMARC-Eintrag muss dann die E-Mail Adresse des entsprechenden Anbieters hinterlegt werden. Diese E-Mail Adresse wird automatisch geniert, sobald Sie bei dem entsprechenden Anbieter ein Konto angelegt haben.
Folgende Anbieter kann ich empfehlen:
Beispiel dmarcian:
Inbetriebnahme und Test
Dienste neustarten
Starten Sie die neuen Dienste neu und kontrollieren Sie, ob die Dienste ohne Fehlermedlungen starten:
# service postfix restart # service postfix status [...] # service opendkim restart # service opendkim status [...] # service opendmarc restart # service opendmarc status [...]
Test-E-Mail empfangen
Verwenden Sie das Kommando tail
um den E-Mail-Empfang in Echtzeit zu testen:
# tail -f /var/log/syslog
Senden Sie eine E-Mail in Richtung Ihres Mailservers (von extern)
Die Ausgabe sollte in etwa so aussehen:
[...] Jan 01 12:00:01 mailserver policyd-spf[23322]: Pass; identity=mailfrom; ... [...] Jan 01 12:00:01 mailserver opendkim[978]: 52C5FA0288: sender.example.com [192.168.0.1] not internal Jan 01 12:00:01 mailserver opendkim[978]: 52C5FA0288: not authenticated Jan 01 12:00:02 mailserver opendkim[978]: 52C5FA0288: DKIM verification successful Jan 01 12:00:02 mailserver opendkim[978]: 52C5FA0288: s=20161025 d=example.com SSL [...] Jan 01 12:00:02 mailserver opendmarc[15484]: implicit authentication service: mailserver.example.com Jan 01 12:00:03 mailserver opendmarc[15484]: 52C5FA0288: example.com pass [...]
Test-E-Mail versenden
Auf der Seite Mail-Tester.com können Sie Ihren Mailserver bewerten lassen. Die Seite sieht zwar auf den ersten Blick etwas verspielt aus, erfüllt aber absolut Ihren Zweck.
Senden Sie eine E-Mail an die, auf der Seite angegebene, E-Mail Adresse und prüfen Sie das Ergebnis. Wenn alles korrekt ist, sollten Sie folgende Bewertung erhalten:
Verwenden Sie das Kommando tail
um den E-Mail-Empfang in Echtzeit zu testen:
# tail -f /var/log/syslog
Versenden Sie eine E-Mail zu einem externen Empfänger
Die Ausgabe sollte in etwa so aussehen:
[...] Feb 11 10:11:41 mailserver opendkim[978]: C07F8A0050: DKIM-Signature field added (s=201901, d=example.com) [...] Feb 11 10:11:41 mailserver opendmarc[15484]: implicit authentication service: mailserver.example.com Feb 11 10:11:41 mailserver opendmarc[15484]: C07F8A0050: ignoring mail from example.com [...]
Abschluss
Wenn alle Tests erfolgreich verliefen, können Sie Ihren Mailserver ab sofort mit SPF, DKIM und DMARC nutzen.