ما الذي يفحصه مدقق SPF
يقرأ سجلات TXT للنطاق الذي تدخله ويحدد السجل الذي يبدأ بـ v=spf1. ثم يتتبع كل include وredirect كما يفعل خادم الاستقبال، ويسجل كل عملية بحث تتطلب استعلام DNS، ويتحقق من صياغة كل عنصر.
لا يوجد عنوان IP ضمن هذا الفحص. السؤال هنا هو ما إذا كان السجل صالحًا ولا يتجاوز حدود الاستعلامات لأي جهة تحتاج إلى تقييمه، وليس ما إذا كان يُسمح لخادم معين بالإرسال. للتحقق من ذلك، أرسل رسالة عبر الاختبار الكامل، وسيعرض التقرير النتيجة الفعلية التي حصل عليها خادم الاستقبال.
عدد استعلامات DNS أكبر من المسموح: الحد هو عشرة
يحدد RFC 7208 تقييم SPF بعشرة عناصر كحد أقصى من العناصر التي تتطلب استعلام DNS، وهي: include وa وmx وptr وexists وredirect. يشمل العد الشجرة بأكملها، لذلك فإن include يتضمن بدوره ثلاثة عناصر أخرى يستهلك أربع عمليات. يؤدي تجاوز الحد إلى نتيجة permerror، ويعدّها DMARC إخفاقًا في اجتياز SPF.
يحسب المدقق كل عنصر، بما في ذلك العناصر التي قد لا يصل إليها التقييم مطلقًا، لأن التقييم الفعلي يتوقف عند أول تطابق. تستمر الخوادم المدرجة مبكرًا في الاجتياز، بينما تبدأ الخوادم الموجودة لاحقًا في الإخفاق. ومن الخارج، يبدو ذلك كأن البريد يعمل لبعض الرسائل ولا يعمل لرسائل أخرى.
لا تستهلك عناصر ip4 وip6 أي عمليات بحث. يؤدي استبدال include بنطاقات عناوين، وهو ما يُعرف بالتسطيح، إلى خفض العدد، لكنك ستحتاج إلى مزامنة هذه النطاقات يدويًا مع مزودي الخدمة.
أخطاء يجب البحث عنها
وجود سجلين من نوع SPF على نطاق واحد. يحدث ذلك عندما تطلب إرشادات إعداد مزود ثانٍ إضافة سجل، ولا يدمجه أحد مع السجل الأول. يؤدي وجود سجلين بحد ذاته إلى permerror.
إنهاء السجل بـ +all، ما يسمح لأي خادم على الإنترنت بالاجتياز، أو بـ ?all، الذي لا يحدد شيئًا عن أي جهة، وبالتالي لا يوفر أي حماية. واستخدام عنصر ptr، الذي ينص RFC 7208 على عدم استخدامه. كذلك، تستهلك عناصر include الخاصة بخدمات توقفت الشركة عن استخدامها منذ سنوات عملية بحث لكل منها.
أسئلة
كيف يبدو سجل SPF؟
هو سجل TXT واحد على النطاق يبدأ بـ v=spf1، ويسرد الجهات المسموح لها بالإرسال، وينتهي بقاعدة تنطبق على جميع الجهات الأخرى. يسمح v=spf1 include:_spf.google.com ip4:203.0.113.5 ~all لـ Google Workspace وخادم واحد بالإرسال، ويمنح البقية نتيجة softfail. لا يجوز للنطاق نشر أكثر من سجل واحد.
الفشل المرن أم الفشل الصارم في SPF: ~all أم -all؟
بعد تفعيل DMARC، يصلح كلاهما لأن DMARC يحدد ما يحدث للرسالة التي تفشل. يُعد ~all (softfail) الخيار الأكثر أمانًا بينما لا تزال تحصر جميع الخدمات التي ترسل بالنيابة عنك. انتقل إلى -all عندما تُظهر تقارير DMARC عدم فشل أي رسائل شرعية.
لماذا ينجح سجلي في الاختبار الكامل لكنه يعرض هنا أكثر من عشرة استعلامات؟
توقف الخادم المستلِم عن التقييم عند أول عنصر طابق خادمك، لذلك لم ينفذ بقية الاستعلامات. قد يدفع خادم آخر يأتي لاحقًا في القائمة التقييم نفسه إلى تجاوز عشرة استعلامات والفشل.
ما استعلام void؟
هو استعلام DNS لا يعيد أي سجلات أو يعيد اسمًا غير موجود. يسمح RFC 7208 بوجود استعلامين من هذا النوع في التقييم، ويؤدي الاستعلام الثالث إلى permerror. السبب المعتاد هو استخدام include لنطاقات لم تعد موجودة.
هل يمكن أن يحتوي النطاق على سجلين SPF؟
لا. يسمح RFC 7208 بسجل واحد يبدأ بـ v=spf1، وعند وجود سجلين تنتهي كل عملية تقييم بالنتيجة permerror. ادمجهما: احتفظ بسجل v=spf1 واحد، وضع فيه بنود include وip4 من كليهما، وأنهِه ببند all واحد. يغطي v=spf1 include:_spf.google.com include:servers.mcsv.net ~all مزودين في سجل واحد.
الدليل الكامل: Multiple SPF records
ماذا يعني خطأ SPF permerror؟
خطأ دائم: لا يمكن تقييم السجل كما هو منشور، لذلك تعطي إعادة المحاولة النتيجة نفسها. الأسباب المعتادة هي تجاوز عشرة استعلامات DNS، أو وجود سجلين SPF في نطاق واحد، أو خطأ في الصياغة، أو استعلام ثالث بلا نتيجة. يعتبر DMARC أن نتيجة permerror تعني أن SPF لم يجتز التحقق.
الدليل الكامل: SPF permerror: too many DNS lookups
ماذا يحدث إذا لم يُعثر على سجل SPF؟
يحصل المستلمون على النتيجة none، ويعاملها DMARC مثل fail، ويمكن لأي شخص وضع نطاقك في عنوان مرسل الظرف. انشر سجل TXT واحدًا على النطاق نفسه، يبدأ بـ v=spf1، ويسرد الخدمات التي ترسل نيابة عنك، وينتهي بـ ~all أو -all.