บทความนี้จะอธิบายการแก้ไขคอนฟิก postfix เพื่อเปิด SMTP AUTH เพิ่มเติมความปลอดภัยของเมล์เซิร์ฟเวอร์อีกระดับหนึ่งคือมีการตรวจสอบ login, password กับโปรแกรม dovecot
หลังจากที่ คอนฟิกส่งเมล์ SMTP ด้วย TLS ใน postfix บน Fedora 17 เสร็จสิ้น ตอนนี้เราสามารถส่งเมล์แบบมีการเข้ารหัสข้อมูลเพื่อเพิ่มความปลอดภัยได้แล้ว
แต่เครื่อง client ที่ต้องการส่งเมล์เข้าพอร์ต 587 (submission) ต้องมี ip อยู่ใน network ที่กำหนดอยู่ในคอนฟิก “mynetworks” ในไฟล์ main.cf ของ postfix
ตัวอย่าง error ในไฟล์ /var/log/maillog ที่ผู้ส่งไม่อยู่ใน ip ที่กำหนดไว้ใน mynetworks
Jul 8 21:53:00 fc17-64a postfix/submission/smtpd[11881]: NOQUEUE: reject: RCPT from unknown[192.168.7.104]: 554 5.7.1 <someone@gmail.com>: Relay access denied; from=<user1@example.com> to=<someone@gmail.com> proto=ESMTP helo=<localhost>
ดั้งเดิมหากต้องการส่งเมล์ สามารถใช้ SMTP ของใครก็ได้ เพื่อส่งเมล์ไปยังผู้อื่น แต่เนื่องจากถูกนำไปใช้ในทางที่ไม่ดีเช่นส่ง spam ทำให้เมล์เซิร์ฟเวอร์ส่วนใหญ่ต้องเปลี่ยนมากำหนดผู้ที่สามารถใช้ส่งเมล์ได้ เช่นกำหนดเฉพาะบาง network เท่านั้นที่สามารถใช้ได้
หากเราต้องการใช้ SMTP จากที่ไหนก็ได้ผ่านทางอินเตอร์เน็ต แทนที่จะเปิดให้ network ไหนก็ได้สามารถส่งเมล์ผ่านเซิร์ฟเวอร์เราได้ (ห้ามทำเด็ดขาด ไม่งั้นจะถูกใช้เป็นเมล์เซิร์ฟเวอร์ เพื่อส่ง spam แน่นอน) ที่นิยมทำกันคือก่อนที่ผู้ใช้จะส่งเมล์ได้ต้องมีการตรวจสอบสิทธิ์ของผู้ใช้ก่อน (เรียกว่า SMTP AUTH) เช่นการล็อกอินด้วย login, password แล้วตรวจสอบกับโปรแกรมที่ใช้ส่งเมล์เช่น dovecot เป็นต้น
แก้ไขคอนฟิก dovecot
แก้ไขไฟล์ตอนฟิกของ dovecot เพื่อสร้างไฟล์ socket ใช้ติดต่อกับโปรแกรม postfix สำหรับการทำตรวจสอบสิทธิ
[root@fc17-64a ~]# vi /etc/dovecot/conf.d/10-master.conf ... # Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } ...
รีสตาร์ตเซอร์วิส dovecot เพื่อให้คอนฟิกใหม่มีผล
[root@fc17-64a ~]# systemctl restart dovecot.service
ไฟล์ socket ที่ถูกสร้างขึ้น
[root@fc17-64a ~]# ls -l /var/spool/postfix/private/auth srw-rw-rw-. 1 postfix postfix 0 Jul 8 21:45 /var/spool/postfix/private/auth
แก้ไขคอนฟิก postfix
แก้ไขคอนฟิกไฟล์ main.cf โดยเพิ่มบรรทัดคอนฟิกเหล่านี้ เพื่อเปิดการทำ SMTP AUTH กับ dovecot
[root@fc17-64a ~]# vi /etc/postfix/main.cf ... smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination ...
เปิดคุณสมบัติ SMTP AUTH ของ submission ในไฟล์ master.cf
[root@fc17-64a ~]# vi /etc/postfix/master.cf ... submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING ...
คำเตือน อย่าสับสนระหว่างไฟล์คอนฟิก main.cf และไฟล์ master.cf ซึ่งถ้าใส่คอนฟิกผิดที่ ก็จะใช้งานไม่ได้
รีสตาร์ตเซอร์วิส postfix
ตัวอย่าง error ในไฟล์ maillog หลังเปิด SMTP AUTH แต่ผู้ส่งไม่ได้คอนฟิกให้มีการล็อกอินไว้
Jul 8 21:54:59 fc17-64a postfix/submission/smtpd[12060]: NOQUEUE: reject: RCPT from unknown[192.168.7.104]: 554 5.7.1 <unknown[192.168.7.104]>: Client host rejected: Access denied; from=<user1@example.com> to=<someone@gmail.com> proto=ESMTP helo=<localhost>
หลังจากเปิดคุณสมบัติ SMTP AUTH บนเมล์เซิร์ฟเวอร์แล้ว เครื่องที่ส่งต้องคอนฟิกให้มีการล็อกอินก่อนส่งเมล์ด้วย
คอนฟิก SMTP AUTH บน Android และ iPhone
ตัวอย่างคอนฟิก SMTP AUTH เมล์ของ Android (เวอร์ชั่น 2.3)
ตัวอย่างคอนฟิก SMTP AUTH เมล์ของ iPhone (เวอร์ชั่น 5.1)