ทำความรู้จัก SPF, DKIM และ DMARC ตัวช่วยสำหรับป้องกันสแปมอีเมล

หนึ่งในงานของผู้ดูแลระบบอีเมลที่ต้องทำก็คือ การป้องกันสแปมเข้ามาจากภายนอก และการต้องดูแลการส่งอีเมลของระบบเราให้สามารถส่งไปยังปลายทางให้ได้ ซึ่งงานดังกล่าวเป็นเหมือนงานหลักที่ต้องทำเสมอ โดยเทคนิคหนึ่งที่มักใช้กันก็คือการตรวจสอบไอพีก็คือ Domain Blacklist นั่นเอง (สามารถอ่านได้ในบทความ Domain Blacklist และ Email Security with FortiMail Solution) หากเราพิจารณาในอีกแง่หนึ่ง การใช้งาน Domain Blacklist ก็เปรียบเสมือนกับการเชื่อถือคนกลางซึ่งเป็นใครก็ไม่รู้ แต่จะดีกว่าไหม ถ้าเราเชื่อถือข้อมูลที่เจ้าของโดเมนนั้นเป็นผู้แจ้งเองว่าอีเมลที่ถูกส่งมานั้นจะต้องส่งมาจากที่ไหน ไอพีแอดเดรสอะไร หากอีเมลที่มีการส่งโดยไม่อยู่ในข้อมูลที่เจ้าของระบบประกาศเอาไว้ ผู้รับปลายทางสามารถจัดการอีเมลได้ตามที่เจ้าของโดเมนแจ้งเอาไว้ นั่นจึงเป็นที่มาของ SPF, DKIM และ DMARC นั่นเอง ซึ่งในปีนี้ (2024) ทาง Yahoo, Gmail และ Apple ได้ประกาศการบังคับใช้งาน SPF, DKIM และ DMARC อย่างจริงจัง ซึ่งหนึ่งในปัญหาที่ผมเจอบ่อยที่สุดเลยก็คือ SPF, DKIM และ DMARC คืออะไร? แล้วเราต้องทำอย่างไร? ถ้าต้องคอนฟิกจะต้องทำยังไง? ก่อนอื่นเลยผมขออธิบายหลักการทำงานและการตรวจสอบเป็นส่วนๆ เพื่อทำความเข้าใจได้ในครั้งเดียว

ระบบ SPF คืออะไร แล้วใช้งานอย่างไร
ระบบ SPF ย่อมาจาก Sender Policy Framework เป็นการประกาศให้รู้ว่าอีเมลที่มาจากโดเมนนี้ จะต้องส่งมาจากไอพีแอดเดรสไหน โดยไอพีแอดเดรสที่ประกาศเอาไว้จะถูกเขียนเอาไว้ที่ TXT Record บนระบบ DNS อีกทีหนึง ซึ่งนั่นแปลว่าผู้ดูแลระบบจะต้องทราบว่าอีเมลของโดเมนเราจะถูกส่งมาจากไอพีแอดเดรสไหนได้บ้าง


SPF-DKIM-DMARC_01.png

จากภาพเป็นรูปแบบการทำงานของ SPF โดยเครื่องอีเมลเซิร์ฟเวอร์ปลายทางจะตรวจสอบไอพีแอดเดรสของผู้ส่งกับอีเมลผู้ส่ง กับระบบ DNS (ผ่านทาง Text Record) ว่าถูกต้องตามที่ประกาศเอาไว้หรือไม่ ถ้าถูกต้องก็ให้รับอีเมลฉบับดังกล่าว แต่ถ้าไม่ถูกต้องก็ให้ทำตามที่ผู้ดูแลระบบกำหนด

SPF-DKIM-DMARC_02.png 
จากภาพด้านบน แสดงตัวอย่างการตรวจสอบ SPF Record ของโดเมน hotmail.com โดยสามารถสังเกตค่าที่ได้วงกรอบสีเขียวเอาไว้ ซึ่ง SPF Record จะถูกประกาศโดยจะมีข้อมูลเริ่มต้นที่ "v=spf1" นั่นเอง โดยจากข้อมูล SPF Record อธิบายได้ว่าอีเมลที่ส่งมาจากโดเมน hotmail.com จะมาจากไอพีแอดเดรส 157.55.0.128/25 (ค่า ip4:157.55.9.128/25) หรือมาจากไอพีที่ประกาศใน TXT Record ที่ชื่อ spf-a.outlook.com (ค่า include:spf-a.outlook.com) หรือมาจากไอพีที่ประกาศใน TXT Record ที่ชื่อ spf-b.outlook.com ไปเรื่อยๆ จนถึง TXT Record _spf-ssg-c.microsoft.com โดยถ้าไม่ตรงตามข้อกำหนดให้ไม่รับอีเมลแบบ Hard Fail (ค่า "-all") นั่นเอง

จะสังเกตได้ว่าการคอนฟิก SPF Record สำหรับโดเมนของเรานั้นเป็นการคอนฟิกที่เซิร์ฟเวอร์ DNS เพียงอย่างเดียว ไม่จำเป็นต้องยุ่งเกี่ยวกับเครื่องเมลเซิร์ฟเวอร์แต่อย่างใด เพียงแต่เราต้องหาให้ได้ว่าระบบของเรามีส่งจากไอพีแอดเดรสไหนบ้าง ซึ่งในทุกๆ ไอพีจะต้องเป็นไอพีแอดเดรสจริง โดยจะขึ้นอยู่กับแพกเกจอินเทอร์เนตที่เราใช้บริการนั่นเอง โดยอาจจะเป็น FTTx แบบ Fixed IP Address หรือใช้งานเป็นอินเทอร์เน็ตสำหรับองค์กร (Corporate Internet) ก็ได้ หากติดตั้งระบบอีเมลเอาไว้ในองค์กร หรืออาจจะเลือกใช้งาน Colocation, Email Hosting หรือ Cloud Service ก็ได้ แต่ต้องไม่ลีมว่าเราต้องมีการคอนฟิกค่า SPF สำหรับระบบอีเมลนั่นเอง

ในทางปฎิบัติการเขียน SPF Record ผมแนะนำให้ใช้งานผ่านเว็บไซต์ https://www.spfwizard.net เพื่อช่วยในการสร้าง SPF Record และอาจจะต้องปรึกษาเจ้าหน้าที่ดูแลระบบของผู้ห้บริการเพิ่มเติม เนื่องจากการระบุ SPF Record นั้น จำเป็นต้องทราบหมายเลขไอพีแอดเดรสที่ใช้ในการส่งทั้งหมด ถ้าหากระบบของเรามีการส่งอีเมลผ่านทางเว็บไซต์ (เช่น ข้อความแจ้งเตือนการสมัครสมาชิก หรือข้อความแจ้งเตือนการแจ้งปัญหา) ก็ต้องระบุไอพีแอดเดรสของระบบอีเมลที่ส่งผ่านหน้าเว็บเข้ามาอีกด้วย
 
SPF-DKIM-DMARC_03.png

จากภาพด้านบนเป็นตัวอย่าง SPF ของบริการ Smart Mail ของทางเคเอสซีที่มีการใช้งานโดเมน ksc.th.com ในการส่ง จะเห็นได้ว่ามีการสร้าง SPF Record เอาไว้แล้วนั่นเอง โดยมีการอ้างอิง SPF Record เอาไว้ 3 ชั้น ซึ่งเราสามารถตรวจสอบได้โดยการตรวจสอบ DNS ผ่านทางคำสั่ง “nslookup -type=txt ตามด้วยชื่อโดเมนหรือชื่อที่เราต้องการ”

ระบบ DKIM คืออะไร และใช้งานอย่างไร
ระบบ DKIM ย่อมาจาก Domain Keys Identified Mail ซึ่งใช้แนวคิดของการทำลายเซ็นดิจิทัล (Digital Signature) มาใช้ในการยืนยันอีเมลที่ส่งอีกทีหนึ่ง โดยมีรูปแบบการทำงานเป็นดังรูป

SPF-DKIM-DMARC_03.5.png 

จากรูปด้านบนจะอธิบายได้ว่าเซิร์ฟเวอร์ต้นทางของผู้ส่งจะเพิ่มลายเซ็นดิจิทัลเข้าไปโดยใช้กุณแจส่วนตัว (private key) ในการเข้ารหัส โดยแนบลายเซ็นดิจิทัลเข้าไปใน Email Header เมื่อเซิร์ฟเวอร์ปลายทางได้รับอีเมลแล้ว หากตรวจสอบพบลายเซ็นดิจิทัลใน Email Header ก็จะทำการตรวจสอบลายเซ็นดิจิทัลดังกล่าวโดยหากุญแจสาธารณะ (public key) จากระบบ DNS อีกทอดหนึ่ง หากตรวจสอบว่าอีเมลฉบับดังกล่าวมีลายเซ็นดิจิทัลถูกต้องก็ถือว่าอีเมลฉบับนั้นถูกส่งมาจากผู้ส่งจริง หากไม่ตรงกับก็จะทราบได้ทันทีว่าอีเมลฉบับนั้นปลอมแปลงเข้าม (เพราะไม่มีกุญแจส่วนตัวในการเข้ารหัสนั่นเอง) จะเห็นได้ว่าการใช้เทคนิคของ DKIM ในการส่งอีเมลนั้นเครื่องเซิร์ฟเวอร์ต้นทางจะต้องรองรับการใส่ลายเซ็นดิจิทัล ส่วนเครื่องเซิร์ฟเวอร์ปลายทางก็ต้องมีความสามารถในการตรวจสอบเช่นเดียวกัน ซึ่งการตรวจสอบโดยใช้ DKIM นั้นจะใช้ทรัพยากรสูงกว่าระบบ SPF อีกด้วย เพราะต้องมีการเข้ารหัสและถอดรหัส จึงยังไม่ได้รับความนิยมมากเหมือนกับระบบ SPF นั่นเอง แต่ในปัจจุบันถูกบังคับใช้เป็นมาตรฐานมากขึ้น
 
SPF-DKIM-DMARC_04.png

จากรูปด้านบนเป็นตัวอย่างการตรวจสอบ Email Header ผ่านโปรแกรม Microsoft Outlook ซึ่งจะสามารถตรวจสอบข้อมูลของ DKIM ได้จากข้อมูลใน Internet Headers โดยส่วนของ DKIM จะแสดงเอาไว้ในข้อมูล “DKIM-Signature” นั่นเอง

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

ระบบ DMARC คืออะไร และใช้งานอย่างไร

ระบบ DMARC ย่อมาจาก Domain-based Message Authentication, Reporting and Conformance โดยเป็นส่วนเพิ่มเติมจาก SPF และ DKIM เนื่องจากระบบ SPF และ DKIM ไม่ได้มีรายละเอียดว่าหากส่งพบปัญหาจะต้องส่งข้อมูลไปที่ใด นั่นจึงเป็นที่มาของการกำหนดมาตรฐาน DMARC ขึ้นมา โดยมีรูปแบบการทำงานเป็นดังรูป

 SPF-DKIM-DMARC_05.png

จากรูปด้านบน จะเห็นว่า DMARC จะเสมือนกับการประกาศข้อมูลของการส่งอีเมลเอาไว้ ซึ่งเราสามารถตรวจสอบได้โดยใช้คำสั่ง “nslookup -type=txt _dmarc.ชื่อโดเมนที่เราต้องการตรวจสอบ” จากตัวอย่างเป็นการตรวจสอบ DMARC ของโดเมน hotmail.com ได้ผลการตรวจสอบดังรูป

 SPF-DKIM-DMARC_06.png

จากรูปด้านบนเป็นการแสดง DMARC ของโดเมน hotmail.com ซึ่งสามารถอธิบายคร่าวๆ ได้ว่า การใช้งานเป็นแบบการเฝ้าดูหรือรายงาน (p=none) ให้ส่งรายงานสรุปปัญหาไปที่ rua@dmarc.microsoft (rua=mailto:rua@dmarc.microsoft) ให้ส่งรายงานอีเมลที่มีปัญหาไปที่ ruf@dmarc.microsoft (ruf=mailto:ruf@dmarc.microsoft) และให้ส่งรายงานที่เกิดขึ้นบางส่วนถ้ามี DKIM หรือ SPF มีปัญหา (fo=1:s:d) ซึ่งผู้ดูแลระบบก็สามารถตรวจสอบปัญหาได้จากอีเมลที่ประกาศเอาไว้ใน DMARC Record อีกทอดหนึ่ง (หรือสรุปได้ว่าจะต้องมีอีเมล rua@dmarc.microsoft และ ruf@dmarc.microsoft เพื่อใช้ในการตรวจสอบ)

 SPF-DKIM-DMARC_07.png

จากรูปด้านบนเป็นตัวอย่าง DMARC record ของโดเมน gmail.com ซึ่งจะพบว่ามีการกำหนดเอาไว้เช่นเดียวกัน แต่มีรายละเอียดบางส่วนแตกต่างไปจากของโดเมน hotmail.com ในบางส่วน สำหรับการเขียน DMARC สามารถใช้เว็บไซต์ https://www.kitterman.com/dmarc/assistant.html หรือ https://mxtoolbox.com/DMARCRecordGenerator.aspx ในการช่วยเขียนนโยบายได้

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

อ้างอิง: