Email Authentication คืออะไร และทำไมต้องสำคัญ?

เมื่อธุรกิจส่งอีเมลหา client หรือส่ง newsletter ปัญหาที่พบบ่อยที่สุดคืออีเมลตกไปอยู่ใน Spam folder หรือถูก bounce กลับมา สาเหตุหลักมักมาจากการไม่ได้ตั้งค่า Email Authentication ให้ครบถ้วน

Email Authentication คือมาตรฐาน DNS ที่ช่วยให้ mail server ปลายทางยืนยันได้ว่าอีเมลที่ได้รับนั้นมาจากโดเมนจริงๆ ไม่ใช่การปลอมแปลง ประกอบด้วย 3 มาตรฐานหลัก:

  • SPF (Sender Policy Framework) — ระบุว่า mail server ใดบ้างส่งอีเมลในนามโดเมนได้
  • DKIM (DomainKeys Identified Mail) — ลงลายเซ็นดิจิทัลในอีเมลเพื่อยืนยันความสมบูรณ์
  • DMARC (Domain-based Message Authentication, Reporting & Conformance) — กำหนด policy และรับรายงาน
💡 สำคัญ: การตั้งค่าทั้ง 3 อย่างครบถ้วนจะทำให้ Email Deliverability ดีขึ้นอย่างเห็นได้ชัด และป้องกันผู้ไม่หวังดีจากการปลอมแปลงโดเมนของคุณ

ขั้นตอนที่ 1: ตั้งค่า SPF Record

SPF Record คือ DNS TXT Record ที่บอกว่า mail server IP ใดบ้างที่ได้รับอนุญาตให้ส่งอีเมลในนามโดเมนของคุณ

รูปแบบ SPF Record

v=spf1 [mechanisms] [all]

Mechanisms ที่ใช้บ่อย:

Mechanismความหมายตัวอย่าง
ip4:อนุญาต IPv4 addressip4:203.0.113.10
ip6:อนุญาต IPv6 addressip6:2001:db8::1
include:รวม SPF ของโดเมนอื่นinclude:_spf.google.com
aอนุญาต IP จาก A recorda:mail.example.com
mxอนุญาต IP จาก MX recordmx
~allSoftfail อื่นๆ (แนะนำ)~all
-allReject อื่นๆ (เข้มงวด)-all

ตัวอย่าง SPF สำหรับโฮสติ้ง AsiaGB

v=spf1 mx include:spf.asiagb.com ~all

1 วิธีเพิ่ม SPF ใน DNS

  1. เข้า DirectAdmin → DNS Management
  2. เพิ่ม TXT Record ที่ชื่อ @ (หรือโดเมนหลัก)
  3. ใส่ค่า SPF ในช่อง Value
  4. บันทึกและรอ DNS propagation 24-48 ชั่วโมง
⚠️ ข้อควรระวัง: มีได้ SPF Record เดียวต่อหนึ่งโดเมน ถ้ามีหลายตัวจะทำให้ fail ทั้งหมด ให้รวมทุกอย่างไว้ใน Record เดียว

ขั้นตอนที่ 2: ตั้งค่า DKIM

DKIM ใช้ระบบ Public/Private Key Cryptography เพื่อลงลายเซ็นดิจิทัลในอีเมลทุกฉบับที่ส่งออก ทำให้ผู้รับยืนยันได้ว่าเนื้อหาไม่ถูกแก้ไขระหว่างส่ง

วิธี Generate DKIM Key

ใน DirectAdmin: ไปที่ Email → DKIM Keys → Generate หรือตรวจสอบว่าเปิดใช้งานแล้ว

สำหรับเซิร์ฟเวอร์ที่ใช้ Exim:

# ตรวจสอบ DKIM key ที่มีอยู่
ls /etc/exim4/dkim/

# สร้าง key ใหม่ (2048-bit แนะนำ)
openssl genrsa -out /etc/exim4/dkim/example.com.key 2048
openssl rsa -in /etc/exim4/dkim/example.com.key -pubout -out /etc/exim4/dkim/example.com.pub

รูปแบบ DKIM DNS Record

เพิ่ม TXT Record ชื่อ mail._domainkey.yourdomain.com (selector ทั่วไปคือ mail):

v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
💡 Tip: Public key ที่ได้จาก DirectAdmin หรือ generate เองจะต้องนำมาใส่ใน DNS โดยลบ -----BEGIN PUBLIC KEY----- และ -----END PUBLIC KEY----- ออก และรวมเป็นบรรทัดเดียว

ขั้นตอนที่ 3: ตั้งค่า DMARC

DMARC กำหนดว่าจะทำอะไรกับอีเมลที่ไม่ผ่าน SPF หรือ DKIM และรับรายงานไปยัง email ที่กำหนด

รูปแบบ DMARC Record

เพิ่ม TXT Record ชื่อ _dmarc.yourdomain.com:

v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; pct=100
Parameterความหมายค่าแนะนำ
p=Policy สำหรับอีเมล failnone → quarantine → reject
rua=รับรายงาน Aggregatemailto:[email protected]
ruf=รับรายงาน Forensicmailto:[email protected]
fo=Failure report options1 (report on any failure)
pct=เปอร์เซ็นต์อีเมลที่ใช้ policy100
sp=Policy สำหรับ subdomainnone หรือ reject

Strategy การ Rollout ที่แนะนำ

3 ขั้นตอนสู่ DMARC เต็มรูปแบบ

เดือนที่ 1: p=none — เก็บข้อมูลโดยไม่บล็อกอะไร

เดือนที่ 2-3: p=quarantine; pct=25 — ทดสอบกับ 25% ก่อน

เดือนที่ 4+: p=reject; pct=100 — บล็อกอีเมลปลอมทั้งหมด

ตัวอย่าง DNS Records ครบชุด

ตัวอย่างสำหรับโดเมน example.com ที่ใช้ AsiaGB Hosting:

ชื่อ Recordประเภทค่า
@TXTv=spf1 mx include:spf.asiagb.com ~all
mail._domainkeyTXTv=DKIM1; k=rsa; p=[public-key]
_dmarcTXTv=DMARC1; p=none; rua=mailto:[email protected]

วิธีทดสอบและยืนยันการตั้งค่า

เครื่องมือทดสอบฟรีที่แนะนำ

  • MXToolbox — ทดสอบ SPF, DKIM, DMARC ได้ในที่เดียว
  • mail-tester.com — ส่งอีเมลทดสอบแล้วดูคะแนน
  • Google Postmaster Tools — ดู deliverability สำหรับ Gmail
  • DMARC Analyzer — วิเคราะห์ DMARC reports

ทดสอบด้วย Command Line

# ตรวจสอบ SPF
dig TXT yourdomain.com | grep "v=spf1"

# ตรวจสอบ DKIM
dig TXT mail._domainkey.yourdomain.com

# ตรวจสอบ DMARC
dig TXT _dmarc.yourdomain.com

แก้ปัญหาที่พบบ่อย

อีเมลยังตก Spam แม้ตั้งค่าแล้ว

  • ตรวจสอบว่า SPF lookup ไม่เกิน 10 ครั้ง (DNS lookup limit)
  • ยืนยันว่า DKIM key ใน DNS ตรงกับ private key บน server
  • ตรวจสอบ Blacklist ด้วย MXToolbox Blacklist Check

DMARC Fail แม้ SPF และ DKIM ผ่าน

DMARC ต้องการ Alignment — domain ใน From: header ต้องตรงหรือ align กับโดเมนที่ใช้ SPF หรือ DKIM ถ้าใช้ email forwarding อาจทำให้ alignment fail

ค่า p=reject ทำให้อีเมล forward ไม่ได้

เป็นเรื่องปกติ เพราะ email forwarding จะทำให้ IP ที่ส่งไม่ตรงกับ SPF ทางเลือกคือใช้ Subdomain Delegation หรือ ARC (Authenticated Received Chain)

Best Practices สำหรับ Email Authentication

  • ใช้ DKIM key ขนาด 2048-bit ขึ้นไป (1024-bit ถือว่า weak แล้ว)
  • Rotate DKIM key ทุก 6-12 เดือน
  • ตั้ง DMARC ด้วย p=none ก่อน monitor 2-4 สัปดาห์
  • ตรวจสอบ DMARC reports สม่ำเสมอเพื่อหา unauthorized sender
  • อย่าใช้ +all ใน SPF เด็ดขาด (อนุญาตทุกคนส่งในนามโดเมน)
  • Subdomain ที่ไม่ได้ใช้ email ให้ตั้ง v=spf1 -all และ p=reject

เริ่มต้น Hosting พร้อม Email ที่น่าเชื่อถือ

AsiaGB Hosting รองรับการตั้งค่า SPF, DKIM และ DMARC ผ่าน DirectAdmin ครบครัน พร้อม SSD storage และ uptime 99%

ดูแพ็กเกจ Hosting

คำถามที่พบบ่อย (FAQ)

SPF คืออะไร?
SPF (Sender Policy Framework) คือ DNS Record ประเภท TXT ที่ระบุว่า mail server ใดบ้างที่ได้รับอนุญาตให้ส่งอีเมลในนามโดเมนของคุณ ป้องกันการปลอมแปลง From address
DKIM ต่างจาก SPF อย่างไร?
DKIM ใช้การเข้ารหัสแบบ Public/Private Key เพื่อลงลายเซ็นดิจิทัลในอีเมล ทำให้ผู้รับยืนยันได้ว่าอีเมลไม่ถูกแก้ไขระหว่างส่ง ในขณะที่ SPF แค่ตรวจสอบว่า server ส่งจากที่ที่อนุญาตหรือไม่
DMARC คืออะไรและทำไมต้องใช้?
DMARC (Domain-based Message Authentication, Reporting, and Conformance) คือ policy ที่กำหนดว่าจะทำอย่างไรกับอีเมลที่ไม่ผ่าน SPF หรือ DKIM พร้อมระบบรายงานผลที่ช่วยให้คุณรู้ว่าใครกำลังส่งอีเมลในนามโดเมนคุณ
ตั้งค่าแล้วต้องรอนานแค่ไหนถึงจะมีผล?
DNS propagation ปกติใช้เวลา 24-48 ชั่วโมง แต่มักเร็วกว่านั้น คุณสามารถทดสอบได้ทันทีหลังตั้งค่าด้วย MXToolbox หรือ mail-tester.com
ถ้าตั้งค่าผิดจะเกิดอะไรขึ้น?
ถ้า SPF ผิดอีเมลอาจไม่ถูกส่ง ถ้า DKIM ผิดอีเมลอาจถูกมองว่า spam ดังนั้นแนะนำให้เริ่มด้วย DMARC policy=none ก่อน แล้วค่อย monitor ก่อนเปลี่ยนเป็น quarantine หรือ reject