Frage Wird das 10-DNS-Suchlimit in der SPF-Spezifikation normalerweise erzwungen?


Mein Verständnis ist, dass die SPF-Spezifikation spezifiziert, dass ein E-Mail-Empfänger nicht mehr als 10 DNS-Suchen machen sollte, um alle erlaubten IPs für einen Absender zu sammeln. Also wenn ein SPF-Record hat include:foo.com include:bar.com include:baz.com und diese drei Domänen haben jeweils SPF-Datensätze, die auch 3 haben include Einträge, jetzt sind wir bis zu 3 + 3 + 3 + 3 = 12 DNS-Lookups.

  1. Ist mein Verständnis oben korrekt?

  2. Ich verwende nur 2 oder 3 Dienste für meine Domain und bin schon weit über diese Grenze hinaus. Wird dieses Limit normalerweise (oder überhaupt) von großen / kleinen E-Mail-Anbietern durchgesetzt?


24
2018-03-26 17:12


Ursprung


RFC4408 s10.1 sagt, dass "SPF-Implementierungen MÜSSEN die Anzahl der Mechanismen und Modifikatoren, die DNS-Lookups durchführen, auf höchstens 10 pro SPF-Prüfung begrenzen", aber das ist eine Begrenzung für die Anzahl von Mechanismen und Modifikatoren, die ... nachschlagennicht die Anzahl der Überprüfungen, die sie machen. Könntest du uns eine klarere Vorstellung davon geben, wie du denkst, dass dein SPF-Rekord an dieser Grenze liegt? - MadHatter
@MadHatter danke für diese Info! Ich habe meine Frage geklärt. - John Bachir
Es könnte sogar mehr als 12 sein, wenn sich die Includes auf CNAME- oder MX-Datensätze und nicht nur auf IP-Adressen beziehen. Wenn ich nicht falsch verstehe, worauf sich MadHatter bezieht. - Simon East


Antworten:


Beide libspf2 (C) und Mail::SPF::Query (Perl, gebraucht in sendmail-SPF-Milter) ein Limit von 10 implementieren DNS-verursachende Mechanismen, aber Letzteres wendet nicht (AFAICT) die MX- oder PTR-Grenzwerte an. libspf2 begrenzt jeden von mx und ptr bis 10 auch.

Mail::SPF (perl) hat eine Grenze von 10 DNS verursachenden Mechanismen und eine Grenze von 10 Nachschlagewerken pro Mechanismus, pro MX und pro PTR. (Die beiden Perl - Pakete werden normalerweise, wenn auch nicht standardmäßig, in MIMEDefang.)

pyspf hat Grenzen von 10 für alle: "Lookups", MX, PTR, CNAME; aber Es multipliziert MAX_LOOKUPS während des Betriebs explizit mit 4. Außer im "strikten" Modus multipliziert es auch MAX_MX und MAX_PTR mit 4.

Ich kann kommerzielle / proprietäre Implementierungen nicht kommentieren, aber die obigen (außer pyspf) implementieren Sie eindeutig eine Obergrenze von 10 DNS-auslösenden Mechanismen (mehr dazu unten), Geben oder Nehmen, obwohl es in den meisten Fällen zur Laufzeit übersteuert werden kann.

In Ihrem speziellen Fall sind Sie richtig, es ist 12 umfasst und das überschreitet die Grenze von 10. Ich würde erwarten, dass die meisten SPF-Software "PermError" zurückgibt, jedoch, Fehler betreffen nur die endgültigen "eingeschlossenen" Anbieter, da die Anzahl als laufende Summe berechnet wird: SPF Mechanismen werden von links nach rechts ausgewertet und checks werden bei einem Durchlauf "früh aus", es kommt also darauf an, wo in der Sequenz der sendende Server erscheint.

Der Weg dahin besteht darin, Mechanismen zu verwenden, die keine DNS-Suchvorgänge auslösen, z. ip4 und ip6und dann verwenden mx wenn möglich, erhalten Sie bis zu 10 weitere Namen, von denen jeder mehr als eine IP haben kann.

Da SPF zu willkürlichen DNS-Anfragen mit potenziell exponentieller Skalierung führt, könnte es leicht für DOS / Amplifikationsangriffe ausgenutzt werden. Es hat bewusst niedrige Grenzen, um dies zu verhindern: Es skaliert nicht wie Sie wollen.


10 Mechanismen (streng Mechanismen + der "Redirect" Modifikator) verursacht DNS-Look-Ups sind jedoch nicht genau dasselbe wie 10 DNS-Lookups. Sogar "DNS-Lookups" sind für die Interpretation offen, Sie wissen nicht im Voraus, wie viele diskrete Lookups benötigt werden, und Sie wissen nicht, wie viele diskrete Lookups Ihr rekursiver Resolver ausführen muss (siehe unten).

RFC 4408 § 10.1:

SPF-Implementierungen MÜSSEN die Anzahl der Mechanismen und Modifikatoren begrenzen      das tun DNS-Lookups zu höchstens 10 pro SPF-Prüfung, einschließlich irgendwelche      Nachschlagevorgänge, die durch die Verwendung des "include" -Mechanismus oder des      "Redirect" Modifikator. Wenn diese Anzahl während einer Prüfung überschritten wird, a      PermError MUSS zurückgegeben werden. Die "include", "a", "mx", "ptr" und      "exists" -Mechanismen zählen ebenso wie der "redirect" -Modifikator      gegen diese Grenze. Die Mechanismen "all", "ip4" und "ip6" tun dies nicht      erfordern DNS-Lookups und zählen daher nicht gegen dieses Limit.

[...]

Bei der Evaluierung der Mechanismen "mx" und "ptr" oder des Makros% {p}      Es muss ein Limit von nicht mehr als 10 MX oder PTR RRs nachgeschlagen werden      überprüft.

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

§5.4 für die mx Mechanismus und §5.5 für die ptr Mechanismus haben jeweils eine Grenze von 10 Nachschlagen dieser Art von Namen, und das gilt nur für die Verarbeitung dieses Mechanismus, z.

Um Denial of Service (DoS) Attacken zu verhindern, dürfen während der      Bewertung eines "mx" -Mechanismus (siehe Abschnitt 10).

d. h., Sie können 10 mx-Mechanismen mit bis zu 10 MX-Namen haben, sodass jeder von ihnen 20 DNS-Operationen (10 MX + 10 A DNS-Suchen) für insgesamt 200 verursachen kann ptr oder % {p}, können Sie nachschlagen 10 ptr Mechanismen, also 10x10 PTRs, benötigt jeder PTR ebenfalls eine A-Suche, wiederum insgesamt 200.

Dies ist genau das, was 2009.10 Testsuite Schecks, siehe "Verarbeitungslimits"Tests.

Es gibt keine klar festgelegte Obergrenze für die gesamt Anzahl der Client-DNS-Lookup-Operationen pro SPF-Check, ich berechne es als implizit 210, geben oder nehmen. Es gibt auch einen Vorschlag, das Volumen der DNS-Daten pro SPF-Prüfung zu begrenzen, jedoch wird kein tatsächliches Limit vorgeschlagen. Sie können eine grobe Schätzung erhalten, da SPF-Aufzeichnungen auf 450 Bytes begrenzt sind (was leider mit allen anderen TXT-Aufzeichnungen geteilt wird), aber die Summe könnte 100 kB überschreiten, wenn Sie großzügig sind. Diese beiden Werte sind eindeutig offen für potenziellen Missbrauch als Amplifikationsangriff, und genau das ist laut §10.1 zu vermeiden.

Empirische Beweise legen nahe, a gesamt von 10 Nachschlage-Mechanismen wird üblicherweise in Datensätzen implementiert (schauen Sie sich den SPF für microsoft.com an, der anscheinend einige Längen erreicht hat, um ihn auf genau 10 zu halten). Es ist schwierig, Beweise für zu viele Nachschlagevorgänge zu sammeln, da der vorgeschriebene Fehlercode einfach "PermError" ist, der alle Arten von Problemen abdeckt (DMARC Berichterstattung könnte dabei helfen, aber).

Die OpenSPF-FAQ verewigt die Grenze von insgesamt "10 DNS-Lookups", anstatt der präziseren "10 DNS, die Mechanismen oder Redirects verursacht". Diese FAQ ist wohl falsch, da sie eigentlich sagt:

Da es eine Grenze von 10 DNS-Lookups pro SPF-Record gibt, geben Sie eine IP-Adresse [...]

was nicht mit dem RFC übereinstimmt, der die Grenzen für eine "SPF-Check" -Operation auferlegt, grenzt DNS-Lookup-Operationen auf diese Weise nicht ein und gibt klar an SPF-Datensatz ist ein einzelner DNS-Text RR. Die FAQ würde bedeuten, 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 eine "DNS-Suche" überhaupt? Als ein Nutzer. Ich würde überlegen "ping www.microsoft.com"Ein einzelnes DNS-Lookup": Es gibt einen Namen, von dem ich erwarte, dass er in eine IP umgewandelt wird. Einfach? Leider nicht.

Als Administrator Ich weiß, 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 Resolver auf meinem Desktop. Heute ist für mich www.microsoft.com eine Kette von 3 CNAMEs, die letztendlich als A-Record auf akamaiedge.net enden, das sind (mindestens) 4 DNS-Query-Operationen für jemanden. SPF kann CNAMEs mit dem "ptr" -Mechanismus sehen, ein MX-Record sollte jedoch kein CNAME sein.

Schließlich, als DNS-Administrator Ich weiß, dass das Beantworten von (fast) jeder Frage viele diskrete DNS-Operationen, individuelle Fragen und Antworttransaktionen (UDP-Datagramme) beinhaltet - unter der Annahme eines leeren Caches muss ein rekursiver Resolver beim DNS-Root beginnen und sich abarbeiten: .  → com → microsoft.com → www.microsoft.com nach bestimmten Arten von Datensätzen (NS, A usw.) nach Bedarf fragen und mit CNAMEs umgehen. Sie können dies in Aktion mit sehen dig +trace www.microsoft.com, obwohl Sie wahrscheinlich aufgrund von Geolokalisierungstricks nicht die exakt gleiche Antwort erhalten (Beispiel) Hier). (Es gibt sogar ein bisschen mehr zu dieser Komplexität, da SPF auf TXT-Datensätzen pendelt, und obsolete Grenzen von 512 Bytes bei DNS-Antworten bedeuten, Abfragen über TCP erneut zu versuchen.)

Was betrachtet SPF als Nachschlag? Es ist wirklich am nächsten Administrator Sichtweise muss es sich der Besonderheiten jedes DNS-Abfragetyps bewusst sein (aber nicht bis zu dem Punkt, an dem tatsächlich einzelne DNS-Datagramme oder Verbindungen gezählt werden müssen).


25
2018-03-27 12:07



Mit diesem Tool können Sie wissen, ob Sie mehr als 10 Suchvorgänge haben: tools.bevhost.com/pf - Gaia
Würdest du mir bitte die ELI5-Version deines Posts geben? Wo sollte ich weniger als 10 Einträge haben? emailstuff.org/spf ? Auf der Registerkarte DNS? In der Registerkarte 'Ergebnis' sehe ich nur 5 Einträge (jeder mit vielen IPs. - Gaia
Hier sind zwei weitere SPF-Tools, die hilfreich zu sein scheinen: dmarcian.com/pf-survey - zeigt eine hellrote Fehlermeldung, wenn Ihr SPF 10 Suchvorgänge ü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 nicht wirklich wichtig ist - dass Sie immer noch innerhalb von 10 Lookups halten sollten? - Simon East
@SimonEast hinzugefügt Erklärung, SPF muss die Auswirkungen der einzelnen Arten von DNS-Datensatz zu verstehen, so dass es eine grobe Schätzung der DNS "Kosten" erhalten kann, ohne tatsächlich alle Beans zu zählen. - mr.spuratic


RFC4408 s10.1 Wie Sie bereits bemerkt haben, schränken Sie die DNS-Aktivität etwas ein. Speziell:

SPF-Implementierungen MÜSSEN die Anzahl der Mechanismen und Modifikatoren begrenzen   das tun DNS Lookups zu höchstens 10 pro SPF Kontrolle, einschließlich irgendwelche Nachforschungen   verursacht durch die Verwendung des "include" -Mechanismus oder der "Redirect"   Modifikator. Wird diese Anzahl während einer Prüfung überschritten, MUSS ein PermError gesetzt werden   zurück. Die Mechanismen "include", "a", "mx", "ptr" und "exists"   sowie der Modifikator "redirect" zählen gegen dieses Limit. Das   "all", "ip4" und "ip6" -Mechanismen erfordern keine DNS-Lookups und   Zählen Sie deshalb nicht gegen diese Grenze. Der Modifikator "exp" nicht   Zähle gegen diese Grenze, weil die DNS-Suche die   Erklärung Zeichenfolge tritt auf, nachdem der SPF-Datensatz ausgewertet wurde.

und außerdem

Bei der Evaluierung der Mechanismen "mx" und "ptr" oder des Makros% {p}   Es muss ein Limit von nicht mehr als 10 MX oder PTR RRs nachgeschlagen werden   überprüft.

Beachten Sie, dass ersteres eine Begrenzung für die Anzahl von ist Mechanismen, nicht die Anzahl der durchgeführten Suchvorgänge; aber es ist immer noch eine Grenze.

Soweit ich das beurteilen kann, werden diese Beschränkungen ziemlich hart durchgesetzt. Sie sollen verhindern, dass Benutzer beliebig komplexe SPF-Datensätze erstellen und diese zu DoS-Servern verwenden, die ihre Datensätze überprüfen, indem sie sie in einer riesigen Kette von DNS-Suchvorgängen zum Stillstand bringen, so dass jeder einen SPF-Checker implementiert ehre sie.

Sie haben recht, wenn Sie bemerken, dass verschachtelte Includes wahrscheinlich das größte Problem mit diesen Limits verursachen, und wenn Sie sich entscheiden, mehrere Domains einzubeziehen, von denen jeder sich selbst stark beansprucht, dann können Sie ziemlich schnell darüber hinweggehen. Es ist nicht schwer zu finden Beispiele von Menschen, für die dies konkrete Probleme verursacht hat.

Das Ergebnis scheint zu sein, dass Probleme im Allgemeinen entstehen, wenn Leute sich entscheiden, zu verwenden beide SPF und mehrere unterschiedliche und unterschiedliche Unternehmen, die ihre ausgehenden E-Mails bearbeiten. Ich folge aus Ihrer Frage, dass Sie in diese Kategorie passen. SPF scheint nicht dazu gedacht zu sein, Leuten zu dienen, die sich dafür entscheiden. Wenn Sie darauf bestehen, müssen Sie wahrscheinlich eine Art von Cron-Job auf Ihrem DNS-Server haben, der ständig alle SPF-Datensätze auswertet, die Sie hätten einfügen wollen ip4: und ip6: Mechanismen (auf deren Anzahl es keine Begrenzung gibt) und veröffentlicht das Ergebnis als Ihren SPF-Datensatz.

Vergiss nicht, mit einem zu beenden -alloder die ganze Übung war sinnlos.


11
2018-03-27 07:18



Ihr Tool scheint jetzt nicht verfügbar zu sein, @ JánSáreník - Simon East
@SimonEast Es gibt nichts, was ich tun kann, wenn ein Moderator einen Beitrag löscht. SPF-Tools sind auf Github (versuchen Sie, nach spf-tools github), Ich bin einer der Autoren, es ist freie Software, die der Gemeinschaft, der ich so viel genommen habe, zurückgeben würde und glücklich wäre, wenn sie anderen hilft. Eigenwerbung nennen sie es. Und kein Platz für Diskussionen.
@ JánSáreník Oh wie seltsam, jetzt machen MadHatter und meine Kommentare keinen Sinn mehr aus dem Zusammenhang. Hmm. Ah, gut. - Simon East
@SimonEast, entschuldige mich für das Löschen dieser Kommentare. Ich tat es und wusste nicht, dass es die anderen Kommentare aus dem Zusammenhang heraus sehen würde.