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.com
dan ketiga domain tersebut masing-masing memiliki catatan SPF yang juga memiliki 3 include
entri, sekarang kita hingga 3 + 3 + 3 + 3 = 12 pencarian DNS.
apakah pemahaman saya di atas benar?
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?
Jawaban:
Baik
libspf2
(C) danMail::SPF::Query
(perl, digunakan dalam sendmail-spf-milter ) menerapkan batas 10 mekanisme penyebab DNS , tetapi yang terakhir tidak (AFAICT) menerapkan batas MX atau PTR.libspf2
membatasi 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 .)pyspf
memiliki 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
ip4
danip6
, dan kemudian gunakanmx
jika 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 :
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:
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:
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.com
untuk 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:
.
→com
→microsoft.com
→www.microsoft.com
meminta jenis catatan tertentu (NS, A dll) seperti yang diperlukan, dan berurusan dengan CNAME. Anda dapat melihat ini dalam tindakandig +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).
sumber
RFC4408 s10.1 tidak, seperti yang telah Anda catat, membatasi aktivitas DNS. Secara khusus:
dan terlebih lagi
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:
danip6:
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.sumber
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.