Il limite di ricerca 10-DNS nelle specifiche SPF è generalmente applicato?


24

La mia comprensione è che la specifica SPF specifica che un destinatario di posta elettronica non dovrebbe fare più di 10 ricerche DNS per raccogliere tutti gli IP consentiti per un mittente. Quindi se un record SPF ha include:foo.com include:bar.com include:baz.come quei tre domini ciascuno hanno record SPF che hanno anche 3 includevoci, ora siamo fino a 3 + 3 + 3 + 3 = 12 ricerche DNS.

  1. la mia comprensione sopra è corretta?

  2. Uso solo 2 o 3 servizi per il mio dominio e ho già superato questo limite. Questo limite è in genere (o mai) applicato dai provider di posta elettronica maggiori / minori?


3
RFC4408 s10.1 afferma che "Le implementazioni SPF DEVONO limitare il numero di meccanismi e modificatori che eseguono ricerche DNS al massimo a 10 per controllo SPF ", ma si tratta di una limitazione del numero di meccanismi e modificatori che eseguono ... ricerche , non il numero di controlli che fanno. Potresti darci un'idea più chiara di come pensi che il tuo record SPF stia cadendo in fallo di quel limite?
MadHatter supporta Monica il

@MadHatter grazie per quelle informazioni! ho chiarito la mia domanda.
John Bachir,

Potrebbero potenzialmente essere anche più di 12 se le inclusioni si riferiscono a record CNAME o MX anziché a soli indirizzi IP. A meno che non fraintenda a cosa si riferisca @ MadHatter.
Simon East,

Risposte:


29

Sia libspf2(C) che Mail::SPF::Query(perl, usati in sendmail-spf-milter ) implementano un limite di 10 meccanismi che causano DNS , ma quest'ultimo (AFAICT) non applica i limiti MX o PTR. libspf2limita anche ciascuno di mx e ptr a 10.

Mail::SPF(perl) ha un limite di 10 meccanismi che causano DNS e un limite di 10 ricerche per meccanismo, per MX e per PTR. (I due pacchetti perl sono comunemente, sebbene non di default, usati in MIMEDefang .)

pyspfha limiti di 10 su tutti: "ricerche", MX, PTR, CNAME; ma moltiplica esplicitamente MAX_LOOKUPS per 4 durante il funzionamento. A meno che in modalità "rigorosa", moltiplica anche MAX_MX e MAX_PTR per 4.

Non posso commentare implementazioni commerciali / proprietarie, ma quanto sopra (tranne pyspf) implementa chiaramente un limite superiore di 10 meccanismi di innesco DNS (più su quello sotto), dare o prendere, anche se nella maggior parte dei casi può essere ignorato in fase di esecuzione- tempo.

Nel tuo caso specifico hai ragione, è 12 include e supera il limite di 10. Mi aspetterei che la maggior parte dei software SPF restituisca "PermError", tuttavia i guasti influenzeranno solo i fornitori finali "inclusi" perché il conteggio verrà calcolato come totale parziale: i meccanismi SPF vengono valutati da sinistra a destra e i controlli si "anticipano" in un passaggio, quindi dipende da dove appare nella sequenza il server di invio.

Il modo per aggirare questo è di usare meccanismi che non attivano le ricerche DNS, ad esempio ip4e ip6, e quindi utilizzare mxse possibile in quanto ti porta fino a 10 altri nomi, ognuno dei quali può avere più di un IP.

Poiché SPF genera richieste DNS arbitrarie con ridimensionamento potenzialmente esponenziale, potrebbe essere facilmente sfruttato per attacchi DOS / amplificazione. Ha deliberatamente dei limiti bassi per evitarlo: non si ridimensiona nel modo desiderato.


10 meccanismi (rigorosamente meccanismi + il modificatore "reindirizzamento") che causano ricerche DNS non sono esattamente la stessa cosa di 10 ricerche DNS. Anche le "ricerche DNS" sono suscettibili di interpretazione, non sai in anticipo quante ricerche discrete sono necessarie e non sai quante ricerche discrete potrebbe essere necessario per il tuo risolutore ricorsivo (vedi sotto).

RFC 4408 §10.1 :

Le implementazioni SPF DEVONO limitare il numero di meccanismi e modificatori che eseguono ricerche DNS a un massimo di 10 per controllo SPF, comprese eventuali ricerche causate dall'uso del meccanismo "include" o del modificatore "reindirizzamento". Se questo numero viene superato durante un controllo, DEVE essere restituito un PermError. I meccanismi "include", "a", "mx", "ptr" ed "esiste" così come il modificatore "reindirizzamento" contano per questo limite. I meccanismi "all", "ip4" e "ip6" non richiedono ricerche DNS e pertanto non contano per questo limite.

[...]

Quando si valutano i meccanismi "mx" e "ptr" o la macro% {p}, DEVE esserci un limite di non più di 10 RR MX o PTR cercati e controllati.

Quindi è possibile utilizzare fino a 10 meccanismi / modificatori che attivano le ricerche DNS. (La formulazione qui è scarsa: sembra indicare solo il limite superiore del limite, un'implementazione di conferma potrebbe avere un limite di 2.)

§5.4 per il meccanismo mx e §5.5 per il meccanismo ptr hanno ciascuno un limite di 10 ricerche con quel tipo di nome, e questo vale solo per l'elaborazione di quel meccanismo, ad esempio:

Per prevenire gli attacchi Denial of Service (DoS), NON DEVONO essere cercati più di 10 nomi MX durante la valutazione di un meccanismo "mx" (vedere la Sezione 10).

cioè potresti avere meccanismi di 10 mx, con un massimo di 10 nomi MX, quindi ognuno di questi può causare 20 operazioni DNS (10 ricerche MX + 10 A DNS ciascuna) per un totale di 200. È simile per ptr o % {p} , tu può cercare 10 meccanismi ptr , quindi 10x10 PTR, ogni PTR richiede anche una ricerca A, ancora per un totale di 200.

Questo è esattamente ciò che verifica la suite di test 2009.10 , vedere i test " Limiti di elaborazione ".

Non esiste un limite superiore chiaramente indicato sul numero totale di operazioni di ricerca DNS client per controllo SPF, lo calcolo implicitamente come 210, do o take. C'è anche un suggerimento per limitare il volume di dati DNS per controllo SPF, tuttavia non viene suggerito alcun limite effettivo. È possibile ottenere una stima approssimativa poiché i record SPF sono limitati a 450 byte (che purtroppo è condiviso con tutti gli altri record TXT), ma il totale potrebbe superare i 100 kB se si è generosi. Entrambi questi valori sono chiaramente aperti al potenziale abuso come attacco di amplificazione, che è esattamente ciò che §10.1 dice che è necessario evitare.

L'evidenza empirica suggerisce che un totale di 10 meccanismi di ricerca è comunemente implementato nei record (controlla l'SPF per microsoft.com che sembra aver fatto di tutto per mantenerlo esattamente a 10). È difficile raccogliere prove del fallimento di troppe ricerche perché il codice di errore obbligatorio è semplicemente "PermError", che copre tutti i tipi di problemi (il reporting DMARC potrebbe essere d'aiuto in questo caso).

Le FAQ di OpenSPF perpetuano il limite di un totale di "10 ricerche DNS", piuttosto che il più preciso "10 DNS che causano meccanismi o reindirizzamenti". Questa FAQ è probabilmente errata poiché in realtà dice:

Poiché esiste un limite di 10 ricerche DNS per record SPF, è possibile specificare un indirizzo IP [...]

che è in disaccordo con la RFC che impone i limiti su un'operazione di "controllo SPF", non limita in questo modo le operazioni di ricerca DNS e afferma chiaramente che un record SPF è un singolo testo DNS RR. Le FAQ implicherebbero il riavvio del conteggio quando si elabora un "include" in quanto si tratta di un nuovo record SPF. Che casino.


Ricerche DNS

Che cos'è comunque una "ricerca DNS"? Come utente . Considererei " ping www.microsoft.com" coinvolgere una singola "ricerca" DNS: c'è un nome che mi aspetto di trasformare in un IP. Semplice? Purtroppo no.

Come amministratore so che www.microsoft.com potrebbe non essere un semplice record A con un singolo IP, potrebbe essere un CNAME che a sua volta ha bisogno di un'altra ricerca discreta per ottenere un record A, anche se probabilmente quello che il mio risolutore a monte probabilmente eseguirà piuttosto che il resolver sul mio desktop. Oggi, per me, www.microsoft.com è una catena di 3 CNAME che alla fine finiscono come record A su akamaiedge.net, ovvero (almeno) 4 operazioni di query DNS per qualcuno. SPF può vedere CNAME con il meccanismo "ptr", tuttavia un record MX non dovrebbe essere un CNAME.

Infine, come amministratore DNS so che rispondere (quasi) a qualsiasi domanda implica molte operazioni DNS discrete, singole domande e transazioni di risposta (datagrammi UDP) - supponendo una cache vuota, un risolutore ricorsivo deve iniziare dalla radice DNS e funzionare a modo suo down: .commicrosoft.comwww.microsoft.comrichiedere specifici tipi di record (NS, A ecc.) secondo necessità e trattare con CNAME. Puoi vederlo in azione con dig +trace www.microsoft.com, anche se probabilmente non otterrai la stessa risposta esatta a causa di un trucco di geolocalizzazione (esempio qui ). (C'è anche un po 'di più in questa complessità poiché i piggyback SPF sui record TXT e limiti obsoleti di 512 byte sulle risposte DNS potrebbero significare riprovare query su TCP.)

Cosa considera SPF come una ricerca? È davvero il più vicino al punto di vista dell'amministratore , deve essere consapevole delle specifiche di ciascun tipo di query DNS (ma non al punto in cui deve effettivamente contare i singoli datagrammi DNS o connessioni).


Questo strumento ti consente di sapere se hai più di 10 ricerche: tools.bevhost.com/spf
Gaia

mi daresti per favore la versione ELI5 del tuo post? Dove dovrei avere meno di 10 voci in emailstuff.org/spf ? Nella scheda DNS? Nella scheda 'risultato' vedo solo 5 voci (ognuna con un sacco di IP.
Gaia

2
Ecco altri due strumenti SPF che sembravano utili: dmarcian.com/spf-survey - mostra un messaggio di errore rosso vivo se il tuo SPF supera 10 ricerche. emailstuff.org/spf - fai clic sulla scheda DNS una volta ricevuto il rapporto (ma devi contarli tu stesso).
medmunds,

Sono ancora confuso. Potresti fornire un esempio di come una "ricerca" è diversa da un "meccanismo"? O è la conclusione che non importa davvero - che dovresti comunque mantenere entro 10 ricerche?
Simon East,

1
@SimonEast ha aggiunto una spiegazione, SPF deve comprendere le implicazioni di ciascun tipo di record DNS in modo che possa ottenere una stima approssimativa del "costo" DNS, senza contare effettivamente tutti i bean.
mr.spuratic il

11

RFC4408 s10.1 , come hai notato, pone alcuni limiti all'attività DNS. In particolare:

Le implementazioni SPF DEVONO limitare il numero di meccanismi e modificatori che eseguono ricerche DNS a un massimo di 10 per controllo SPF, comprese eventuali ricerche causate dall'uso del meccanismo "include" o del modificatore "reindirizzamento". Se questo numero viene superato durante un controllo, DEVE essere restituito un PermError. I meccanismi "include", "a", "mx", "ptr" ed "esiste" così come il modificatore "reindirizzamento" contano per questo limite. I meccanismi "all", "ip4" e "ip6" non richiedono ricerche DNS e pertanto non contano per questo limite. Il modificatore "exp" non conta per questo limite perché la ricerca DNS per recuperare la stringa di spiegazione si verifica dopo che il record SPF è stato valutato.

ed inoltre

Quando si valutano i meccanismi "mx" e "ptr" o la macro% {p}, DEVE esserci un limite di non più di 10 RR MX o PTR cercati e controllati.

Si noti che il primo è un limite al numero di meccanismi , non al numero di ricerche eseguite; ma è ancora un limite.

Per quanto ne so, sì, questi limiti sono applicati abbastanza duramente. Sono progettati per impedire alle persone di costruire record SPF arbitrariamente complessi e di utilizzarli per i server DoS che controllano i loro record interrompendoli in una vasta catena di ricerche DNS, quindi è nell'interesse di tutti coloro che implementano un checker SPF per onorali.

Hai ragione a notare che le inclusioni nidificate probabilmente causano il problema più grande con questi limiti e se decidi di includere più domini ognuno dei quali fa un uso intenso delle inclusioni, allora puoi superarle abbastanza rapidamente. Non è troppo difficile trovare esempi di persone per le quali questo ha creato problemi concreti .

Il risultato sembra essere che generalmente sorgono problemi quando le persone decidono di utilizzare sia SPF che diverse società distinte e disparate per gestire la posta elettronica in uscita. Ne deduco dalla tua domanda che rientri in quella categoria. SPF non sembra progettato per servire le persone che scelgono di farlo . Se insisti nel fare ciò, dovrai probabilmente avere una sorta di cron job sul tuo server DNS che valuta costantemente tutti i record SPF che avresti voluto includere, li esprime come una serie di ip4:e ip6:meccanismi (sul numero di cui non ci sono limiti) e pubblica nuovamente il risultato come record SPF.

Non dimenticare di finire con un -all, o l'intero esercizio è stato inutile.


Il tuo strumento ora sembra essere inattivo, @ JánSáreník
Simon East,

@SimonEast Non c'è niente che io possa fare quando un moderatore cancella un post. spf-tools è su github (prova a cercare spf-tools github), sono uno degli autori, è un software gratuito pensato per restituire alla comunità da cui ho preso così tanto e sarebbe felice se aiutasse qualcun altro. L'autopromozione lo chiamano. E nessuno spazio per la discussione.

@ JánSáreník Oh, che strano, ora MadHatter e i miei commenti non hanno senso fuori dal contesto. Hmm. Ah bene.
Simon East,

@SimonEast, mi scusi per aver eliminato quei commenti. L'ho fatto e non mi sono reso conto che farà apparire gli altri commenti fuori contesto.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.