Sender Policy Framework (SPF) Einträge verwalten (Teil 1)

Das Verwalten der Sender Policy Framework (SPF) Einträge kann in komplexeren Umgebungen aufwändig werden, denn es gibt ein paar Dinge zu beachten:

  • Die SPF Einträge sollten regelmäßig kontrolliert und auf Aktualität geprüft werden
  • Alle unter der Absender Domain sendenden Mailserver müssen im SPF Eintrag aufgenommen werden, hier sind insbesondere Drittanbieter Lösungen zu prüfen, wie beispielsweise CRM, Webserver, Smarthosts, etc
  • Wenn DNS Namen im im SPF Eintrag aufgenommen werden (beispielsweise mit Include), dann dürfen nicht mehr wie 10 DNS Lookups durchgeführt werden, bis eine IP ermittelt wurde
  • Ein SPF Eintrag darf nicht länger als 255 Zeichen sein
  • Eine Domain darf nur einen SPF Eintrag haben

Der SPF Eintrag ist mittlerweile sehr wichtig für den Versand von Mails geworden. Die meisten Provider und Empfänger lehnen Mails von Servern welche nicht im SPF der Domain stehen ab. Auch Mails von Domains ohne SPF Eintrag werden meist direkt im Spam landen. Google und Yahoo setzen bereits seit Februar 2024 DKIM und SPF voraus.

In dem folgenden Beispiel ist mein SPF Eintrag dargestellt:

Sender Policy Framework (SPF) Einträge verwalten

In meinem Fall ist es noch recht einfach, denn es gibt nur drei Einträge im SPF: Ein Webserver mit einer IP, ein Mailrelay und Office 365. Hinter den Kulissen, führt dies aber schon zu 4 DNS Lookups:

Sender Policy Framework (SPF) Einträge verwalten

Für meine Domain ist die Verwaltung noch kein großer Aufwand, da ich mich ja im Prinzip nur um die Aktualität des einen Eintrags mit der IP Adresse 185.3.235.230 kümmern muss. Die restlichen Einträge werden durch die Anbieter wie beispielsweise Microsoft für Office 365 gepflegt.

In größeren Umgebungen mit vielen verschiedenen Mailsystemen kommt es aber schnell zu einem Problem: Es dürfen nur maximal 10 DNS Lookups durchgeführt werden, um die IP Adresse des Mailservers festzustellen. Manche Anbieter veröffentlichen ihre SPF Einträge etwas ungünstig, wie beispielsweise hier zu sehen ist:

Sender Policy Framework (SPF) Einträge verwalten

Zu sehen sind hier ein SPF welcher wiederum einen Eintrag für IPv4 und einen für IPv6 Adressen enthält. Würde ich diesen Anbieter bei mir hinzufügen, wäre ich schon bei insgesamt 7 DNS Lookups. Viel Luft nach oben ist dann nicht mehr. So etwas wie im Beispiel oben gibt es übrigens auch noch eine Nummer schlimmer, da stehen dann gerne noch mal Hostnamen in den Einträgen. Die Grenze von 10 Lookups ist also schnell erreicht.

Geglättete oder abgeflachte SPF Einträge

Um das Limit der 10 DNS Lookups zu umgehen, kommen oft geglättete / abgeflachte (Flatted) SPF Einträge zum Einsatz (beides meint das Gleiche). Im Prinzip ist es einfach: Alle Domains im SPF Eintrag werden aufgelöst und die IP Adressen direkt in den SPF Eintrag eingetragen. Für meine Domain frankysweb.de würde der abgeflachte Eintrag beispielsweise so aussehen:

v=spf1 ip4:185.3.235.230 ip4:46.243.95.179 ip4:46.243.95.180 ip4:128.127.70.0/26 ip4:89.22.108.0/24 ip4:192.162.87.0/24 ip4:109.237.142.0/24 ip4:46.243.88.174 ip4:46.243.88.175 ip4:46.243.88.176 ip4:46.243.88.177 ip4:40.92.0.0/15 ip4:40.107.0.0/16 ip4:52.100.0.0/15 ip4:52.102.0.0/16 ip4:52.103.0.0/17 ip4:104.47.0.0/17 -all

Wie man hier sehen kann, wurden einfach alle DNS Namen, welche vorher per Include eingebunden waren, direkt in die IPs übersetzt. Somit muss kein DNS Lookup mehr durchgeführt werden. In größeren Umgebungen kann man somit das Limit von 10 DNS Lookups umgehen.

Hier kommt allerdings direkt die nächste Einschränkung: Ein SPF Eintrag darf nur maximal 255 Zeichen lang sein. Der SPF Eintrag oben ist schon 321 Zeichen lang.

Ich müsste hier also einen SPF Eintrag für die Domain frankysweb.de erstellen und die IPs auf zwei SPF Einträge aufteilen, welche ich dann wieder im Domain SPF via Include aufnehmen kann. Das hört sich jetzt vielleicht komplizierter an, als es ist, daher hier mal ein Beispiel:

Die Domain frankysweb.de erhält den folgenden SPF Eintrag:

frankysweb.de. IN TXT "v=spf1 include:_spf1.frankysweb.de include:_spf2.frankysweb.de -all"

Wie hier zu sehen ist, sind hier zwei DNS Einträge via Include aufgenommen (_spf1.frankysweb.de und _spf2.frankysweb.de). Dies führt zu 2 DNS Lookups. Hinter den DNS Einträgen _spf1.frankysweb.de und _spf2.frankysweb.de gibt es jetzt die IP Listen:

_spf1.frankysweb.de. IN TXT "v=spf1 v=spf1 ip4:185.3.235.230 ip4:46.243.95.179 ip4:46.243.95.180 ip4:128.127.70.0/26 ip4:89.22.108.0/24 ip4:192.162.87.0/24 ip4:109.237.142.0/24 ip4:46.243.88.174 ip4:46.243.88.175 ip4:46.243.88.176 ip4:46.243.88.177 ip4:40.92.0.0/15 -all"

und

_spf2.frankysweb.de. IN TXT "v=spf1 ip4:40.107.0.0/16 ip4:52.100.0.0/15 ip4:52.102.0.0/16 ip4:52.103.0.0/17 ip4:104.47.0.0/17 -all"

Der erste Eintrag hat 242 Zeichen, der zweite 101 Zeichen. Die Grenzwerte werden somit also eingehalten und die Welt ist in Ordnung. Das Prinzip hinter abgeflachten / geglätteten / komprimierten SPF Einträgen (oder wie man es auch immer nennen möchte) ist also eigentlich recht einfach: Man nehme alle DNS Einträge aus dem SPF, ermittle daraus die IPs und teile diese auf möglichst wenige DNS Einträge auf.

Dies hat allerdings einen Nachteil: Man muss seine SPF Einträge genau im Blick behalten. Ändert beispielsweise Microsoft den Eintrag hinter spf.protection.outlook.com, dann muss ich auch meine abgeflachten SPFs für frankysweb.de anpassen. Ich muss also Änderungen von Drittanbietern mitbekommen und in dem Fall auch neue IPs in meine SPFs aufnehmen, oder alte IPs löschen, dabei mehrere DNS Einträge und die Anzahl der Zeichen und das Lookup Limit im Blick haben. Ohne Automatisierung ist dies kaum möglich.

Die Möglichkeiten für die Automatisierung schauen wir uns dann im Teil 2 an.

4 Gedanken zu „Sender Policy Framework (SPF) Einträge verwalten (Teil 1)“

    • Zwischen den spitzen Klammern sollte stehen:

      Hence, with the introduction of DKIM (and later DMARC), it is no longer recommended to use -all for typical email scenarios. It is recommended to use the ~all term instead.

      The DMARC specification also warns about this rfc7489, section 10.1

      Antworten
    • Vermutlich machen das „viele“ automatisch, denn bei DKIM gibts ja ein ähnliches Problem. Dafür gibts dann diverse DNS Record Splitter. Bspw. auch bei mailhardener, die dir das dann entsprechend formatiert abliefern.

      Antworten

Schreibe einen Kommentar