ตั้ง DKIM SPF DMARC ป้องกันอีเมลปลอมบน VPS

ตั้ง DKIM SPF DMARC ป้องกันอีเมลปลอมบน VPS

กรกฎาคม 2026 · อ่าน 8 นาที

DKIM, SPF, และ DMARC เป็น 3 มาตรฐานความปลอดภัยอีเมลที่ช่วยยืนยันว่าอีเมลมาจากโดเมนของคุณจริง ไม่ถูกปลอมแปลง ถ้า VPS ของคุณรัน mail server เช่น Postfix ต้องตั้ง protocol ทั้ง 3 นี้เพื่อป้องกัน attacker ปลอมตัวเป็นโดเมนของคุณ และเพิ่มความน่าเชื่อถือ ให้อีเมลของคุณถูก deliver เข้า inbox แทนที่จะตกไปอยู่ในแฟ้ม spam

ติดตั้ง OpenDKIM

# ติดตั้ง OpenDKIM
sudo apt update
sudo apt install opendkim opendkim-tools libopendkim-perl -y

# เปิดใช้งาน service
sudo systemctl enable --now opendkim

# ตรวจ status
sudo systemctl status opendkim

สร้าง DKIM Key Pair

# สร้างโฟลเดอร์ keys
sudo mkdir -p /etc/opendkim/keys
sudo chown opendkim:opendkim /etc/opendkim/keys
sudo chmod 700 /etc/opendkim/keys

# ไปที่โฟลเดอร์
cd /etc/opendkim/keys

# สร้าง key pair สำหรับโดเมนของคุณ (เปลี่ยน example.com)
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys -s default -v

# ปรับ permission
sudo chown opendkim:opendkim /etc/opendkim/keys/default.private
sudo chown opendkim:opendkim /etc/opendkim/keys/default.txt

ตั้งค่า OpenDKIM Configuration

# แก้ไฟล์ config หลัก
sudo nano /etc/opendkim.conf

เพิ่มหรือแก้ไขบรรทัดเหล่านี้ (ตรวจสอบค่าต่างๆ ให้ตรงกับที่คุณตั้ง):

Domain                  example.com
KeyFile                 /etc/opendkim/keys/default.private
Selector                default
Socket                  inet:8891@localhost
CanonicalHeadersOnly    yes
Mode                    sv
SubDomains             yes

ออกจากไฟล์ด้วย Ctrl+X แล้วตอบ Y เพื่อบันทึก

เพิ่ม DKIM DNS Record

ดูคีย์สาธารณะที่สร้างไป:

sudo cat /etc/opendkim/keys/default.txt

ผลลัพธ์จะเป็นแบบนี้:

default._domainkey.example.com. IN TXT "v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkq..."

ไปที่ control panel ของคุณ แก้ไข DNS record ที่ระดับ subdomain default._domainkey (หรือ default._domainkey.example.com ถ้า panel ต้องการ FQDN) แล้วเพิ่ม TXT record ด้วยค่า v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkq... (คัดลอกเฉพาะส่วน p= เท่านั้น)

เพิ่ม SPF DNS Record

เพิ่ม SPF record บนโดเมนของคุณ (ไม่ใช่ subdomain) เป็น TXT record:

v=spf1 ip4:YOUR_VPS_IP -all

แทน YOUR_VPS_IP ด้วย IP address ของ VPS ของคุณ เช่น v=spf1 ip4:203.0.113.5 -all

ถ้า VPS ใช้ mail relay หรือมีหลาย server:

v=spf1 ip4:203.0.113.5 ip4:203.0.113.10 mx -all
Tip: SPF record ต้องเป็นเพียง 1 TXT record บนโดเมนเท่านั้น ถ้าคุณมี TXT record อื่นอยู่แล้ว ให้รวมค่าทั้งหมดเข้าด้วยกันด้วยช่องว่าง ไม่ใช่สร้าง TXT record ใหม่

เพิ่ม DMARC DNS Record

สร้าง DMARC record บนโดเมนของคุณ (subdomain ชื่อ _dmarc) เป็น TXT record:

v=DMARC1; p=quarantine; rua=mailto:[email protected]

ความหมาย:

สำหรับการทดสอบเริ่มแรก ใช้ p=none ก่อน แล้ว upgrade เป็น p=quarantine หรือ p=reject หลังจากตรวจสอบแล้วว่าไม่มี legitimate email fail

# เวอร์ชั่นเต็ม
v=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1

ตรวจสอบว่า DKIM SPF DMARC ทำงานถูกต้อง

# ตรวจ DKIM public key
dig default._domainkey.example.com TXT

# ตรวจ SPF record
dig example.com TXT

# ตรวจ DMARC record
dig _dmarc.example.com TXT

# ตรวจ OpenDKIM signature
sudo opendkim-testkey -d example.com -s default

# ดู log OpenDKIM
sudo journalctl -u opendkim -f

ส่งอีเมลทดสอบไปที่ Gmail หรือ Yahoo แล้วดูส่วน "Show original" ในอีเมลนั้น มีAuthentication-Results header ที่บอก DKIM/SPF/DMARC ผลการตรวจสอบหรือไม่:

เสริมอีกทาง: ใช้ Email Deliverability Checker ของ dnsxray.com ตรวจ MX, SPF, DKIM, DMARC ของโดเมนพร้อมกันจากภายนอก จะเห็นเหมือนที่ Mail Server ปลายทางเห็น ถ้า Record ไหนหายหรือ Syntax ผิดจะโชว์ทันที

Authentication-Results: gmail.com;
       dkim=pass [email protected] header.s=default header.b=...;
       spf=pass (google.com: domain of [email protected] designates 203.0.113.5 as permitted sender) [email protected];
       dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=example.com
Tip: ถ้า DKIM fail บอก "signature did not pass" หรือ SPF fail ให้ตรวจ DNS record ว่าเก็บลง DNS server จริงหรือยัง อาจต้อง wait 5-15 นาทีให้ DNS propagate เสร็จ

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

Error: "DKIM signature did not pass"

DNS record ไม่ถูกต้องหรือ key pair ไม่ตรงกัน

# ตรวจ DKIM key ตรงกับ DNS หรือไม่
sudo opendkim-testkey -d example.com -s default -vv

# ถ้าพบปัญหา สร้าง key ใหม่
cd /etc/opendkim/keys
sudo rm default.private default.txt
sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys -s default
sudo chown opendkim:opendkim default.private

# คัดลอก public key (default.txt) ลง DNS ใหม่แล้วรอ propagate

Error: "SPF: Too many DNS lookups"

SPF record มี include chain ยาวเกินไป จน DNS lookup เกิน 10 ครั้งซึ่งเป็นขีดจำกัดสูงสุดของ SPF

# ดู SPF chain ว่ากี่ lookup
dig example.com TXT +trace

# ลดจำนวน include ใน SPF record เช่น
v=spf1 ip4:203.0.113.5 -all
# แทนของ
v=spf1 ip4:203.0.113.5 include:thirdparty.com include:another.com -all

Error: "DMARC alignment failure"

DKIM หรือ SPF fail หรือ domain ไม่ align ระหว่าง From: header กับ Return-Path

# ตรวจ From: header ตรงกับ domain ที่ DKIM sign หรือไม่
# ตรวจ SPF นี้อนุญาต server นี้หรือไม่
dig example.com TXT

Error: "OpenDKIM failed to load key"

File permission ผิดหรือ path config ไม่ถูกต้อง

# ตรวจ permission
ls -la /etc/opendkim/keys/default.private
# ต้องเป็น opendkim:opendkim และ mode 600

sudo chown opendkim:opendkim /etc/opendkim/keys/default.private
sudo chmod 600 /etc/opendkim/keys/default.private

# restart OpenDKIM
sudo systemctl restart opendkim

Error: "SPF record return permerror"

SPF syntax มีข้อผิดพลาด หรือ IP address ใช้ CIDR notation ผิด

# ตรวจ SPF syntax ด้วย tool online เช่น
# mxtoolbox.com/spf.aspx

# ตรวจ format ของ IP address ต้องเป็น
v=spf1 ip4:203.0.113.5/32 -all

# ถ้า IP range
v=spf1 ip4:203.0.113.0/24 -all

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

ต้องตั้ง DKIM SPF DMARC ทั้ง 3 อันไหม

ไม่ต้องทั้ง 3 อัน แต่แนะนำให้ตั้งทั้ง 3 SPF ป้องกัน spoofing ขั้นพื้นฐาน DKIM ตรวจสอบว่า email ไม่ถูก tamper บนทาง DMARC บอก receiver ว่า ถ้า email fail DKIM หรือ SPF ให้ทำอย่างไร ทั้ง 3 อันรวมกันให้ protection ที่ดีที่สุด

DKIM key ต้องสร้างใหม่ทุกกี่ปี

ไม่จำเป็น DKIM key ใช้ได้ตลอด แต่ปฏิบัติด้าน security บ้างแล้ว rotate key ทุก 1-2 ปี คุณสามารถสร้าง key ใหม่ เพิ่มทั้ง 2 key (เก่าและใหม่) ลง DNS ไว้แล้วค่อยลบ key เก่า

DMARC report ถูกส่งไปที่ไหน

DMARC report ถูกส่งไปยัง email address ที่กำหนดใน rua= (aggregate report) มาทุกวัน หรือ ruf= (forensic report) เมื่อ email fail ตรวจสอบ DMARC alignment Report มีจำนวน email ที่ pass/fail DKIM SPF และ domain alignment จึงช่วยคุณตรวจจับการปลอมตัวได้