ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

ตั้งค่า DKIM, SPF และ DMARC ของเมลบน Plesk
Home ตั้งค่า DKIM, SPF และ DMARC ของเมลบน Plesk

ตั้งค่า DKIM, SPF และ DMARC ของเมลบน Plesk

อีเมลที่ส่งจากเว็บไซต์ เช่น อีเมลยืนยันคำสั่งซื้อและอีเมลรีเซ็ตรหัสผ่าน มักตกไปอยู่ในกล่องสแปมของผู้รับ สาเหตุหลักคือผู้ให้บริการอีเมลปลายทางไม่สามารถยืนยันได้ว่าอีเมลนั้นถูกส่งมาจากเซิร์ฟเวอร์ที่ได้รับอนุญาตจริง

สามระเบียนที่แก้ปัญหานี้คือ SPF บอกว่าเซิร์ฟเวอร์ใดส่งแทนโดเมนได้ DKIM ลงลายเซ็นดิจิทัลพิสูจน์ว่าไม่ถูกแก้ไขระหว่างทาง และ DMARC บอกว่าให้ทำอย่างไรเมื่อสองอย่างแรกไม่ผ่าน

สิ่งที่ต้องเตรียม

  • Plesk Obsidian และสิทธิ์ผู้ดูแลระบบ
  • สิทธิ์แก้ไข DNS ของโดเมน
  • เมลเซิร์ฟเวอร์ของ Plesk ที่ทำงานอยู่

ขั้นตอนที่ 1: เปิด DKIM ใน Plesk

เข้า Plesk ไปที่ Domains เลือกโดเมน แล้ว Mail Settings ติ๊กที่ Use DKIM spam protection system to sign outgoing email messages แล้วกด OK

เปิดพร้อมกันทุกโดเมนได้ที่ Tools & Settings แล้ว Mail Server Settings

# ตรวจจากบรรทัดคำสั่ง
plesk bin subscription --info example.com | grep -i dkim

# เปิดผ่านคำสั่ง
plesk bin subscription -u example.com -dkim-sign true

เมื่อเปิดแล้ว Plesk จะสร้างคู่กุญแจและเพิ่มระเบียน DNS ให้อัตโนมัติหากโดเมนใช้ DNS ของ Plesk เอง หากใช้ DNS ภายนอก เช่น Cloudflare ต้องคัดลอกไปใส่เอง

ขั้นตอนที่ 2: หาค่าระเบียน DKIM

sudo cat /etc/domainkeys/example.com/default.pub 2>/dev/null
# หรือ
sudo plesk db "SELECT * FROM dns_recs WHERE host LIKE '%_domainkey%';"

หรือดูในหน้า Plesk ที่ Domains แล้วเลือกโดเมน แล้ว DNS Settings มองหาระเบียนชนิด TXT ที่ชื่อขึ้นต้นด้วย default._domainkey

ค่าที่ได้จะมีรูปแบบประมาณนี้

default._domainkey.example.com.  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ..."

นำไปใส่ใน DNS ที่ใช้จริง

ขั้นตอนที่ 3: ตั้งระเบียน SPF

SPF บอกว่า IP ใดได้รับอนุญาตให้ส่งอีเมลแทนโดเมนนี้

example.com.  TXT  "v=spf1 a mx ip4:203.0.113.10 -all"

ความหมายของแต่ละส่วน

  • a อนุญาต IP ที่ระเบียน A ของโดเมนชี้ไป
  • mx อนุญาต IP ของเมลเซิร์ฟเวอร์ที่ระบุใน MX
  • ip4: ระบุ IP โดยตรง
  • -all ปฏิเสธผู้ส่งอื่นทั้งหมดอย่างเด็ดขาด ส่วน ~all คือให้ผ่านแต่ทำเครื่องหมายว่าน่าสงสัย

หากใช้บริการส่งอีเมลภายนอกด้วย ต้องเพิ่มเข้าไป

"v=spf1 a mx include:_spf.google.com include:sendgrid.net ip4:203.0.113.10 -all"

ข้อจำกัดสำคัญ โดเมนหนึ่งต้องมีระเบียน SPF เพียงหนึ่งรายการ หากมีสองรายการจะถือว่าไม่ถูกต้องทั้งคู่ ให้รวมทุกอย่างไว้ในบรรทัดเดียว และจำนวนการค้นหา DNS ที่เกิดจาก include ต้องไม่เกิน 10 ครั้ง

ขั้นตอนที่ 4: ตั้งระเบียน DMARC

เริ่มจากโหมดสังเกตการณ์ก่อนเสมอ อย่าเริ่มด้วยการปฏิเสธเพราะอาจทำให้อีเมลที่ถูกต้องถูกทิ้ง

_dmarc.example.com.  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; pct=100"

เก็บข้อมูลอย่างน้อยสองสัปดาห์ อ่านรายงานที่ส่งมา ตรวจว่าไม่มีระบบที่ส่งอีเมลแทนโดเมนคุณโดยที่คุณไม่รู้ตัว

เมื่อแน่ใจแล้วจึงเข้มขึ้นทีละขั้น

# ขั้นที่สอง กักไว้ในสแปม 25% ของที่ไม่ผ่าน
"v=DMARC1; p=quarantine; pct=25; rua=mailto:[email protected]"

# ขั้นที่สาม ทั้งหมด
"v=DMARC1; p=quarantine; pct=100; rua=mailto:[email protected]"

# ขั้นสุดท้าย ปฏิเสธ
"v=DMARC1; p=reject; pct=100; rua=mailto:[email protected]"

ขั้นตอนที่ 5: ตรวจสอบว่าระเบียนถูกต้อง

dig +short TXT example.com | grep spf
dig +short TXT default._domainkey.example.com
dig +short TXT _dmarc.example.com

ตรวจว่า Reverse DNS ของ IP เซิร์ฟเวอร์ชี้กลับมาที่ชื่อเมลเซิร์ฟเวอร์ ซึ่งเป็นสิ่งที่ผู้ให้บริการอีเมลรายใหญ่ตรวจ

dig +short -x 203.0.113.10
dig +short mail.example.com

ทั้งสองต้องสอดคล้องกัน หากไม่ตรง ให้ติดต่อผู้ให้บริการเซิร์ฟเวอร์เพื่อขอตั้ง PTR Record

ขั้นตอนที่ 6: ทดสอบการส่งจริง

ส่งอีเมลทดสอบไปยังบริการตรวจสอบ เช่น mail-tester.com แล้วดูคะแนนและรายละเอียด

หรือส่งหาตัวเองที่ Gmail แล้วดู Original Message

echo "ทดสอบการส่งอีเมล" | mail -s "ทดสอบ DKIM" -r [email protected] [email protected]

ใน Gmail เปิดอีเมล กดเมนูสามจุด เลือก Show original แล้วดูส่วนหัว

SPF:   PASS with IP 203.0.113.10
DKIM:  'PASS' with domain example.com
DMARC: 'PASS'

ทั้งสามต้องเป็น PASS หากมีอันใดไม่ผ่าน ส่วนหัวจะบอกเหตุผล

ขั้นตอนที่ 7: ตรวจ Log เมื่อมีปัญหา

sudo tail -50 /var/log/maillog
sudo tail -50 /usr/local/psa/var/log/maillog

# ดูคิวอีเมลที่ค้าง
sudo /usr/local/psa/admin/sbin/mailqueuemng -i | head -20

# ดูจำนวนอีเมลในคิว
sudo /usr/local/psa/admin/sbin/mailqueuemng -s

คิวที่สะสมจำนวนมากมักหมายถึงปลายทางปฏิเสธ หรือ IP ของเซิร์ฟเวอร์ติดบัญชีดำ

ขั้นตอนที่ 8: ตรวจว่า IP ติดบัญชีดำหรือไม่

# ตรวจกับรายการที่ใช้กันแพร่หลาย
for bl in zen.spamhaus.org bl.spamcop.net b.barracudacentral.org; do
  q=$(echo 203.0.113.10 | awk -F. '{print $4"."$3"."$2"."$1}')
  r=$(dig +short "$q.$bl")
  printf '%-30s %s\n' "$bl" "${r:-สะอาด}"
done

หากติดบัญชีดำ ให้หาสาเหตุก่อนขอถอด มักเกิดจากบัญชีอีเมลที่ถูกเจาะแล้วถูกใช้ส่งสแปม ตรวจด้วย

sudo grep 'sasl_username' /var/log/maillog | awk -F'sasl_username=' '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -rn | head

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

DKIM ไม่ผ่านทั้งที่เปิดแล้ว

ระเบียน DNS ยังไม่เผยแพร่หรือคัดลอกไม่ครบ ค่า public key ยาวมากและมักถูกตัด ตรวจด้วย dig +short TXT default._domainkey.example.com ว่าได้ค่าครบ

SPF ไม่ผ่าน

ตรวจว่ามีระเบียน SPF เพียงหนึ่งรายการ และ IP ที่ใช้ส่งจริงอยู่ในรายการ ดู IP ที่ใช้ส่งได้จากส่วนหัวของอีเมลทดสอบ

อีเมลยังตกสแปมแม้ทั้งสามผ่าน

ตรวจเนื้อหาอีเมล หลีกเลี่ยงคำที่ตัวกรองสแปมไม่ชอบ ใส่ทั้งเวอร์ชันข้อความธรรมดาและ HTML และตรวจว่า IP ไม่ติดบัญชีดำ ชื่อเสียงของ IP ใหม่ต้องใช้เวลาสร้างสักระยะ

รายงาน DMARC อ่านไม่ออก

รายงานเป็น XML ที่บีบอัดไว้ ใช้บริการวิเคราะห์รายงาน DMARC ที่มีให้ใช้ฟรีหลายเจ้า หรือแตกไฟล์แล้วอ่านด้วยเครื่องมือแปลง

ต้องการระบบอีเมลองค์กรที่ส่งถึงกล่องจดหมายแน่นอน ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security