Sender Policy Framework (SPF) ist ein Dienst, der bereitgestellt wird, um nicht als Spam-Absender identifiziert zu werden.
postfix-policyd-spf ist eine voll funktionsfähige Engine zur SPF-Prüfung unter Postfix. Der Daemon umfasst eine Vielzahl von Whitelist-Mechanismen und Richtlinienoptionen, um die unterschiedlichsten Systemanforderungen zu erfüllen. postfix-policyd-spf-perl wurde auf Perl implementiert, weiter auf Python gibt es postfix-policyd-spf-python, dieses das Python-SPF-Modul (spf) verwendet. Als Postfix Modul wird RFC 7208 des Sender Policy Framework (SPF) unterstützt.
Hierbei werden im DNS (Domain Name System) zusätzliche Informationen in Form eines SPF-Records gespeichert. Dieser TXT-basierte SPF-Eintrag beinhaltet konkrete Informationen zu autorisierten Mailservern, wie Mail Transfer Agent (MTA).
Installation von Postfix policyd-spf
Die Installation auf Debian 10 und Debian 11 beginnt wie folgt als root:
$ apt install postfix-policyd-spf-python
Wird das Perl Modul bevorzugt, kann der Perl SPF-Milter wie folgt als root installiert werden.
$ apt install postfix-policyd-spf-perl
Nachdem postfix-policyd-spf-python, oder postfix-policyd-spf-perl installiert ist, Bearbeiten wir die Konfigurationsdatei des Postfix-Master-Prozesses.
$ vi /etc/postfix/master.cf
Um die Postfix Anweisung mit der Python SPF-Richtlinienprüfung zu starten, füge am Ende der Datei master.cf die folgenden Zeilen hinzu.
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
Bei der SPF-Richtlinienprüfung auf Perl implementierung wie folgt.
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/sbin/postfix-policyd-spf-perl
Speichere und schließe die Datei. Bearbeite als Nächstes die Postfix Hauptkonfigurationsdatei.
$ vi /etc/postfix/main.cf
Die folgenden Zeilen am Ende der Datei main.cf hinzufügen. Die erste Zeile gibt die Timeout-Einstellung für den Postfix-Policy-Agent an. Die folgenden Zeilen schränken eingehende E-Mails ein, indem der SPF-Eintrag überprüft wird und nicht autorisierte E-Mails abgelehnt werden.
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf
Hinweis! ist check_policy_service nicht die letzte Zeile unter dem Abschnitt smtpd_recipient_restrictions, dann muss ein Komma (,) am Zeilenende stehen. Kein Komma beim letzten Eintrag.
Speichere und schließe die Datei.
Sicherstellen das die user id „policyd-spf“ angelegt ist, Überprüfen lässt sich das mit id policyd-spf
. Das Systemkonto wird benötigt und kann, falls es fehlt wie folgt angelegt werden.
$ useradd -r -M policyd-spf -s /usr/sbin/nologin
Starte nun Postfix neu.
$ systemctl restart postfix
Wenn die nächste E-Mal von einer Domain mit einem SPF-Record im DNS empfangen wird, kann man die Ergebnisse der SPF-Prüfung im RAW-E-Mail-Header sehen. Der folgende Header gibt an, dass die E-Mail von einem autorisierten Absender Host versendet wurde.
policyd-spf[733750]: prepend Received-SPF: Pass
Die Ausgabe bei Verwendung von Postfix Policy-SPF mit Perl.
postfix/policy-spf[735983]: Policy action=PREPEND Received-SPF: pass
Python und Sender Policy Framework prüfen
Bei der Verwendung von postfix-policyd-spf-python muss Python, sowie das Python-SPF-Modul auf dem Server verhanden sein. Die Überprüfung kann wie folgt vorgenommen werden.
$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help('modules')
Ist Python auf dem System installiert, werden mit dem Befehl help('modules')
mehrere Module in Spalten angezeigt. Das Modul spf und spf_engine wird vorausgesetzt. Das Python Modul kann wie folgt hinzugefügt werden.
pip install pypolicyd-spf
SPF Record prüfen
Um ein SPF TXT Record einer Domain zu überprüfen, kann folgender Befehl in einem Linux Terminal ausgeführt werden.
$ dig TXT mydomain.net +short
"v=spf1 a mx ~all"
Bei der Verwendung von Windows, ist der nslookup Befehl aus einem Command Prompt auszuführen.
C:\> nslookup -type=TXT mydomain.net
"v=spf1 a mx ~all"