SPF ist die Abkürzung von Sender Policy Framework und definiert eine DNS basierte Schutzfunktion gegen den missbräuchlichen E-Mail Versand über eine Domain.
Das Problem beim E-Mail Versand ist, dass jedes Skript oder auch Programm sehr einfach E-Mails mit einem gefälschten Absender versenden kann. Als Beispiel kann man mit einem einfachen PHP Skript, beliebig viele E-Mails versenden und sich dabei als z.B. facebook.com ausgeben.
Da ein E-Mail Server (MTA – Mail Transfer Agent) anhand der eigentlichen E-Mail nicht überprüfen kann ob eine E-Mail auch wirklich vom Absender stammt, wurde das sog. SPF Verfahren entwickelt, welches es ermöglicht zu prüfen ob ein E-Mail Server auch wirklich E-Mails von z.B. facebook.com versenden darf.
Dazu wird im DNS System der jeweiligen Domain ein SPF-Record erstellt, der eine genaue Anweisung enthält, welche IP-Adressen E-Mails für die jeweilige Domain versenden dürfen und wie im fehlerfall mit der E-Mail umzugehen ist.
Während dem empfang einer E-Mail, prüft der MTA ob es einen entsprechenden DNS-Record (z.B. _spf.example.net) gibt und gleicht die darin enthaltene IP-Adresse mit der aktuellen Verbindung ab. Entspricht die IP-Adresse des Absende-MTAs nicht mit dem SPF-Record überein entscheidet die Direktive und der Qualifikator (z.B. ~Softfail) über die weitere Behandlung der E-Mail.
Ein SPF-Record wird als TXT-Record zur DNS Zone einer Domain hinzugefügt. Dieser wird mit der Subdomain _spf angelegt (z.B. _spf.example.net).
Der Aufbau des SPF-Records erfolgt mit einer oder mehreren Direktiven. Jeder dieser Ausdrücke wird durch ein Leerzeichen getrennt.
Beispiel SPF-Record:
v=spf1 a mx ~all
SPF-Record den TCRserver.de für alle Kunden automatisch erstellt:
v=spf1 a mx include:_spf.tcrserver.de ~all
Übersicht über den Aufbau eines SPF-Records
Als erstes eine Tabelle der Direktiven mit denen ein Absender MTA beschrieben werden kann und deren (vereinfacht erklärten) Funktion:
a | Ein A- (IPv4) oder AAAA-Record (Ipv6) der aktuellen (oder explizit angegeben) Domain. Dadurch wird z.B. einem Webserver erlaubt über ein Kontaktformular E-Mails zu versenden. Achtung: Zusammen mit DKIM und DMARC kann und wird dies zu Problemen führen. Deswegen E-Mails immer über einen Mailserver (SMTP Plugin) verschicken! |
mx | Ein MX-Record der aktuellen (oder explizit angegeben) Domain. |
ip4 | Eine oder mehrere explizit angegeben IPv4 Adressen. |
ip6 | Eine oder mehrere explizit angegeben IPv6 Adressen. |
include | Bindet den SPF-Record einer anderen Domain mit ein. Nützlich für Newsletter oder Helpdesk Tools wie MailChimp, ZenDesk, etc. |
Die nachfolgende Tabelle enthält die möglichen Anweisungen wie mit einer E-Mail umgegangen wird.
+all | (Pass): Diese Anweisung gibt an, dass die IP-Adresse oder der Mechanismus als „bestätigt“ angesehen wird und E-Mails im Namen der Absenderdomain senden darf. Wenn die SPF-Überprüfung eine Übereinstimmung mit einem + -Mechanismus ergibt, wird die E-Mail normalerweise zugestellt. |
-all | (Fail): Gibt an, dass die IP-Adresse oder der Mechanismus nicht als autorisiert betrachtet wird, E-Mails im Namen der Absenderdomain zu senden. Wenn die SPF-Überprüfung eine Nichtübereinstimmung mit einem - -Mechanismus ergibt, könnte die E-Mail als Spam behandelt oder abgelehnt werden. |
~all | (SoftFail – Empfohlene Default Einstellung): Hier signalisiert die Anweisung, dass die IP-Adresse oder der Mechanismus zwar als „möglicherweise bestätigt“ betrachtet wird, jedoch nicht strikt notwendig ist. E-Mails von solchen Quellen werden normalerweise zugestellt, könnten aber als verdächtig SPAM gekennzeichnet werden. |
?all | (Neutral): Neutral signalisiert, dass es keine klare Anweisung zur Zustellung oder Ablehnung der E-Mail gegeben wird. ?all wird nur zum Testen verwendet und hat normalerweise keine direkte Auswirkung auf die Zustellung. |