So funktioniert die SPF-Prüfung
Unser Server fragt den öffentlichen Resolver von Cloudflare nach den TXT-Einträgen der Domain und wählt den, der mit v=spf1 beginnt. Dann sucht er den SPF-Eintrag jeder Domain, die in einem include oder redirect genannt wird, und der Domains, die diese nennen, bis zu 20 Einträge und sechs Ebenen tief, so wie es ein empfangender Mailserver täte. Er kontaktiert die Mailserver selbst nie.
Jeder Term wird nach den Regeln von RFC 7208 gelesen. Ein Empfänger prüft die Adresse des Servers, der eine Nachricht gesendet hat, von links nach rechts gegen die Terme; der erste Treffer entscheidet, und sein Qualifier sagt, wie: + Pass, - Fail, ~ Soft Fail, ? Neutral. Ein Term ohne Qualifier besteht.
Die Terme include, a, mx, ptr, exists und redirect kosten je eine DNS-Abfrage, ebenso die in jedem eingebundenen Eintrag. RFC 7208 erlaubt 10 pro Prüfung: Darüber hört der Empfänger auf, und SPF schlägt für alle E-Mails der Domain fehl. ip4, ip6 und all kosten nichts. Im Einfüge-Modus wird der Eintrag in Ihrem Browser gelesen, sodass nur seine eigenen Abfragen gezählt werden.
SPF-Mechanismen und Qualifier
Die Terme, die ein SPF-Eintrag enthalten kann, was jeder trifft und was er von den 10 Abfragen kostet:
| Term | Trifft zu, wenn der sendende Server … | Abfragen |
|---|---|---|
ip4 | eine IPv4-Adresse hat, die in der Adresse oder im Bereich liegt, etwa ip4:192.0.2.0/24. | 0 |
ip6 | eine IPv6-Adresse hat, die in der Adresse oder im Bereich liegt, etwa ip6:2001:db8::/32. | 0 |
a | eine Adresse hat, die der A- oder AAAA-Eintrag der Domain nennt (diese Domain oder a:other.example). | 1 |
mx | einer der Mailserver der Domain ist (ihre MX-Einträge). | 1 |
include | den SPF-Eintrag einer anderen Domain besteht, meist den eines Mail-Dienstes. | 1 + die seines Eintrags |
exists | einen Namen existieren lässt, den der Empfänger aus der Nachricht bildet; für Sonderfälle. | 1 |
ptr | einen Reverse-DNS-Namen in der Domain hat. Nicht verwenden: langsam und unzuverlässig. | 1 |
all | ein beliebiger Server ist. Steht immer zuletzt: Es legt fest, was mit jedem nicht aufgeführten Server geschieht. | 0 |
redirect= | vom Eintrag einer anderen Domain erlaubt wird; wird verwendet, wenn in diesem nichts gepasst hat. | 1 + die seines Eintrags |
exp= | nie: Er nennt nur einen Text, der eine Ablehnung erklärt. | 0 |
Qualifier
- + Pass (Standard, wenn nichts dasteht): Der Server darf senden.
- - Fail: Der Server darf nicht senden; Empfänger können die E-Mail ablehnen.
- ~ Soft Fail: wahrscheinlich nicht erlaubt; die E-Mail wird angenommen, aber als verdächtig behandelt.
- ? Neutral: kein Urteil, als gäbe es keinen SPF-Eintrag.
Beispiel
example.com veröffentlicht „v=spf1 ip4:192.0.2.10 mx include:spf.mailer.example ~all“. Der Term ip4 kostet keine Abfrage, mx kostet eine, und das include kostet eine plus das, was der Eintrag von spf.mailer.example braucht. Dieser Eintrag lautet „v=spf1 ip4:198.51.100.0/24 include:spf2.mailer.example -all“: eine weitere Abfrage, und spf2.mailer.example listet nur Adressbereiche. Das ergibt 3 von 10. Eine Nachricht von 192.0.2.10 besteht beim ersten Term; eine von 203.0.113.5, die kein Term aufführt, erreicht ~all und erhält Soft Fail, wird also meist angenommen, aber als verdächtig behandelt.
Fragen
Was ist ein SPF-Eintrag und wie prüfe ich ihn?
SPF (Sender Policy Framework) ist ein TXT-Eintrag im DNS einer Domain, der die Server auflistet, die für sie E-Mails senden dürfen, und mit v=spf1 beginnt. Um ihn zu prüfen, geben Sie oben die Domain ein: Der Checker findet den Eintrag, folgt seinen Includes und zeigt, was jeder Term bedeutet und was falsch ist. Um einen Eintrag vor der Veröffentlichung zu prüfen, wechseln Sie in den Modus „Ein eingefügter Eintrag“.
Wie behebe ich „Too many DNS lookups“ bei SPF?
SPF erlaubt 10 DNS-Abfragen pro Prüfung, wobei jedes include, a, mx, ptr, exists und redirect zählt, auch in eingebundenen Einträgen. Über 10 schlägt der Eintrag mit einem dauerhaften Fehler (permerror) fehl. Entfernen Sie Includes von Diensten, die Sie nicht mehr nutzen, ersetzen Sie a und mx durch die ip4- und ip6-Adressen, für die sie stehen, und senden Sie Massenmails von einer Subdomain mit eigenem SPF-Eintrag. Auch Flattening (die Adressen eines Dienstes in Ihren Eintrag zu kopieren) funktioniert, veraltet aber, wenn der Dienst sie ändert.
Kann eine Domain zwei SPF-Einträge haben?
Nein. Eine Domain darf nur einen TXT-Eintrag veröffentlichen, der mit v=spf1 beginnt. Bei zwei Einträgen geben Empfänger einen dauerhaften Fehler zurück, und SPF schlägt für alle E-Mails fehl. Fassen Sie sie zusammen: Behalten Sie ein v=spf1, nehmen Sie die Terme beider hinein und enden Sie mit einem einzigen ~all oder -all. Subdomains haben eigene Einträge und zählen nicht.
Was ist der Unterschied zwischen ~all und -all?
-all (Fail) sagt Empfängern, dass E-Mails von nicht aufgeführten Servern nicht erlaubt sind und abgelehnt werden können. ~all (Soft Fail) sagt, dass sie wahrscheinlich nicht erlaubt sind: Sie werden meist angenommen und als verdächtig markiert. Mit DMARC folgen Empfänger ohnehin der DMARC-Richtlinie, daher ist ~all die übliche Wahl; -all passt zu einer Domain, die gar keine E-Mails sendet. Vermeiden Sie ?all und +all: Sie schützen nichts.
Schützt SPF die From-Adresse, die Menschen sehen?
Nicht allein. SPF prüft die Domain der Bounce-Adresse (Return-Path), die Menschen nie sehen, sodass ein Fälscher SPF mit einer eigenen Domain bestehen und trotzdem Ihre in From zeigen kann. DMARC schließt diese Lücke: Es verlangt, dass SPF oder DKIM für die Domain in der From-Zeile besteht. Mit dem DMARC-Checker sehen Sie, ob das bei Ihnen der Fall ist.