สารบัญ
DMARC คืออะไร ทำไมถึงสำคัญ
DMARC ย่อมาจาก Domain-based Message Authentication, Reporting & Conformance คือมาตรฐานสากลสำหรับการยืนยันตัวตนของอีเมล ที่ช่วยให้เจ้าของโดเมนควบคุมได้ว่าจะให้ทำอะไรกับอีเมลที่อ้างว่าส่งจากโดเมนของตนแต่ไม่ผ่านการตรวจสอบ
โดยปกติแล้ว Email Spoofing คือการที่ผู้ไม่หวังดีส่งอีเมลโดยปลอมชื่อผู้ส่ง (From address) ให้ดูเหมือนมาจากโดเมนที่น่าเชื่อถือ เช่น [email protected] ทั้งที่ไม่ได้มีสิทธิ์ใช้โดเมนนั้นเลย DMARC คือกลไกที่ทำให้ผู้รับอีเมลสามารถตรวจสอบและปฏิเสธอีเมลปลอมเหล่านั้นได้
Google และ Yahoo กำหนดให้ผู้ส่งอีเมลจำนวนมาก (bulk senders) ต้องมี DMARC policy ตั้งแต่ต้นปี 2024 และในปี 2026 ผู้ให้บริการอีเมลรายใหญ่ทั่วโลกก็เพิ่มความเข้มงวดในการตรวจสอบมากขึ้น
ความสัมพันธ์ระหว่าง SPF, DKIM และ DMARC
เพื่อให้เข้าใจ DMARC ได้อย่างถ่องแท้ ต้องรู้จักพื้นฐานของ SPF และ DKIM ก่อน:
| มาตรฐาน | หน้าที่ | DNS Record | ตรวจสอบอะไร |
|---|---|---|---|
| SPF | ระบุ IP ที่อนุญาตให้ส่งอีเมลจากโดเมนนี้ | TXT (v=spf1...) | IP ของ mail server |
| DKIM | เพิ่ม digital signature ในอีเมล | TXT (selector._domainkey) | Signature ที่เข้ารหัส |
| DMARC | กำหนดนโยบายและรับรายงาน | TXT (_dmarc) | Alignment + Policy |
DMARC ไม่ได้แทนที่ SPF หรือ DKIM แต่ทำงานร่วมกัน โดย DMARC จะตรวจสอบ "alignment" — ว่าโดเมนใน From header ตรงกับโดเมนที่ผ่าน SPF หรือ DKIM หรือเปล่า
โครงสร้าง DMARC DNS Record
DMARC record คือ TXT record ที่ต้องสร้างที่ subdomain _dmarc ของโดเมนคุณ เช่น:
_dmarc.yourcompany.com TXT "v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1"
ความหมายของแต่ละ tag:
| Tag | ความหมาย | ตัวอย่างค่า |
|---|---|---|
v | Version (บังคับ) | DMARC1 |
p | Policy สำหรับโดเมนหลัก (บังคับ) | none / quarantine / reject |
sp | Policy สำหรับ subdomain | none / quarantine / reject |
rua | ที่อยู่รับ aggregate report | mailto:[email protected] |
ruf | ที่อยู่รับ forensic report | mailto:[email protected] |
pct | เปอร์เซ็นต์อีเมลที่ apply policy | 100 (default) |
adkim | DKIM alignment mode | r (relaxed) / s (strict) |
aspf | SPF alignment mode | r (relaxed) / s (strict) |
fo | Failure reporting options | 0 / 1 / d / s |
Policy Levels: none, quarantine, reject
ค่า p= คือหัวใจของ DMARC มี 3 ระดับ:
1 p=none — โหมดตรวจสอบ (Monitor Mode)
อีเมลที่ไม่ผ่าน DMARC จะยังถูกส่งตามปกติ แต่คุณจะได้รับรายงาน เหมาะสำหรับ ผู้เริ่มต้นหรือระยะทดสอบ ใช้เพื่อเก็บข้อมูลก่อนปรับเพิ่มความเข้มงวด
2 p=quarantine — โหมดกักกัน
อีเมลที่ไม่ผ่าน DMARC จะถูกส่งไปยัง spam/junk folder แทนที่จะเข้า inbox ปกติ เหมาะสำหรับ เมื่อมั่นใจ 70-80% แล้วว่า SPF/DKIM ตั้งค่าถูกต้อง
3 p=reject — โหมดปฏิเสธสมบูรณ์
อีเมลที่ไม่ผ่าน DMARC จะถูกปฏิเสธโดยสมบูรณ์ ผู้ส่งจะได้รับ bounce back เหมาะสำหรับ เมื่อมั่นใจ 100% ว่า legitimate email ทั้งหมดผ่านการตรวจสอบแล้ว
ขั้นตอนตั้งค่า DMARC ทีละขั้น
1 ตรวจสอบว่ามี SPF record แล้ว
ก่อนตั้ง DMARC ต้องมี SPF record ที่ถูกต้องก่อน:
# ตรวจสอบด้วย dig
dig TXT yourdomain.com | grep spf
# หรือใช้ nslookup
nslookup -type=TXT yourdomain.com
ผลที่คาดหวัง: "v=spf1 include:mail.yourdomain.com ~all"
2 ตรวจสอบว่ามี DKIM record แล้ว
dig TXT default._domainkey.yourdomain.com
สำหรับผู้ใช้ DirectAdmin Hosting ของ AsiaGB: DKIM จะถูกตั้งค่าอัตโนมัติเมื่อเปิดใช้งาน Email Hosting
3 สร้าง DMARC record
เข้าไปที่ DNS Manager ของโดเมน แล้วสร้าง TXT record ดังนี้:
| Field | ค่า |
|---|---|
| Type | TXT |
| Host/Name | _dmarc |
| Value | v=DMARC1; p=none; rua=mailto:[email protected] |
| TTL | 3600 |
4 รอ DNS propagate (24-48 ชั่วโมง)
หลังสร้าง record ต้องรอ DNS ประกาศค่าใหม่ทั่วโลก โดยปกติใช้เวลา 1-24 ชั่วโมง
5 ดู DMARC report และปรับ policy
หลังจากได้รับ report สัก 2-4 สัปดาห์ วิเคราะห์ว่ามี legitimate email ที่ fail หรือเปล่า แล้วค่อยเพิ่มเป็น quarantine → reject
อ่าน DMARC Report อย่างไร
DMARC มี report 2 ประเภท:
| ประเภท | Tag | ความถี่ | เนื้อหา |
|---|---|---|---|
| Aggregate Report | rua= | รายวัน | สถิติรวมของ SPF/DKIM pass/fail |
| Forensic Report | ruf= | ทุกครั้งที่ fail | สำเนาอีเมลที่ไม่ผ่าน (บางเจ้าไม่ส่ง) |
รายงานมาในรูปแบบ XML ที่อ่านยาก แนะนำให้ใช้เครื่องมือช่วยวิเคราะห์:
- MXToolbox DMARC Analyzer — ฟรี ใช้งานง่าย
- dmarcanalyzer.com — ฟรีมีแผนจำกัด
- Postmark — มีแผนฟรีสำหรับโดเมนขนาดเล็ก
ตั้งค่า DMARC สำหรับ Subdomain
ถ้าต้องการตั้ง policy ต่างกันสำหรับ subdomain ใช้ tag sp=:
"v=DMARC1; p=reject; sp=quarantine; rua=mailto:[email protected]"
ในตัวอย่างนี้ โดเมนหลักใช้ reject แต่ subdomain ทั้งหมดใช้ quarantine ซึ่งเหมาะเมื่อมี subdomain ที่ยังไม่ได้ตั้ง DKIM ครบ
ข้อผิดพลาดที่พบบ่อยและวิธีแก้
| ข้อผิดพลาด | สาเหตุ | วิธีแก้ |
|---|---|---|
| DMARC ตั้งแล้วแต่ยังมี spam ส่งได้ | ตั้ง p=none ซึ่งเป็นแค่ monitor mode | เปลี่ยนเป็น p=quarantine หรือ p=reject |
| Legitimate email ถูก reject | SPF/DKIM ไม่ครอบคลุม email service ทั้งหมด | ตรวจสอบ aggregate report แล้วเพิ่ม SPF include |
| ไม่ได้รับ DMARC report | อีเมลใน rua= ไม่ถูกต้องหรือ mailbox เต็ม | ตรวจสอบอีเมลปลายทางและ DNS syntax |
| DMARC record ไม่ถูกต้อง | มีช่องว่างหรือ syntax ผิด | ใช้ MXToolbox DMARC checker ตรวจสอบ |
| Alignment fail แม้ SPF pass | โดเมนใน Mail From ≠ โดเมนใน From header | ใช้ aspf=r (relaxed) หรือแก้ Mail From |
ตรวจสอบ DMARC ว่าตั้งค่าถูกต้อง
หลังตั้งค่าแล้ว ตรวจสอบด้วยคำสั่ง:
# ตรวจสอบด้วย dig
dig TXT _dmarc.yourdomain.com
# ผลที่ต้องการเห็น
_dmarc.yourdomain.com. 3600 IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]"
หรือใช้เครื่องมือออนไลน์:
- mxtoolbox.com/dmarc — ตรวจสอบและวิเคราะห์ DMARC record
- mail-tester.com — ทดสอบส่งอีเมลจริงและดูผล DMARC
- Google Postmaster Tools — ดู reputation ของโดเมนใน Gmail