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:
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:
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:
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.