เครื่องมือตรวจสอบทำอะไรบ้าง
เครื่องมือจะอ่านระเบียน TXT ของโดเมนที่คุณป้อน แล้วเลือกระเบียนที่ขึ้นต้นด้วย v=spf1 จากนั้นจะไล่ตรวจทุก include และ redirect แบบเดียวกับเซิร์ฟเวอร์ผู้รับ บันทึกทุกการค้นหาที่ต้องใช้คำขอ DNS และตรวจสอบไวยากรณ์ของแต่ละคำสั่ง
การตรวจนี้ไม่เกี่ยวข้องกับ IP คำถามคือระเบียนถูกต้องและใช้จำนวนการค้นหา DNS อยู่ในขีดจำกัดสำหรับทุกระบบที่ต้องประเมินหรือไม่ ไม่ใช่เซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งได้รับอนุญาตให้ส่งหรือไม่ หากต้องการตรวจสอบเรื่องนี้ ให้ส่งข้อความผ่านการทดสอบแบบเต็ม รายงานจะแสดงผลลัพธ์ที่ฝั่งผู้รับได้รับจริง
DNS lookup มากเกินไป: จำกัดไม่เกิน 10 ครั้ง
RFC 7208 จำกัดการประเมิน SPF ไว้ที่สิบคำสั่งที่ต้องใช้คำขอ DNS ได้แก่ include, a, mx, ptr, exists และ redirect ระบบจะนับรวมทั้งโครงสร้าง ดังนั้น include ที่มี include เพิ่มอีกสามรายการจะใช้โควตาสี่ครั้ง หากเกินขีดจำกัด ผลลัพธ์จะเป็น permerror ซึ่ง DMARC จะนับว่า SPF ไม่ผ่าน
เครื่องมือนับทุกคำสั่ง รวมถึงคำสั่งที่กระบวนการประเมินอาจไปไม่ถึง เพราะการประเมินจริงจะหยุดเมื่อพบรายการที่ตรงกันครั้งแรก เซิร์ฟเวอร์ที่อยู่ต้นรายการจึงยังผ่าน ส่วนเซิร์ฟเวอร์ที่อยู่ลำดับถัดไปเริ่มไม่ผ่าน เมื่อมองจากภายนอกจะดูเหมือนว่าอีเมลบางข้อความใช้งานได้ แต่อีกบางข้อความใช้ไม่ได้
คำสั่ง ip4 และ ip6 ไม่ใช้โควตาการค้นหา การแทนที่ include ด้วยช่วงที่อยู่ หรือ flattening จะช่วยลดจำนวนการค้นหา แต่คุณต้องคอยปรับช่วงเหล่านั้นด้วยตนเองให้ตรงกับผู้ให้บริการ
ข้อผิดพลาดที่ควรตรวจสอบ
มีระเบียน SPF สองระเบียนในโดเมนเดียว ปัญหานี้เกิดขึ้นเมื่อคู่มือตั้งค่าของผู้ให้บริการรายที่สองระบุให้เพิ่มระเบียน แต่ไม่มีใครรวมเข้ากับระเบียนแรก การมีสองระเบียนทำให้เกิด permerror ได้ทันที
ระเบียนลงท้ายด้วย +all ซึ่งอนุญาตให้ทุกเซิร์ฟเวอร์บนอินเทอร์เน็ตผ่าน หรือ ?all ซึ่งไม่ระบุสถานะของเซิร์ฟเวอร์ใดเลย จึงไม่ช่วยป้องกันอะไร รวมถึงคำสั่ง ptr ซึ่ง RFC 7208 ระบุว่าไม่ควรใช้ และ include ของบริการที่บริษัทเลิกใช้ไปหลายปีแล้ว ซึ่งแต่ละรายการยังคงใช้โควตาการค้นหาหนึ่งครั้ง
คำถาม
ระเบียน SPF มีรูปแบบอย่างไร
ระเบียน SPF คือระเบียน TXT หนึ่งระเบียนบนโดเมนที่ขึ้นต้นด้วย v=spf1 ระบุว่าใครส่งอีเมลได้ และลงท้ายด้วยกฎสำหรับผู้ส่งรายอื่นทั้งหมด ตัวอย่าง v=spf1 include:_spf.google.com ip4:203.0.113.5 ~all อนุญาตให้ Google Workspace และเซิร์ฟเวอร์หนึ่งเครื่องส่งอีเมล ส่วนที่เหลือจะได้ผลลัพธ์ softfail แต่ละโดเมนเผยแพร่ได้เพียงหนึ่งระเบียน
SPF softfail หรือ hardfail: ~all หรือ -all?
เมื่อใช้ DMARC แล้ว ทั้งสองแบบใช้ได้ เพราะ DMARC จะกำหนดว่าจะจัดการอย่างไรกับข้อความที่ตรวจสอบไม่ผ่าน ~all (softfail) เป็นตัวเลือกที่ปลอดภัยกว่าในระหว่างที่คุณยังค้นหาบริการทั้งหมดที่ส่งอีเมลให้คุณอยู่ เปลี่ยนเป็น -all เมื่อรายงาน DMARC แสดงว่าไม่มีอีเมลที่ถูกต้องตรวจสอบไม่ผ่าน
ทำไมระเบียนของผมจึงผ่านในการทดสอบแบบเต็ม แต่ที่นี่แสดงการค้นหามากกว่า 10 ครั้ง
เซิร์ฟเวอร์ผู้รับหยุดประเมินที่เงื่อนไขแรกซึ่งตรงกับเซิร์ฟเวอร์ของคุณ จึงไม่ได้ใช้การค้นหาสำหรับเงื่อนไขที่เหลือ เซิร์ฟเวอร์อื่นที่อยู่ลำดับถัดลงไปจะทำให้การประเมินเดียวกันเกิน 10 ครั้งและล้มเหลว
void lookup คืออะไร
คำขอ DNS ที่ไม่พบระเบียนหรือชื่อที่ไม่มีอยู่ RFC 7208 อนุญาตให้การประเมินหนึ่งครั้งมีผลลัพธ์แบบนี้ได้สองครั้ง ครั้งที่สามจะเป็น permerror สาเหตุที่พบบ่อยคือ include ที่อ้างถึงโดเมนซึ่งไม่มีอยู่อีกแล้ว
โดเมนมี SPF record สองรายการได้หรือไม่?
ไม่ได้ RFC 7208 อนุญาตให้มี record ที่ขึ้นต้นด้วย v=spf1 เพียงรายการเดียว หากมีสองรายการ การประเมินทุกครั้งจะจบด้วย permerror ให้รวมเข้าด้วยกัน: ใช้ v=spf1 เพียงรายการเดียว ใส่ include และ ip4 จากทั้งสองรายการ แล้วลงท้ายด้วย all เพียงรายการเดียว v=spf1 include:_spf.google.com include:servers.mcsv.net ~all ครอบคลุมผู้ให้บริการสองรายใน record เดียว
คู่มือฉบับเต็ม: Multiple SPF records
SPF permerror หมายถึงอะไร?
ข้อผิดพลาดถาวร: ไม่สามารถประเมิน record ตามที่เผยแพร่ได้ ดังนั้นการลองใหม่จะได้ผลลัพธ์เดิม สาเหตุทั่วไปคือมี DNS lookup มากกว่า 10 ครั้ง มี SPF record สองรายการในโดเมนเดียว ไวยากรณ์ผิด หรือเกิด void lookup ครั้งที่สาม DMARC ถือว่า permerror คือ SPF ไม่ผ่าน
คู่มือฉบับเต็ม: SPF permerror: too many DNS lookups
จะเกิดอะไรขึ้นหากไม่พบ SPF record?
เซิร์ฟเวอร์ผู้รับจะได้ผลลัพธ์ none ซึ่ง DMARC ถือว่าเหมือนกับ fail และใครก็สามารถใส่โดเมนของคุณเป็น envelope sender ได้ ให้เผยแพร่ TXT record หนึ่งรายการบนโดเมนนั้นโดยตรง โดยขึ้นต้นด้วย v=spf1 ระบุบริการที่ส่งอีเมลให้คุณ และลงท้ายด้วย ~all หรือ -all