ในระบบ mail นอกจาก MX record ที่ใช้รับอีเมล์จากภายนอก และ DNS record สำหรับ URL ที่ใช้ access mail แล้ว ยังมี SPF, DKIM, และ DMARC record ที่เราควรจะสร้างใน Internet DNS zone ของเราให้เรียบร้อยด้วยนะครับ
SPF – Sender Policy Framework
SPF record ใน DNS domain ของเราใช้ประกาศว่า IP address ของเครื่อง หรืออุปกรณ์ที่เราอนุญาตให้ส่งอีเมล์ในนาม SMTP domain ของเรามี IP อะไรบ้าง?
ถ้า mail server ที่กำลังส่ง mail มี IP address ตรงกับที่ประกาศไว้ใน SPF record ของเขา ผู้รับก็จะสรุปผลของ SPF ว่า pass
แต่ในบางกรณี เช่น ผู้รับมี mail gateway เพื่อ relay อีเมล์เข้าหา mail server ด้านในอีกต่อนึง หาก mail server ผู้รับไม่มีค่า setting ที่ใช้แก้ไขกรณีแบบนี้ หรือมี แต่ไม่ได้ตั้งค่าช่วยไว้
เมื่อผู้รับเห็น IP ของ mail server ที่กำลังส่งอีเมล์หาตนไม่ตรงกับที่ประกาศไว้ใน SPF record ผลของ SPF ก็จะ fail ได้ครับ
เพื่อหลีกเลี่ยงปัญหานี้ เราจึงต้องใช้ DKIM ช่วย
DKIM – DomainKeys Identified Mail
DKIM ใช้การ sign อีเมล์ก่อนที่จะส่งด้วย private key ของ mail server ผู้ส่ง แล้วแปะ DKIM signature ไปกับอีเมล์ด้วย
ไม่ว่าอีเมล์ฉบับนั้นจะถูก forward หรือ relay สักกี่ครั้ง DKIM signature ตัวเดิมก็จะยังฝังอยู่กับอีเมล์ฉบับนั้นไม่เปลี่ยนแปลง
ทำให้การ verify DKIM ทางฝั่งผู้รับจึง pass เสมอ ถึงแม้ว่า SPF อาจจะ fail ก็ตามนั่นเองครับ
DMARC – Domain-based Message Authentication, Reporting and Conformance
DMARC คือ DNS record อีกตัวนึงที่เราควรประกาศไว้ใน DNS domain ของเรา โดยใช้ค่า p=none, หรือ p=quarantine, หรือ p=reject เพื่อแนะนำผู้รับว่า ถ้าอีเมล์ที่ถูกระบุว่าส่งมาจาก domain ของเรามีค่า SPF และ DKIM ไม่ผ่านทั้งคู่ (DMARC fail) เราอยากให้ผู้รับทำอะไรกับอีเมล์ฉบับนั้น
SPF ไม่ผ่าน + DKIM ไม่ผ่าน = DMARC fail
หาก SPF หรือ DKIM อย่างใดอย่างนึง pass ผลของ DMARC จะ pass เสมอ
อย่างไรก็ตาม ถึงแม้ผู้ส่งจะแนะนำให้ทำอย่างไร แต่ผู้รับก็ไม่จำเป็นต้องเชื่อฟังและทำตามนะครับ
ผู้รับอาจจะรับอีเมล์ที่ fail ทั้ง SPF, DKIM, DMARC และ p=reject เข้ามาในระบบ
แต่เขาก็จะใช้ anti-malware หรือ anti-spam engine ของเขา ช่วย scan อีกทีอยู่ดี ซึ่งผลลัพธ์อาจจะจบลงที่อีเมล์ฉบับนั้นถูกส่งเข้า Junk Email folder ของ user ก็ได้
ตอนนี้เรารู้จักกับหหน้าที่ของ SPF, DKIM, DMARC ไปแล้ว ต่อมาเรามาดูผลลัพธ์ของการมี หรือไม่มี DNS record เหล่านี้กันต่อนะครับ
-SPF -DKIM -DMARC
เริ่มจาก ถ้าผู้ส่งไม่มี DNS record ของ SPF, DKIM, DMARC อยู่เลย ผลของ SPF, DKIM, DMARC ทางฝั่งผู้รับ ก็จะเป็น none ทั้งหมด
+SPF -DKIM -DMARC
ถ้าเพิ่ม SPF record ที่ถูกต้องเข้าไป ผลที่ได้จะเป็น SPF=pass, DKIM=none, DMARC=bestguesspass (ผู้ส่งไม่ได้สร้าง DMARC record ไว้ แต่ SPF ผ่าน ผู้รับจึงตัดสินใจว่า DMARC ก็ควรผ่านนั่นเองครับ)
+SPF +DKIM -DMARC
เมื่อเพิ่ม DKIM DNS record ที่ถูกต้องเข้าไป
ผู้รับจะหา public key ของผู้ส่งเจอจาก DKIM DNS record แล้วนำไป verify DKIM signature ของผู้ส่งที่แปะมากับอีเมล์ได้
ผลลัพธ์ที่ได้เป็น SPF=pass, DKIM=pass, DMARC=bestguesspass ครับ
+SPF +DKIM +DMARC
และเมื่อเพิ่ม DMARC DNS record เพื่อกำหนด DMARC policy เข้าไป
เช่น เราสร้าง DMARC record เลียนแบบ microsoft.com เลยก็ได้นะครับ แต่อาจเปลี่ยน p=quarantine แทน (microsoft.com ใช้ p=reject)
ผลลัพธ์ที่ได้ก็จะ pass ทั้งหมดเลยครับ
Some email systems just get these results for consideration but not block immediately
อย่างไรก็ตาม สุดท้ายแล้วก็อยู่ที่ผู้รับอยู่ดีว่าจะนำผลลัพธ์นี้ ไปช่วยในการตัดสินใจทำอะไร?
ตัวอย่างเช่น แม้จะ pass ทั้ง 3 อย่าง แต่ anti-spam engine ของ Exchange Online ก็ยังต้อง scan อีเมล์ฉบับนั้นต่ออยู่ดี เช่นในรูปนี้ อีเมล์ทั้งหมดยังตก Junk Email folder ของผู้รับอยู่ดี
ดังนั้น งานฝั่งผู้รับ เราก็ปล่อยให้ผู้รับเป็นคนจัดการไป
ส่วนเรา ในฐานะผู้ส่ง ควรจะสร้าง SPF, DKIM, และ DMARC ที่ถูกต้องไว้ใน Internet DNS zone ของเราให้ครบ เพื่อให้ผู้รับภายนอกสามารถนำสิ่งที่เราประกาศไว้ ไปใช้ประโยชน์ ช่วยตัดสินใจต่อได้ ก็จะเป็นเรื่องดีครับ
อ้างอิง