Sender Policy Framework und Postfix
Mailserver (MTA) benötigen neben einem A Record, dem MX und dem PTR Eintrag, zusätzlich auch einen SPF-Datensatz im DNS.
Was sind SPF-Records
SPF (Sender Policy Framework) ist ein Verfahren zur Sender-Authentifizierung. SPF ist wie DKIM ein Datensatz vom Typ TXT des DNS, die dazu beitragen sollen, E-Mail-Spoofing zu verhindern und bei der Zustellung der eigenen E-Mails diese als legitim zu identifizieren. Auch soll verhindert werden das E-Mails beim Empfänger nicht im Junk-Mail-Ordner landen. Wenn eine Domain durch E-Mail-Spoofing missbraucht wird, landen die E-Mails wahrscheinlich im Spam-Ordner des Empfängers.
Der SPF-Record gibt an, welche Hosts oder IP-Adressen E-Mails im Namen einer Domain senden dürfen. Sie sollten nur dem eigenen Mailserver oder dem Server des Internetdienstanbieters erlauben, E-Mails für diese Domain zu senden.
SPF-Datensatz im DNS Erstellen
Ein SPF-Record ist ein DNS-Eintrag der zur DNS-Zone einer Domain hinzugefügt wird. Der SPF-Eintrag in einer DNS-Zone kann wie folgt aussehen:
1 2 |
@ IN TXT "v=spf1 a mx ~all" |
Bei der Domain-Verwaltung eines Internet-Webhosting Anbieter kann dies dann etwa wie folgt aussehen.

- TXT zeigt an, dass dies ein TXT-Datensatz ist.
- v=spf1 gibt an, dass dies ein SPF-Datensatz ist und die SPF-Datensatzversion SPF1 ist.
- mx bedeutet, dass alle in den MX-Datensätzen aufgeführten Hosts E-Mails für die Domain senden dürfen, alle anderen Hosts sind nicht zugelassen.
- ~all gibt an, dass E-Mails dieser Domain nur von Hosts stammen sollen, die im SPF-Datensatz angegeben sind. Von anderen Hosts gesendete E-Mails werden als gefälscht gekennzeichnet. Mögliche Alternativen sind +all, -all, ?all, diese jedoch selten verwendet werden.
Um zu überprüfen das der SPF-Record im öffentlichen Internet aufgelöst wird, ist das Dienstprogramm dig auf dem Linux Host wie folgt zur Abfrage anzuwenden:
1 2 3 |
$ dig domain.com TXT +short "v=spf1 a mx ~all" |
An einem Windows Computer kann nslookup in einer Eingabeaufforderung (cmd) ausgeführt werden, die Änderung kann je nach TTL eine Verzögerung haben:
1 2 |
C:\> nslookup -type=txt domain.com |
In der PowerShell dient Resolve-DnsName mit folgendem Befehl:
1 2 3 4 5 6 |
PS C:\> Resolve-DnsName -Name domain.com -type TXT | ft -a Name Type TTL Section Strings ---- ---- --- ------- ------- domain.com TXT 3485 Answer {v=spf1 a mx ~all} |
Es können auch Online SPF-Validator wie mxtoolbox verwendet werden, um zu überprüfen welche Hosts die E-Mails der eigenen Domain senden dürfen.
Postfix SPF Policy Agent pypolicyd-spf
Wir benötigen für unseren Postfix SMTP-Server noch die Anweisung, den SPF-Datensatz eingehender E-Mails zu überprüfen, um gefälschte E-Mails zu erkennen. Installiere hierzu als root das Paket pypolicyd-spf aus dem EPEL-Repository:
1 2 3 |
yum install epel-release yum install pypolicyd-spf |
Füge dann einen Benutzer für Policyd-SPF hinzu:
1 2 |
adduser -U -M -s /bin/false policyd-spf |
Bearbeite nun die Postfix-Master-Konfigurationsdatei master.cf:
1 2 3 4 5 |
vi /etc/postfix/master.cf policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/libexec/postfix/policyd-spf |
Füge die Zeilen am Ende der Datei master.cf hinzu, hierdurch wird Postfix angewiesen den SPF-Richtliniendämon zu starten. Policyd-SPF wird als Benutzer policyd-spf ausgeführt.
Policyd-SPF sollte nicht in einer chroot-Umgebung ausgeführt werden.
Speichere und schliesse nun die Datei. Bearbeite als Nächstes die Postfix-Hauptkonfigurationsdatei main.cf:
1 2 3 4 5 6 7 8 9 10 |
vi /etc/postfix/main.cf policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf, permit |
Die Zeile mit policyd-spf sollte nach reject_unauth_destination zu stehen kommen. Speichere anschlissend die Datei und starte dann Postfix neu:
1 2 |
systemctl restart postfix |
Wenn jetzt das nächste Mal eine E-Mail von deiner Domain mit einem SPF-Record empfangen wird, werden die SPF-Prüfergebnisse im raw E-Mail-Header angezeigt. Der folgende Header gibt an, dass der Absender der E-Mail von einem autorisierten Host gesendet wurde.
1 2 |
Received-SPF: Pass (mailfrom) identity=mailfrom; |
Postfix protokolliert mit syslog die SPF-Prüfergebnisse in maillog in etwa wie folgt.
1 2 |
Jul 19 07:10:38 mailhub policyd-spf[24382]: Pass; identity=helo; client-ip=12.34.56.78; helo=mail77-192.srv2.com; envelope-from=return@news.domain.com; receiver=max.muster@domain.com |