Wird das 10-DNS-Lookup-Limit in der SPF-Spezifikation normalerweise erzwungen?


24

Meines Wissens nach gibt die SPF-Spezifikation an, dass ein E-Mail-Empfänger nicht mehr als 10 DNS-Lookups durchführen muss, um alle zulässigen IP-Adressen für einen Absender zu erfassen. Wenn also ein SPF-Datensatz include:foo.com include:bar.com include:baz.comüber SPF-Datensätze verfügt und diese drei Domänen jeweils über SPF-Datensätze mit 3 includeEinträgen verfügen , sind jetzt bis zu 3 + 3 + 3 + 3 = 12 DNS-Suchvorgänge möglich.

  1. ist mein Verständnis oben richtig?

  2. Ich benutze nur 2 oder 3 Dienste für meine Domain und bin bereits weit über diesem Limit. Wird dieses Limit normalerweise (oder jemals) von großen / kleinen E-Mail-Anbietern durchgesetzt?


3
RFC4408 s10.1 besagt, dass " SPF-Implementierungen die Anzahl der Mechanismen und Modifikatoren, die DNS-Lookups ausführen, auf höchstens 10 pro SPF-Check beschränken MÜSSEN ", dies ist jedoch eine Einschränkung der Anzahl der Mechanismen und Modifikatoren, die ... Lookups ausführen , nicht die Anzahl der Prüfungen, die sie durchführen. Können Sie uns eine genauere Vorstellung davon geben, wie Ihr SPF-Rekord diese Grenze Ihrer Meinung nach überschreitet?
MadHatter unterstützt Monica am

@ MadHatter danke für diese Info! Ich habe meine Frage geklärt.
John Bachir

Möglicherweise sind es sogar mehr als 12, wenn sich die Includes auf CNAME- oder MX-Einträge beziehen und nicht nur auf IP-Adressen. Es sei denn, ich verstehe falsch, worauf sich @ MadHatter bezieht.
Simon East

Antworten:


29

Sowohl libspf2(C) als auch Mail::SPF::Query(Perl, in sendmail-spf-milter verwendet ) implementieren ein Limit von 10 DNS-verursachenden Mechanismen , wobei letzteres die MX- oder PTR-Limits nicht anwendet (AFAICT). libspf2begrenzt jeden von mx und ptr auch auf 10.

Mail::SPF(Perl) hat ein Limit von 10 DNS-verursachenden Mechanismen und ein Limit von 10 Suchvorgängen pro Mechanismus, pro MX und pro PTR. (Die beiden Perl-Pakete werden normalerweise , jedoch nicht standardmäßig, in MIMEDefang verwendet .)

pyspfBegrenzung auf 10 für "Lookups", MX, PTR, CNAME; aber es ausdrücklich vervielfacht MAX_LOOKUPS von 4 während des Betriebs. Sofern nicht im "strengen" Modus, werden MAX_MX und MAX_PTR mit 4 multipliziert.

Ich kann keine kommerziellen / proprietären Implementierungen kommentieren, aber die obigen (außer pyspf) implementieren eindeutig eine Obergrenze von 10 DNS-Triggermechanismen (mehr dazu unten), geben oder nehmen, obwohl sie in den meisten Fällen beim Ausführen außer Kraft gesetzt werden können. Zeit.

In Ihrem speziellen Fall , dass Sie richtig sind, ist es 12 enthält und dass überschreitet die Grenze von 10 würde ich die meisten SPF Software zurückzukehren „PermError“, erwarten jedoch , werden Ausfälle wirken sich nur auf die letzte „enthalten“ Anbieter (n) , weil die Zählung wird als laufende Summe berechnet: SPF- Mechanismen werden von links nach rechts ausgewertet, und Überprüfungen werden bei einem Durchlauf vorzeitig beendet. Dies hängt also davon ab, wo in der Reihenfolge der sendende Server angezeigt wird.

Der Weg dahin besteht darin, Mechanismen zu verwenden, die keine DNS-Lookups auslösen, z. B. ip4und ip6, und dann, mxwenn möglich, bis zu 10 weitere Namen zu verwenden, von denen jeder mehr als eine IP haben kann.

Da SPF zu willkürlichen DNS-Anforderungen mit potenziell exponentieller Skalierung führt, kann es leicht für DOS / Amplification-Angriffe ausgenutzt werden. Es gibt bewusst niedrige Grenzwerte, um dies zu verhindern: Es skaliert nicht so, wie Sie es möchten.


10 Mechanismen (ausschließlich Mechanismen + der "Redirect" -Modifikator), die DNS-Lookups verursachen, sind jedoch nicht genau dasselbe wie 10 DNS-Lookups. Selbst "DNS-Lookups" können interpretiert werden. Sie wissen nicht im Voraus, wie viele diskrete Lookups erforderlich sind, und Sie wissen nicht, wie viele diskrete Lookups Ihr rekursiver Resolver möglicherweise ausführen muss (siehe unten).

RFC 4408 §10.1 :

SPF-Implementierungen MÜSSEN die Anzahl der Mechanismen und Modifikatoren, die DNS-Lookups durchführen, auf höchstens 10 pro SPF-Check begrenzen, einschließlich aller Lookups, die durch die Verwendung des "include" -Mechanismus oder des "redirect" -Modifikators verursacht werden. Wird diese Anzahl bei einer Überprüfung überschritten, MUSS ein PermError zurückgegeben werden. Die Mechanismen "include", "a", "mx", "ptr" und "exists" sowie der Modifikator "redirect" zählen für diese Grenze. Die Mechanismen "all", "ip4" und "ip6" erfordern keine DNS-Suche und werden daher nicht auf diese Grenze angerechnet.

[...]

Bei der Auswertung der Mechanismen "mx" und "ptr" oder des Makros% {p} MUSS ein Grenzwert von nicht mehr als 10 MX- oder PTR-RRs nachgeschlagen und überprüft werden.

Sie können also bis zu 10 Mechanismen / Modifikatoren verwenden, die DNS-Lookups auslösen. (Der Wortlaut hier ist schlecht: Es scheint nur die Obergrenze der Grenze anzugeben, eine bestätigende Implementierung könnte eine Grenze von 2 haben.)

§5.4 für den mx- Mechanismus und §5.5 für den ptr- Mechanismus haben jeweils ein Limit von 10 Lookups dieser Art von Namen, und das gilt nur für die Verarbeitung dieses Mechanismus, z.

Um DoS-Angriffe (Denial of Service) zu vermeiden, DÜRFEN bei der Evaluierung eines "mx" -Mechanismus NICHT mehr als 10 MX-Namen nachgeschlagen werden (siehe Abschnitt 10).

Das heißt, Sie verfügen möglicherweise über 10-mx-Mechanismen mit bis zu 10 MX-Namen, sodass jeder dieser Mechanismen 20 DNS-Vorgänge (jeweils 10 MX + 10 A-DNS-Suchvorgänge) für insgesamt 200 auslösen kann. Ähnliches gilt für ptr oder % {p} , Sie 10 ptr- Mechanismen nachschlagen können , daher 10x10 PTRs, jeder PTR erfordert auch einen A-Lookup, wiederum insgesamt 200.

Dies ist genau das, was die 2009.10-Testsuite überprüft (siehe " Verarbeitungsgrenzen " -Tests).

Es gibt keine klar festgelegte Obergrenze für die Gesamtzahl der DNS-Suchvorgänge für Clients pro SPF-Prüfung. Ich berechne sie als implizit 210, Geben oder Nehmen. Es gibt auch einen Vorschlag, das Volumen der DNS-Daten pro SPF-Prüfung zu begrenzen. Es wird jedoch kein tatsächliches Limit vorgeschlagen. Sie können eine grobe Schätzung erhalten, da SPF-Datensätze auf 450 Byte begrenzt sind (was leider mit allen anderen TXT-Datensätzen geteilt wird), aber die Gesamtsumme kann 100 KB überschreiten, wenn Sie großzügig sind. Beide Werte sind eindeutig offen für potenziellen Missbrauch als Verstärkungsangriff, und genau das ist, was Sie laut §10.1 vermeiden müssen.

Empirische Daten legen nahe , dass in Datensätzen insgesamt 10 Suchmechanismen implementiert sind (überprüfen Sie den SPF für microsoft.com, der anscheinend einige Anstrengungen unternommen hat, um ihn auf genau 10 zu beschränken). Es ist schwierig, Beweise für einen Fehler bei zu vielen Suchvorgängen zu sammeln, da der vorgeschriebene Fehlercode einfach "PermError" ist, der alle Arten von Problemen abdeckt ( DMARC- Berichte könnten dabei jedoch hilfreich sein).

Die OpenSPF-FAQ beschränkt sich auf insgesamt 10 DNS-Lookups und nicht auf die genaueren 10 DNS-Verursachungsmechanismen oder -Umleitungen. Diese FAQ ist wohl falsch, da sie tatsächlich sagt:

Da es ein Limit von 10 DNS-Lookups pro SPF-Eintrag gibt, muss eine IP-Adresse angegeben werden, [...]

Dies steht im Widerspruch zum RFC, der die Grenzen einer "SPF-Prüfung" auferlegt, die DNS-Suchvorgänge auf diese Weise nicht einschränkt und eindeutig angibt, dass ein SPF-Eintrag ein einzelner DNS-Text-RR ist. Die FAQ implizieren, dass Sie die Zählung neu starten, wenn Sie ein "Include" verarbeiten, da dies ein neuer SPF-Datensatz ist. Was für ein Chaos.


DNS-Lookups

Was ist eigentlich eine DNS-Suche? Als Benutzer . Ich würde " ping www.microsoft.com" in Betracht ziehen , eine einzelne DNS - Suche durchzuführen: Es gibt einen Namen, von dem ich erwarte, dass er zu einer IP wird. Einfach? Leider nicht.

Als Administrator weiß ich, dass www.microsoft.com möglicherweise kein einfacher A-Eintrag mit einer einzelnen IP-Adresse ist, sondern ein CNAME, der wiederum eine andere diskrete Suche benötigt, um einen A-Eintrag zu erhalten eher als der Resolver auf meinem Desktop. Heute ist www.microsoft.com für mich eine Kette von 3 CNAMEs, die schließlich als A-Eintrag auf akamaiedge.net enden. Das sind (mindestens) 4 DNS-Abfragevorgänge für jemanden. SPF kann CNAMEs mit dem "ptr" -Mechanismus sehen, ein MX-Eintrag sollte jedoch kein CNAME sein.

Als DNS-Administrator weiß ich schließlich, dass die Beantwortung (fast) jeder Frage viele diskrete DNS-Vorgänge, einzelne Fragen und Antworttransaktionen (UDP-Datagramme) umfasst - vorausgesetzt, ein rekursiver Resolver startet beim DNS-Stamm und arbeitet sich auf seine Weise vor down: .commicrosoft.comwww.microsoft.comnach bestimmten Datensatztypen (NS, A usw.) fragen und mit CNAMEs umgehen. Sie können dies in Aktion mit sehen dig +trace www.microsoft.com, obwohl Sie wahrscheinlich aufgrund von Geolocation-Tricks nicht genau die gleiche Antwort erhalten (Beispiel hier ). (Diese Komplexität ist noch ein bisschen komplexer, da SPF-Huckepacks für TXT-Datensätze und veraltete Grenzwerte von 512 Byte für DNS-Antworten möglicherweise dazu führen, dass Abfragen über TCP wiederholt werden.)

Was betrachtet SPF als Lookup? Es ist dem Administrator- Standpunkt wirklich am nächsten , es muss die Besonderheiten jedes DNS-Abfragetyps kennen (aber nicht den Punkt, an dem einzelne DNS-Datagramme oder -Verbindungen gezählt werden müssen).


Mit diesem Tool können Sie feststellen
Gaia

Würden Sie mir bitte die ELI5-Version Ihres Beitrags geben? Wo sollte ich weniger als 10 Einträge in emailstuff.org/spf haben ? Auf der Registerkarte DNS? In der Registerkarte "Ergebnis" sehe ich nur 5 Einträge (jeweils mit vielen IPs.
Gaia

2
Hier sind zwei weitere SPF-Tools, die hilfreich erschienen: dmarcian.com/spf-survey - Zeigt eine leuchtend rote Fehlermeldung an, wenn Ihr SPF 10 Lookups überschreitet. emailstuff.org/spf - klicken Sie auf die Registerkarte DNS, sobald Sie den Bericht erhalten haben (aber Sie müssen sie selbst zählen).
Medmunds

Ich bin immer noch verwirrt. Können Sie ein Beispiel dafür geben, wie sich ein "Lookup" von einem "Mechanismus" unterscheidet? Oder ist die Schlussfolgerung, dass es eigentlich egal ist - dass Sie trotzdem innerhalb von 10 Nachschlägen bleiben sollten?
Simon East

1
@SimonEast fügte hinzu, dass SPF die Auswirkungen der einzelnen DNS-Eintragstypen verstehen muss, damit eine grobe Schätzung der DNS-"Kosten" erstellt werden kann, ohne alle Beans zu zählen.
mr.spuratic

11

RFC4408 s10.1 schränkt , wie Sie bereits bemerkt haben, die DNS-Aktivität ein. Speziell:

SPF-Implementierungen MÜSSEN die Anzahl der Mechanismen und Modifikatoren, die DNS-Lookups durchführen, auf höchstens 10 pro SPF-Check begrenzen, einschließlich aller Lookups, die durch die Verwendung des "include" -Mechanismus oder des "redirect" -Modifikators verursacht werden. Wird diese Anzahl bei einer Überprüfung überschritten, MUSS ein PermError zurückgegeben werden. Die Mechanismen "include", "a", "mx", "ptr" und "exists" sowie der Modifikator "redirect" zählen für diese Grenze. Die Mechanismen "all", "ip4" und "ip6" erfordern keine DNS-Suche und werden daher nicht auf diese Grenze angerechnet. Der Modifikator "exp" zählt nicht für dieses Limit, da die DNS-Suche zum Abrufen der Erklärungszeichenfolge erfolgt, nachdem der SPF-Datensatz ausgewertet wurde.

und darüber hinaus

Bei der Auswertung der Mechanismen "mx" und "ptr" oder des Makros% {p} MUSS ein Grenzwert von nicht mehr als 10 MX- oder PTR-RRs nachgeschlagen und überprüft werden.

Beachten Sie, dass Ersteres eine Beschränkung der Anzahl der Mechanismen darstellt , nicht der Anzahl der durchgeführten Suchvorgänge. aber es ist immer noch eine Grenze.

Soweit ich das beurteilen kann, werden diese Grenzwerte ziemlich streng durchgesetzt. Sie sollen verhindern, dass Benutzer willkürlich komplexe SPF-Datensätze erstellen und diese für DoS-Server verwenden, die ihre Datensätze überprüfen, indem sie in einer riesigen Kette von DNS-Suchvorgängen angehalten werden. Das ist also im besten Interesse aller, die einen SPF-Prüfer für SPF implementieren ehre sie.

Sie haben Recht zu bemerken, dass verschachtelte Includes wahrscheinlich das größte Problem mit diesen Limits verursachen. Wenn Sie sich dazu entschließen, mehrere Domains einzuschließen, von denen jede stark von Includes Gebrauch macht, können Sie diese relativ schnell durchgehen. Es ist nicht allzu schwer, Beispiele für Menschen zu finden , für die dies konkrete Probleme verursacht hat .

Das Ergebnis scheint zu sein, dass im Allgemeinen Probleme auftreten, wenn sich die Benutzer dazu entschließen, sowohl SPF als auch mehrere verschiedene und unterschiedliche Unternehmen für die Bearbeitung ihrer ausgehenden E-Mails zu verwenden. Ich schließe aus Ihrer Frage, dass Sie in diese Kategorie passen. SPF scheint nicht dazu gedacht zu sein, Menschen zu dienen, die sich dafür entscheiden . Wenn Sie tun dies darauf bestehen, werden Sie wahrscheinlich eine Art von cron - Job auf Ihrem DNS - Server haben müssen , dass ständig alle die SPF - Einträge auswertet Sie einschließen gewünscht hätte, drückt sie als eine Reihe von ip4:und ip6:Mechanismen (auf die Anzahl davon Es gibt keine Beschränkung) und veröffentlicht das Ergebnis erneut als SPF-Datensatz.

Vergessen Sie nicht, mit einem zu beenden -all, oder die ganze Übung war sinnlos.


Ihr Tool scheint jetzt nicht verfügbar zu sein, @ JánSáreník
Simon East

@SimonEast Ich kann nichts tun, wenn ein Moderator einen Beitrag löscht. spf-tools sind auf github (versuchen zu suchen spf-tools github), ich bin einer der Autoren, es ist freie Software, die der Community etwas zurückgeben soll, von der ich so viel mitgenommen habe , und ich würde mich freuen, wenn sie jemand anderem hilft. Eigenwerbung nennen sie es. Und kein Raum für Diskussionen.

@ JánSáreník Oh, wie komisch, jetzt machen MadHatter und meine Kommentare aus dem Zusammenhang keinen Sinn. Hmm. Ah, gut.
Simon East

@ SimonEast, entschuldigen Sie das Löschen dieser Kommentare. Ich habe es getan und wusste nicht, dass die anderen Kommentare dadurch aus dem Zusammenhang geraten.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.