เชิงเทคนิค · คำตอบพร้อมแหล่งอ้างอิง

SMTP Authentication คืออะไรและนำไปใช้อย่างไร

SMTP authentication เป็นกลไกความปลอดภัยที่กำหนดให้โปรแกรมหรือแอปพลิเคชันอีเมลต้องพิสูจน์ตัวตนกับเซิร์ฟเวอร์ SMTP ก่อนจึงจะส่งอีเมลได้ ช่วยป้องกัน open relay โดยให้เฉพาะผู้ใช้ที่ได้รับอนุญาตส่งข้อความผ่านเซิร์ฟเวอร์ได้ โดยทั่วไปใช้ชื่อผู้ใช้และรหัสผ่านผ่านส่วนขยาย AUTH

กระบวนการทำงาน

กระบวนการเริ่มจากไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์และส่งคำสั่ง EHLO เซิร์ฟเวอร์ตอบด้วยรายการส่วนขยายที่รองรับ รวมถึง AUTH จากนั้นไคลเอนต์เลือก mechanism การยืนยันตัวตน เช่น PLAIN หรือ LOGIN แล้วส่งข้อมูลรับรอง หากเซิร์ฟเวอร์ตรวจสอบข้อมูลรับรองกับฐานข้อมูลผู้ใช้แล้วถูกต้อง จะอนุญาตให้ไคลเอนต์ส่งคำสั่ง MAIL FROM และ RCPT TO

ความสำคัญต่อผู้ส่ง

หากไม่มีการยืนยันตัวตน เซิร์ฟเวอร์จะกลายเป็น open relay ที่ให้ใครก็ส่งอีเมลได้ ซึ่งนำไปสู่การขึ้นบัญชีดำ IP อย่างรวดเร็วเมื่อผู้ส่งสแปมใช้ประโยชน์จากพอร์ตที่เปิดอยู่ การใช้ SMTP authentication ทำให้เฉพาะแอปพลิเคชันที่ถูกต้องส่งอีเมลได้ ซึ่งเป็นข้อกำหนดพื้นฐานในการรักษาชื่อเสียงผู้ส่งให้สะอาดและไม่ให้เซิร์ฟเวอร์เมลปลายทางปฏิเสธข้อความ

หมายเหตุการใช้งานจริงและข้อผิดพลาด

ข้อผิดพลาดที่พบบ่อยคือส่งข้อมูลรับรองผ่านการเชื่อมต่อที่ไม่เข้ารหัส เพื่อป้องกันการขโมยข้อมูลรับรอง ควรใช้การยืนยันตัวตนคู่กับ STARTTLS หรือ implicit TLS เสมอ อีกปัญหาที่พบบ่อยคือใช้วิธียืนยันตัวตนที่ล้าสมัยซึ่งผู้ให้บริการสมัยใหม่ไม่รองรับ นักพัฒนาใช้เครื่องมือฟรีของ SendHQ (https://sendhq.cc/tools) เพื่อตรวจสอบการตั้งค่า DNS และการยืนยันตัวตนได้

ตัวอย่างการนำไปใช้จริง

ในการใช้งานทั่วไปด้วย Python และ smtplib นักพัฒนาเชื่อมต่อกับพอร์ต 587 เรียก starttls() เพื่อรักษาความปลอดภัยของการเชื่อมต่อ แล้วเรียก login(user, password) ลำดับนี้ทำให้การยืนยันตัวตนเกิดขึ้นผ่านช่องทางที่เข้ารหัส ก่อนที่เซิร์ฟเวอร์จะรับข้อความไปส่งยังปลายทางสุดท้าย

วิธีการยืนยันตัวตน

วิธีที่พบบ่อยที่สุดได้แก่ PLAIN ซึ่งส่งรหัสผ่านในรูปแบบคล้ายข้อความธรรมดา (Base64) และ LOGIN ซึ่งเป็นวิธีแบบเก่าที่ไคลเอนต์รุ่นเก่าใช้ ระบบสมัยใหม่มักนิยมใช้ OAuth2 สำหรับ SMTP authentication ซึ่งให้แอปพลิเคชันใช้โทเค็นแทนรหัสผ่านแบบคงที่ ลดความเสี่ยงที่ข้อมูลรับรองจะรั่วไหลในไฟล์การตั้งค่า

คำถามที่ทีมมักถาม

SMTP authentication เหมือนกับ SPF หรือ DKIM หรือไม่

ไม่ SMTP authentication ตรวจสอบไคลเอนต์กับเซิร์ฟเวอร์ระหว่างกระบวนการส่ง ส่วน SPF และ DKIM ตรวจสอบผู้ส่งกับเซิร์ฟเวอร์ปลายทางหลังจากส่งอีเมลแล้ว

โดยทั่วไปใช้พอร์ตใดสำหรับ SMTP แบบยืนยันตัวตน

พอร์ต 587 เป็นมาตรฐานสำหรับการส่งอีเมลพร้อมการยืนยันตัวตนและ STARTTLS ส่วนพอร์ต 465 ใช้สำหรับ implicit TLS

จะเกิดอะไรขึ้นหาก SMTP authentication ล้มเหลว

เซิร์ฟเวอร์จะส่งรหัสข้อผิดพลาด 535 Authentication Failed และปฏิเสธข้อความ ทำให้ข้อความไม่ถูกจัดเข้าคิวหรือส่งถึง

แหล่งข้อมูลหลัก