รู้จัก SPF, DKIM, และ DMARC DNS record

person holding black phone

ในระบบ mail นอกจาก DNS MX record ที่ใช้รับอีเมล์จากภายนอก และ DNS record สำหรับ URL ที่ใช้ access ระบบ mail แล้ว ยังมี DNS record ของ SPF, DKIM, และ DMARC ที่เราควรจะสร้างใน DNS domain ของเราให้เรียบร้อยด้วยนะครับ


SPF (Sender Policy Framework)

SPF record ใน DNS domain ของเราใช้ประกาศว่า IP address ของเครื่อง หรืออุปกรณ์ที่เราอนุญาตให้ส่งอีเมล์ในนาม SMTP domain ของเรามี IP อะไรบ้าง?

ถ้า mail server ที่กำลังส่ง mail มี IP address ตรงกับที่ประกาศไว้ใน SPF record ของเขา ฝั่งผู้รับก็จะสรุปผลของ SPF ว่า pass


ทำไม SPF fail?

แต่ในบางกรณี ที่ผู้รับมี mail gateway เพื่อ relay อีเมล์เข้าไปหา mail server ด้านในอีกต่อนึง

หากระบบ mail ไม่มีค่า setting ที่รองรับกรณีแบบนี้ หรือมี แต่เราไม่ได้ตั้งค่าช่วยไว้ ก็จะทำให้ผลของ SPF fail ได้ครับ

เพื่อหลีกเลี่ยงปัญหานี้ เราจึงต้องใช้ DKIM ช่วย


DKIM (DomainKeys Identified Mail)

DKIM ใช้การ sign อีเมล์ก่อนที่จะส่งด้วย private key ของ mail server ผู้ส่ง แล้วแปะ DKIM signature ไปกับอีเมล์ด้วย

ผู้ส่งต้องประกาศ DNS record ของ DKIM ไว้ใน DNS domain ของตัวเองด้วย เพื่อให้ผู้รับเข้ามา query แล้วได้ public key ไปใช้ verify DKIM signature ของผู้ส่งต่อไป


SPF vs. DKIM

เมื่ออีเมล์จากผู้ส่งมี DKIM signature แปะไปด้วย ไม่ว่าเขาจะถูก forward หรือ relay สักกี่ครั้ง DKIM signature ตัวเดิมก็จะยังฝังอยู่กับอีเมล์ฉบับไม่เปลี่ยนแปลง

ทำให้การ verify DKIM signature ที่ฝั่งผู้รับจึง pass เสมอ แม้ว่า SPF อาจจะ fail ก็ตาม

อย่างไรก็ตาม ยังมีเครื่องมืออีกตัวนึง ที่ผู้ส่งจะใช้ guide หรือแนะนำผู้รับว่าควรจะทำยังไง หากได้รับอีเมล์ที่ใช้ SMTP domain ของบริษัทเรา แต่ SPF และ DKIM fail ทั้งคู่ (ไม่ pass แม้แต่ตัวเดียว)

เครื่องมือนั้นก็คือ DMARC

ดังนั้นเรามาดู DMARC กันต่อนะครับ


DMARC (Domain-based Message Authentication, Reporting and Conformance)

ตัวอย่าง DMARC ของ @microsoft.com

DMARC คือ DNS record อีกตัวนึงที่เราควรประกาศไว้ใน DNS domain ของเราโดยใช้ค่า p = none, หรือ quarantine, หรือ reject เพื่อแนะนำผู้รับว่า ถ้า SPF และ DKIM ของอีเมล์ที่ส่งมาจาก domain ของเราไม่ผ่านทั้งคู่ (DMARC fail) เราอยากให้ผู้รับทำอะไรกับอีเมล์ฉบับนั้น

  • reject
  • none — คือ no-action ใช้เมื่อ เรากำลังอยากเริ่มทำ DMARC แต่ยังไม่อยากแนะนำให้ผู้รับ quarantine หรือ reject อีเมล์จากเรา เราแค่อยาก monitor ดู report เกี่ยวกับการ fail ของ SPF หรือ DKIM และผลลัพธ์คร่าวๆ ของ DMARC เฉยๆ ในช่วงนี้
  • quarantine

SPF ไม่ผ่าน + DKIM ไม่ผ่าน = DMARC fail (หาก SPF หรือ DKIM อย่างใดอย่างนึง pass ผลของ DMARC จะ pass เสมอ)

Diagram การทำงานของ DMARC แบบง่ายๆ

ผู้รับต้องทำตาม DMARC policy ของผู้ส่งไหม?

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

ผู้รับอาจจะยอมรับอีเมล์ที่ fail ทั้ง SPF, DKIM, DMARC และ p=reject เข้ามาในระบบก็ได้

แต่เขาก็จะปล่อยให้ anti-malware หรือ anti-spam engine ของตัวเอง ช่วยตรวจสอบต่ออีกทีอยู่ดี ซึ่งผลลัพธ์อาจจะจบลงที่อีเมล์ฉบับนั้นถูกย้ายลงไปที่ Junk Email folder ของ user ก็ได้

ตอนนี้เรารู้จักกับ SPF, DKIM, และ DMARC แล้ว ต่อมาเรามาดูตัวอย่างผลลัพธ์ของ SPF, DKIM, DMARC กันต่อนะครับ


1. ไม่มี SPF, ไม่มี DKIM, ไม่มี DMARC (ผลลัพธ์ SPF = none, DKIM = none, DMARC = none)

เริ่มจากกรณีที่ผู้ส่งไม่มี DNS record ของ SPF, DKIM, DMARC อยู่เลย

ผลของ SPF, DKIM, DMARC ทางฝั่งผู้รับ ก็จะเป็น none ทั้งหมด


2. มี SPF DNS record ที่ถูกต้อง, ไม่มี DKIM, ไม่มี DMARC (ผลลัพธ์ SPF=pass, DKIM=none, DMARC=bestguesspass)

เพิ่ม SPF record ที่ถูกต้อง

ผลที่ได้ทางฝั่งผู้รับจะเป็น SPF=pass, DKIM=none, DMARC=bestguesspass (ผู้ส่งไม่ได้สร้าง DMARC record ไว้ แต่ SPF ผ่าน ผู้รับจึงตัดสินใจว่า DMARC ก็ควรผ่านนั่นเองครับ)


3. มี SPF ที่ถูกต้อง, มี DKIM, ไม่มี DMARC (ผลลัพธ์ SPF=pass, DKIM=pass, DMARC=bestguesspass)

เพิ่ม DKIM เข้ามา

ผลลัพธ์ที่ได้จึงเป็น SPF=pass, DKIM=pass, DMARC=bestguesspass


4. และสุดท้าย ตามคำแนะนำทั่วไป มี SPF ที่ถูกต้อง, มี DKIM, มี DMARC (ผลลัพธ์ SPF=pass, DKIM=pass, DMARC=pass)

ตัวอย่างเช่น เราสร้าง DMARC record เลียนแบบ microsoft.com แต่เราอยากใช้แค่ p=quarantine (ของ microsoft.com ใช้ p=reject)

เราก็ generate DMARC record จาก internet tool สักตัวนึง

แล้วเพิ่ม record เข้าไป

ผลลัพธ์ที่ได้ SPF, DKIM, และ DMARC จึง pass ทั้งหมดเลยนะครับ


ตัวอย่างจากฝั่งผู้รับใน Exchange Online

สุดท้ายแล้วก็อยู่ที่ผู้รับอยู่ดีว่าจะนำผลลัพธ์นี้ ไปช่วยในการตัดสินใจทำอะไร?

ตัวอย่างเช่น แม้จะ pass ทั้ง 3 อย่าง แต่ anti-spam engine ของ Exchange Online อาจจะ mark อีเมล์ให้ตก Junk Email folder ของผู้รับก็ได้ เป็นต้นครับ


ส่งท้าย…

เราทราบแล้วว่า ต่อให้ผลลัพธ์จะเป็นอย่างไร DMARC อาจจะ fail แล้ว policy แนะนำผู้รับให้ quarantine หรือ reject อีเมล์ แต่ผู้รับอาจจะไม่ทำตามก็ได้ จาก

ดังนั้น งานฝั่งผู้รับ เราก็ปล่อยให้ผู้รับเป็นคนจัดการ

ส่วนเรา ในฐานะผู้ส่ง ก็ควรจะสร้าง SPF, DKIM, และ DMARC ที่ถูกต้องไว้ใน SMTP domain ของเราให้ครบ เพื่อให้ผู้รับภายนอกทุกคนสามารถนำสิ่งที่เราประกาศไว้ ไปใช้ประโยชน์ ช่วยตัดสินใจต่อได้ ก็จะเป็นเรื่องที่ดีครับ


อ่านเพิ่มเติม

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *