SPF (Sender Policy Framework) ist ein Protokoll, das den Versand von [[email|E-Mails]] überprüft, um sicherzustellen, dass sie von einem autorisierten Server bzw einer autorisierten [[IP]] gesendet wurden. SPF verwendet [[dns|DNS]] Datensätze, um zu bestätigen, welche Server berechtigt sind, E-Mails für eine bestimmte Domain zu senden. Wenn eine E-Mail von einem Server kommt, der nicht in den SPF Einträgen der Domain aufgeführt ist, kann der Empfänger dies als verdächtig oder potenziell gefälscht betrachten. Siehe auch [[DMARC]] und [[DKIM]]
[[https://datatracker.ietf.org/doc/html/rfc7208|Offizielles RFC 7208]]
Mails über Outlook: "include:spf.protection.outlook.com"
v=spf1 ip4:192.168.0.1 ip6:2001:db8::1 a mx include:spf.example.com -all
=====Tags=====
^ Tag ^ Description ^ Example ^
| Version (v) | Pflichtfeld und muss an erster Stelle stehen | v=spf1 |
| mx | Bei alleiniger Verwendung (mx) werden die IPs in den A-Einträgen der MX-Einträge für die aktuelle Domäne verwendet. Wenn Sie dahinter einen Domänen- oder Hostnamen einfügen, werden die A-Einträge der MX-Einträge für diese Domäne (mx:domain.com) verwendet. Dadurch können Sie Ihr DNS aktualisieren, ohne eine Änderung am SPF-Eintrag vornehmen zu müssen. | mx oder mx:domain.com |
| a | Wenn es alleine verwendet wird, verwendet es den A-Eintrag der aktuellen Domäne (a). Wenn Sie dahinter einen Domänen- oder Hostnamen einfügen, wird dieser A-Eintrag (a:domain.com) verwendet. Dadurch können Sie Ihr DNS aktualisieren, ohne eine Änderung am SPF-Eintrag vornehmen zu müssen. | a oder a:domain.com |
| ptr | Die Verwendung dieses Tags gemäß RFC 7208 wird NICHT empfohlen. Mit dieser Option werden die PTR-Datensätze validiert, um sicherzustellen, dass mindestens ein A-Datensatz für einen PTR-Hostnamen mit der ursprünglichen Client-IP übereinstimmt. Bei alleiniger Verwendung (ptr) sucht es nach der aktuellen Domäne. Sie können auch eine Domäne (ptr:domain.com) angeben, damit die Validierung anhand dieser Domäne erfolgt. | ptr oder ptr:domain.com |
| ip4 | Gibt eine IPv4-IP-Adresse (1.2.3.4) oder einen IP-CIDR-Bereich (1.2.3.4/32) an, die E-Mails für die Domäne senden darf. | ip4:1.2.3.4 (IP Address) or ip4:208.123.79.45/24 (IP Range) |
| ip6 | Gibt eine IPv6-IP-Adresse (2001:0db8:0123:4567:89ab:cdef:1234:5678) oder einen IP-CIDR-Bereich (2001:0db8:0123::/36) an, die E-Mails für die Domäne senden darf. | ip6:2001:0db8:0123:4567:89ab:cdef:1234:5678 (IP Addresse) oder 2001:0db8:0123::/36 (IP Range) |
| include | Dieses Tag ermöglicht die Aufnahme des gesamten SPF-Eintrags einer anderen Domain oder Subdomain. Dies wird häufig verwendet, wenn Sie zum Versenden von E-Mails einen Drittanbieterdienst nutzen oder über mehrere Domänen/Subdomänen verfügen, die E-Mails senden. Beispiel: include:_spf.google.com. Durch die Angabe dieses Tags teilen Sie dem Empfänger-Mailserver mit, dass alle in _spf.google.com enthaltenen IP-Adressen verifizierte Absenderquellen für Ihre E-Mail sind. \\ \\ Wenn Sie mehrere Absender verwenden, fügen Sie vor jeder Domain ein include:-Tag ein (z. B. v=spf1 mx ip4:1.2.3.4 include:_spf.google.com include:mcsv.com ~all). Dies signalisiert, dass sowohl Google (include:_spf.google.com) als auch Mailchimp (include:mcsv.com) zugelassene Absender sind und ihre IP-Adressen sich für die Domain authentifizieren sollten. | include:_spf.google.com |
| exists | Dieses Tag sucht einen A Eintrag in der verwendeten Domäne, um festzustellen, ob einer vorhanden ist. | exists:google.com |
| all | Dieses Tag MUSS am Ende Ihres Datensatzes stehen und Anweisungen geben, was ein Empfänger tun soll, wenn es keine Übereinstimmung mit Ihrem SPF Datensatz gibt. Es gibt drei gängige Optionen: \\ \\ -all (Fail): E-Mails von Servern oder IP-Adressen, die nicht im SPF-Eintrag aufgeführt sind, sollten abgelehnt werden. \\ ~all (SoftFail): E-Mails von Servern / IP-Adressen, die nicht im SPF-Eintrag aufgeführt sind, sollten akzeptiert, aber markiert werden. \\ +all (Pass): Alle Server können E-Mails im Namen Ihrer Domain senden. Wir empfehlen dringend, diese Option nicht zu verwenden. \\ ?all (Neutral): Wird als None / Keine Richtlinie interpretiert. Wir empfehlen dringend, diese Option nicht zu verwenden. | ~all |
| redirect | Der Umleitungsmodifikator wird zum Festlegen von Domänen verwendet, die dieselbe SPF-Konfiguration von Mechanismen und Tags verwenden. Wenn domain-a.com einen SPF-Eintrag wie "v=spf1 redirect=domain-b.com" bedeutet das, dass der SPF-Eintrag für "domain-b.com" anstelle von "domain-a.com" verwendet werden sollte. Die Mails von domain-a.com würden dann über domain-b.com umgeleitet. | "v=spf1 redirect=domain-b.com" |
| exp | Der Erklärungsmodifikator wird zum Festlegen einer Nachricht oder URL verwendet, die dem E-Mail-Server des Empfängers angezeigt werden soll – um Informationen zu Fehlern zu erläutern. Makros werden häufig mit diesem Modifikator verwendet. Wenn ein exp-Modifikator in einem SPF-Eintrag verwendet wird, führt dies dazu, dass der Empfängerserver im resultierenden TXT-Eintrag nach dem exp-Wert sucht. | Ein in RFC-7208 Abschnitt 6.2 bereitgestelltes Beispiel hierfür zeigt eine Erklärung von exp=explain.spf.%{d}, die eine TXT-Eintragssuche nach EXPLAIN._spf.example.com auslösen und eine Meldung wie "Mail from example.com should only be sent by its own servers" oder "See https://%{d}/why.html?s=%{S}&i=%{I}". Im ersten Fall wird eine Meldung angezeigt, im zweiten ein Link. |
| Macros | Mithilfe von Makros werden Zeichenfolgen erstellt, die durch Bestandteile der Nachricht ersetzt werden. Beispielsweise würde ein Makro, das d enthält, bedeuten, dass es durch die in der Nachricht gefundene Domäne ersetzt werden sollte. In einem anderen Fall würde i meinen, dass es durch die IP-Adresse ersetzt werden sollte, die beim Senden der E-Mail verwendet wurde. Macro Definitions: \\ \\ Makros im "term": \\ \\ * s = \\ * l = local-part of \\ * o = domain of \\ * d = \\ * i = \\ * p = the validated domain name of (do not use) \\ * v = the string "in-addr" if is ipv4, or "ip6" if is ipv6 \\ * h = HELO/EHLO domain \\ \\ Makros im "exp" text: \\ \\ * c = SMTP client IP (easily readable format) \\ * r = domain name of host performing the check \\ * t = current timestamp \\ \\ [[https://datatracker.ietf.org/doc/html/rfc7208#section-7.4|RFC-7208 Section 7.4]] zeigt folgendes Beispiel: Der Sender ist strong-bad@email.example.com. Die SMTP Client IP is 192.0.2.3. Die client IPv6 ist 2001:db8::cb01. Der PTR domain name von der client IP ist mx.example.org. \\ \\ * %{s} strong-bad@email.example.com \\ * %{o} email.example.com \\ * %{d} email.example.com \\ * %{d4} email.example.com \\ * %{d3} email.example.com \\ * %{d2} example.com \\ * %{d1} com \\ * %{dr} com.example.email \\ * %{d2r} example.email \\ * %{l} strong-bad \\ * %{l-} strong.bad \\ * %{lr} strong-bad \\ * %{lr-} bad.strong \\ * %{l1r-} strong \\ \\ Examples macros: \\ \\ * %{ir}.%{v}._spf.%{d2} 3.2.0.192.in-addr._spf.example.com \\ * %{lr-}.lp._spf.%{d2} bad.strong.lp._spf.example.com \\ * %{lr-}.lp.%{ir}.%{v}._spf.%{d2} bad.strong.lp.3.2.0.192.in-addr._spf.example.com \\ * %{ir}.%{v}.%{l1r-}.lp._spf.%{d2} 3.2.0.192.in-addr.strong.lp._spf.example.com \\ * %{d2}.trusted-domains.example.net example.com.trusted-domains.example.net \\ \\ IPv6: \\ \\ * %{ir}.%{v}._spf.%{d2} 1.0.b.c.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6._spf.example.com |
nslookup -type=txt mx.domain.local
Es können FQDNs, IP Adressen oder Verweise auf einen anderen SPF Record im DNS Eintrag integriert werden (include). Abschliessend wird eine Richtlinie festgelegt, wie mit allen nicht gelisteten Systemen verfahren werden soll (-all).
* Die zu überprüfende Domäne wird aus dem Email-Header «mail from:» generiert. Dies ist nicht die Domäne, welche der Benutzer in seinem Mail-Client sieht.
* SPF unterstützt höchstens 10 Namensauflösungen, um alle IP-Adressen zu erlangen. Wird die Anzahl überschritten, schlägt der Test fehl.
* Weiterleitungen können die Validierung scheitern lassen, wenn die «mail from:» Adresse des ursprünglichen Mails übernommen wird.