Apakah batas 10-DNS-lookup dalam spesifikasi SPF biasanya diberlakukan?

24

Pemahaman saya adalah bahwa spesifikasi SPF menentukan penerima email tidak harus melakukan lebih dari 10 pencarian DNS untuk mengumpulkan semua IP yang diizinkan untuk pengirim. Jadi jika catatan SPF telah include:foo.com include:bar.com include:baz.comdan ketiga domain tersebut masing-masing memiliki catatan SPF yang juga memiliki 3 includeentri, sekarang kita hingga 3 + 3 + 3 + 3 = 12 pencarian DNS.

  1. apakah pemahaman saya di atas benar?

  2. Saya hanya menggunakan 2 atau 3 layanan untuk domain saya dan saya sudah melewati batas ini. Apakah batas ini biasanya (atau pernah) diberlakukan oleh penyedia email besar / kecil?

John Bachir
sumber
3
RFC4408 s10.1 mengatakan bahwa " Implementasi SPF HARUS membatasi jumlah mekanisme dan pengubah yang melakukan pencarian DNS paling banyak 10 per cek SPF ", tetapi ini adalah batasan jumlah mekanisme dan pengubah yang melakukan ... pencarian , tidak jumlah cek yang mereka lakukan. Bisakah Anda memberi kami ide yang lebih jelas tentang bagaimana menurut Anda catatan SPF Anda jatuh melanggar batas itu?
MadHatter mendukung Monica
@ MadHatter terima kasih atas info itu! saya telah mengklarifikasi pertanyaan saya.
John Bachir
Ini bisa berpotensi lebih dari 12 jika menyertakan merujuk catatan CNAME atau MX daripada hanya alamat IP. Kecuali saya salah paham apa yang dimaksud @ MadHatter.
Simon East

Jawaban:

29

Baik libspf2(C) dan Mail::SPF::Query(perl, digunakan dalam sendmail-spf-milter ) menerapkan batas 10 mekanisme penyebab DNS , tetapi yang terakhir tidak (AFAICT) menerapkan batas MX atau PTR. libspf2membatasi masing-masing mx dan ptr hingga 10 juga.

Mail::SPF(perl) memiliki batas 10 mekanisme yang menyebabkan DNS, dan batas 10 pencarian per mekanisme, per MX dan per PTR. (Dua paket perl umumnya, meskipun tidak secara default, digunakan dalam MIMEDefang .)

pyspfmemiliki batas 10 pada semua: "pencarian", MX, PTR, CNAME; tetapi secara eksplisit mengalikan MAX_LOOKUPS dengan 4 selama operasi. Kecuali dalam mode "ketat", ini juga mengalikan MAX_MX dan MAX_PTR dengan 4.

Saya tidak bisa berkomentar tentang implementasi komersial / kepemilikan, tetapi di atas (kecuali pyspf) jelas menerapkan batas atas 10 mekanisme pemicu DNS (lebih lanjut tentang itu di bawah), memberi atau menerima, meskipun dalam kebanyakan kasus dapat ditimpa saat dijalankan- waktu.

Dalam kasus spesifik Anda, Anda benar, itu termasuk 12 dan melebihi batas 10. Saya berharap sebagian besar perangkat lunak SPF mengembalikan "PermError", namun , kegagalan hanya akan memengaruhi penyedia "yang termasuk" terakhir karena penghitungannya akan dihitung sebagai total berjalan: mekanisme SPF dievaluasi dari kiri ke kanan dan pengecekan akan "lebih awal" pada pass, sehingga tergantung pada di mana dalam urutan server pengirim muncul.

Cara mengatasinya adalah dengan menggunakan mekanisme yang tidak memicu pencarian DNS, misalnya ip4dan ip6, dan kemudian gunakan mxjika mungkin karena itu membuat Anda hingga 10 nama lebih lanjut, yang masing-masing dapat memiliki lebih dari satu IP.

Karena SPF menghasilkan permintaan DNS sewenang-wenang dengan potensi penskalaan eksponensial, maka dapat dengan mudah dieksploitasi untuk serangan DOS / amplifikasi. Ini sengaja membatasi rendah untuk mencegah ini: itu tidak skala seperti yang Anda inginkan.


10 mekanisme (hanya mekanisme + pengubah "redirect") yang menyebabkan pencarian DNS tidak persis sama dengan 10 pencarian DNS. Bahkan "pencarian DNS" terbuka untuk interpretasi, Anda tidak tahu sebelumnya berapa banyak pencarian diskrit yang diperlukan, dan Anda tidak tahu berapa banyak pencarian diskrit yang harus dilakukan oleh resolver rekursif Anda (lihat di bawah).

RFC 4408 §10.1 :

Implementasi SPF HARUS membatasi jumlah mekanisme dan pengubah yang melakukan pencarian DNS paling banyak 10 per cek SPF, termasuk semua pencarian yang disebabkan oleh penggunaan mekanisme "include" atau pengubah "redirect". Jika nomor ini terlampaui selama pemeriksaan, PermError HARUS dikembalikan. Mekanisme "sertakan", "a", "mx", "ptr", dan "ada" serta pengubah "pengalihan" dihitung terhadap batas ini. Mekanisme "semua", "ip4", dan "ip6" tidak memerlukan pencarian DNS dan karenanya tidak dihitung terhadap batas ini.

[...]

Ketika mengevaluasi mekanisme "mx" dan "ptr", atau makro% {p}, HARUS ada batas tidak lebih dari 10 MX atau RR PTR yang melihat dan memeriksa.

Jadi, Anda dapat menggunakan hingga 10 mekanisme / pengubah yang memicu pencarian DNS. (Kata-katanya di sini buruk: tampaknya hanya menyatakan batas atas batas, implementasi yang dikonfirmasi dapat memiliki batas 2.)

§5.4 untuk mekanisme mx , dan §5.5 untuk mekanisme ptr masing-masing memiliki batas 10 pencarian nama semacam itu, dan itu berlaku untuk pemrosesan mekanisme itu saja, misalnya:

Untuk mencegah serangan Denial of Service (DoS), lebih dari 10 nama MX TIDAK HARUS dilihat selama evaluasi mekanisme "mx" (lihat Bagian 10).

yaitu Anda mungkin memiliki mekanisme 10 mx, dengan hingga 10 nama MX, sehingga masing-masing dapat menyebabkan 20 operasi DNS (masing-masing 10 MX + 10 A pencarian DNS) untuk total 200. Ini serupa untuk ptr atau % {p} , Anda dapat melihat 10 mekanisme ptr , maka 10x10 PTR, setiap PTR juga membutuhkan pencarian A, sekali lagi total 200.

Inilah yang diperiksa oleh test suite 2009.10 , lihat tes " Batas Pemrosesan ".

Tidak ada batas atas yang dinyatakan dengan jelas pada jumlah total operasi pencarian DNS klien per-SPF-cek, saya menghitungnya secara implisit 210, memberi atau menerima. Ada juga saran untuk membatasi volume data DNS per-SPF-check, namun tidak ada batas aktual yang disarankan. Anda bisa mendapatkan perkiraan kasar karena catatan SPF dibatasi hingga 450 byte (yang sayangnya dibagi dengan semua catatan TXT lainnya), tetapi totalnya bisa melebihi 100kiB jika Anda murah hati. Kedua nilai itu jelas terbuka untuk penyalahgunaan potensial sebagai serangan amplifikasi, yang persis seperti yang dikatakan §10.1 yang harus Anda hindari.

Bukti empiris menunjukkan total 10 mekanisme pencarian umumnya diimplementasikan dalam catatan (lihat SPF untuk microsoft.com yang tampaknya telah berusaha keras untuk mempertahankannya hingga 10). Sulit untuk mengumpulkan bukti kegagalan pencarian terlalu banyak karena kode kesalahan yang diamanatkan hanyalah "PermError", yang mencakup semua jenis masalah ( pelaporan DMARC mungkin membantu dengan itu).

FAQ OpenSPF melanggengkan batas total "10 pencarian DNS", daripada "10 DNS yang menyebabkan mekanisme atau pengalihan" yang lebih tepat. FAQ ini bisa dibilang salah karena sebenarnya mengatakan:

Karena ada batas 10 pencarian DNS per catatan SPF, menentukan alamat IP [...]

yang tidak setuju dengan RFC yang memberlakukan batasan pada operasi "pemeriksaan SPF", tidak membatasi operasi pencarian DNS dengan cara ini, dan dengan jelas menyatakan catatan SPF adalah teks DNS tunggal RR. FAQ akan menyiratkan bahwa Anda memulai kembali penghitungan ketika Anda memproses "termasuk" karena itu adalah catatan SPF baru. Berantakan sekali.


Pencarian DNS

Apa itu "pencarian DNS"? Sebagai pengguna . Saya akan mempertimbangkan " ping www.microsoft.comuntuk melibatkan" pencarian "DNS tunggal: ada satu nama yang saya harapkan berubah menjadi satu IP. Sederhana? Sayangnya tidak.

Sebagai administrator saya tahu bahwa www.microsoft.com mungkin bukan catatan A sederhana dengan IP tunggal, itu mungkin CNAME yang pada gilirannya membutuhkan pencarian diskrit lain untuk mendapatkan catatan A, meskipun itu yang mungkin akan dilakukan oleh resolver upstream saya. daripada resolver di desktop saya. Hari ini, bagi saya, www.microsoft.com adalah rantai 3 CNAME yang akhirnya berakhir sebagai catatan A di akamaiedge.net, itu (setidaknya) 4 operasi permintaan DNS untuk seseorang. SPF mungkin melihat CNAME dengan mekanisme "ptr", catatan MX seharusnya bukan CNAME.

Akhirnya, sebagai adminstrator DNS, saya tahu bahwa menjawab (hampir) pertanyaan apa pun melibatkan banyak operasi DNS terpisah, pertanyaan individual dan transaksi transaksi (datagram UDP) - dengan asumsi cache kosong, resolver rekursif perlu dimulai pada root DNS dan bekerja dengan caranya bawah: .commicrosoft.comwww.microsoft.commeminta jenis catatan tertentu (NS, A dll) seperti yang diperlukan, dan berurusan dengan CNAME. Anda dapat melihat ini dalam tindakan dig +trace www.microsoft.com, meskipun Anda mungkin tidak akan mendapatkan jawaban yang sama persis karena tipu daya geolokasi (contoh di sini ). (Bahkan ada sedikit lebih banyak untuk kompleksitas ini sejak piggybacks SPF pada catatan TXT, dan batas usang 512 byte pada jawaban DNS mungkin berarti mencoba kembali permintaan melalui TCP.)

Jadi, apa yang SPF pertimbangkan sebagai pencarian? Ini benar-benar paling dekat dengan sudut pandang administrator , perlu untuk mengetahui secara spesifik setiap jenis permintaan DNS (tetapi tidak sampai pada titik di mana ia benar-benar perlu menghitung datagram atau koneksi DNS individu).

mr.spuratic
sumber
Alat ini memberi tahu Anda jika Anda memiliki lebih dari 10 pencarian: tools.bevhost.com/spf
Gaia
tolong beri saya versi ELI5 dari posting Anda? Di mana saya harus memiliki kurang dari 10 entri di emailstuff.org/spf ? Di tab DNS? Di tab 'hasil', saya hanya melihat 5 entri (masing-masing dengan banyak IP.
Gaia
2
Berikut adalah dua alat SPF lain yang tampak membantu: dmarcian.com/spf-survey - menampilkan pesan kesalahan merah terang jika SPF Anda melebihi 10 pencarian. emailstuff.org/spf - klik pada tab DNS setelah Anda mendapatkan laporan (tetapi Anda harus menghitungnya sendiri).
medmunds
Saya masih bingung. Bisakah Anda memberikan contoh bagaimana "pencarian" berbeda dengan "mekanisme"? Atau kesimpulan bahwa itu tidak terlalu penting - bahwa Anda masih harus menyimpannya dalam 10 pencarian?
Simon East
1
@SimonEast menambahkan penjelasan, SPF perlu memahami implikasi dari masing-masing jenis catatan DNS sehingga bisa mendapatkan perkiraan kasar pada "biaya" DNS, tanpa benar-benar menghitung semua biji.
mr.spuratic
11

RFC4408 s10.1 tidak, seperti yang telah Anda catat, membatasi aktivitas DNS. Secara khusus:

Implementasi SPF HARUS membatasi jumlah mekanisme dan pengubah yang melakukan pencarian DNS paling banyak 10 per cek SPF, termasuk semua pencarian yang disebabkan oleh penggunaan mekanisme "include" atau pengubah "redirect". Jika nomor ini terlampaui selama pemeriksaan, PermError HARUS dikembalikan. Mekanisme "sertakan", "a", "mx", "ptr", dan "ada" serta pengubah "pengalihan" dihitung terhadap batas ini. Mekanisme "semua", "ip4", dan "ip6" tidak memerlukan pencarian DNS dan karenanya tidak dihitung terhadap batas ini. Pengubah "exp" tidak dihitung terhadap batas ini karena pencarian DNS untuk mengambil string penjelasan terjadi setelah catatan SPF dievaluasi.

dan terlebih lagi

Ketika mengevaluasi mekanisme "mx" dan "ptr", atau makro% {p}, HARUS ada batas tidak lebih dari 10 MX atau RR PTR yang melihat dan memeriksa.

Perhatikan bahwa yang pertama adalah batasan jumlah mekanisme , bukan jumlah pencarian yang dilakukan; tapi itu masih batas.

Sejauh yang saya tahu, ya, batasan ini diberlakukan cukup keras. Mereka dirancang untuk menghentikan orang-orang membangun catatan SPF yang kompleks dan menggunakannya untuk server DoS yang memeriksa catatan mereka dengan menghentikan mereka dalam rantai pencarian DNS yang sangat besar, jadi itu demi kepentingan siapa pun yang mengimplementasikan pemeriksa SPF untuk hargai mereka.

Anda benar untuk mencatat bahwa nested mencakup kemungkinan menyebabkan masalah terbesar dengan batas-batas ini, dan jika Anda memutuskan untuk memasukkan beberapa domain yang masing-masing membuat penggunaan diri mereka banyak, maka Anda dapat dengan cepat membahasnya. Tidak terlalu sulit untuk menemukan contoh orang yang telah menciptakan masalah nyata ini .

Hasilnya tampaknya bahwa masalah umumnya timbul ketika orang memutuskan untuk menggunakan kedua SPF dan beberapa perusahaan yang berbeda dan berbeda untuk menangani email keluar mereka. Saya menyimpulkan dari pertanyaan Anda bahwa Anda masuk ke dalam kategori itu. SPF tampaknya tidak dirancang untuk melayani orang yang memilih untuk melakukan ini . Jika Anda bersikeras melakukan ini, Anda mungkin harus memiliki beberapa jenis pekerjaan cron di server DNS Anda yang secara konstan mengevaluasi semua catatan SPF yang ingin Anda sertakan, menyatakannya sebagai serangkaian ip4:dan ip6:mekanisme (pada jumlah yang tidak ada batasan), dan publikasikan hasilnya sebagai catatan SPF Anda.

Jangan lupa untuk menyelesaikannya dengan -all, atau seluruh latihan itu sia-sia.

MadHatter mendukung Monica
sumber
Alat Anda sekarang tampaknya turun, @ JánSáreník
Simon East
@SimonEast Tidak ada yang bisa saya lakukan ketika moderator menghapus sebuah posting. spf-tools aktif di github (coba cari spf-tools github), saya adalah salah satu penulisnya, ini adalah perangkat lunak gratis yang dimaksudkan untuk memberikan kembali kepada komunitas yang telah saya ambil banyak dan akan senang jika itu membantu orang lain. Promosi diri mereka menyebutnya. Dan tidak ada ruang untuk diskusi.
@ JánSáreník Oh betapa anehnya, sekarang MadHatter dan komentar saya tidak masuk akal di luar konteks. Hmm. Baiklah
Simon East
@SimonEast, maafkan saya karena menghapus komentar itu. Saya melakukannya dan tidak menyadarinya akan membuat komentar lain terlihat keluar dari konteks.