Sender Policy Framework (SPF) auf Debian Server

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, es wird das Python-SPF-Modul (spf) verwendet. Als Postfix Modul unterstützt es RFC 7208 des Sender Policy Framework (SPF).

Sender Policy Framework (SPF) auf Debian Server

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

Die SPF-Richtlinienprüfung auf der 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 SPF 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"

OpenVPN Verbindung starten aus KeePass

Nutzt man zur Systemverwaltung den KeePass Passwort Manager, bietet es sich an, die Verbindung und Authentifizierung direkt aus KeePass zu starten, hierfür das Tool Benutzer und Passwort über Variablen an ein anderes Programm übergeben kann, wie beispielsweise an ein FTP-Client oder an einen Browser. Praktisch wäre es auch, könnte man ein VPN Tunnel direkt aus KeePass starten.

In diesem Tutorial wird gezeigt, wie eine VPN Verbindung aus KeePass mit dem OpenVPN GUI gestartet wird.

KeePass OpenVPN Verbindung starten

In dem ein neuer Eintrag in KeePass erstellt wird, fügen wir bei User name das Ziel Gateway ein, und zwar der Dateiname der .ovpn Verbindungsdatei, diese im OpenVPN GUI erstellt wird, für die Verbindung zu einem VPN Router oder zu einer Firewall.

cmd://"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --config_dir %USERPROFILE%\OpenVPN\config\ --connect {USERNAME}

Die Zeile in des Feld URL einfügen, die Pfade entsprechen denen die während der Installation des OpenVPN GUI Setup bereitgestellt wurden. Werden ändere Verzeichnispfade verwendet, müssen diese angepasst werden.

Die VPN Verbindung wird nun in der KeePass Übersicht mit einem Doppelklick auf die URL Zeile, oder mit Ctrl+U gestartet.