SPF, DKIM, DMARC

ในระบบ 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 เสมอ

https://glockapps.com/blog/why-every-business-needs-dmarc/

อย่างไรก็ตาม ถึงแม้ผู้ส่งจะแนะนำให้ทำอย่างไร แต่ผู้รับก็ไม่จำเป็นต้องเชื่อฟังและทำตามนะครับ

ผู้รับอาจจะรับอีเมล์ที่ 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 ของเราให้ครบ เพื่อให้ผู้รับภายนอกสามารถนำสิ่งที่เราประกาศไว้ ไปใช้ประโยชน์ ช่วยตัดสินใจต่อได้ ก็จะเป็นเรื่องดีครับ


อ้างอิง

Zeen Social Icons