May 18, 2011

SMTP Authentication (Postfix TLS SASL) on Ubuntu

วันนี้มาติดตั้ง Mail Server ให้ใช้ SMTP Authentication ได้ ด้วย Postfix โดยที่ OS ที่ใช้ คือ Ubuntu นะครับ

ไม่ขอพูดเรื่องการ install postfix ดีกว่า รู้สึกว่าสำหรับ ubuntu นั้นไม่ยากสำหรับทุกคนเพราะว่าเรามี apt-get นั่นเอง ส่วน postfix ที่ใช้นั้นเราต้อง support การทำงานร่วมกับ tls ด้วยนะครับ (แต่ที่ ubuntu ให้มามันก็ support อยู่แล้วนินา) ผ่านโลด


TLS on Postfix

เมื่อเรามี postfix อยู่ และ config เบื้องต้นเอาไว้แล้ว (หรือไม่ config อะไรเลย default มันก็ใช้ได้แล้ว) ลองดูเรื่อง TLS ครับ
smtpd_tls_cert_file=/etc/ssl/certs/mail-cert.pem
smtpd_tls_key_file=/etc/ssl/private/mail-key.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
ขอผ่านเรื่องการสร้าง SSL certificate ไปนะครับ ติ๊งต่างว่าเราทำกันไว้แล้ว หรือถ้ายังก็ไปหาลองทำกันเอานะครับ ลอง search หาคำว่า "openssl generate certificate" จะเจอเยอะแยะมากมายในการสร้าง self-signed certificates

เสร็จแล้วก็อย่าลืม restart postfix นะครับ
/etc/init.d/postfix restart
SMTP authentication with Postfix

เราต้องใช้ SASL ครับ มันคืออะไร ไว้จะมาอธิบายอีกทีครับ ตอนนี้ยังงงๆ ติดตั้งกันไปก่อนด้วย
apt-get install libsasl2 libsasl2-modules sasl2-bin
แล้ว apt-get ก็จัดให้ แล้วก็บอกส่งท้ายว่า
Setting up sasl2-bin (2.1.22.dfsg1-8ubuntu2) ...
* To enable saslauthd, edit /etc/default/saslauthd and set START=yes
เขาบอกว่าลงให้แล้วนะ แต่ยังไม่ได้ enable ถ้าจะใช้งานก็ให้ไปแก้ไฟล์ /etc/default/saslauthd ยังงี้ครับ
START=yes
ถ้าหาก postfix ของเรานั้นรันใน chroot environment (ก็ดีนะครับเพื่อความปลอดภัย) เราก็เอา sasl ของเรานั้น ไปทำงานใน directory ที่เราให้ postfix นั้นใช้ chroot ครับ ด้วยการเข้าไปแก้ parameter ของ การรัน sasld ในไฟล์ startup script คือ /etc/init.d/saslauthd ครับ ในส่วนของ DAEMON_ARGS=
DAEMON_ARGS="-m /var/spool/postfix/var/run/saslauthd"
แล้วอย่าลืมสร้าง directory ให้ sasl ของเรานะครับ
mkdir -p /var/spool/postfix/var/run/saslauthd

chown -R root.sasl /var/spool/postfix/var/run/saslauthd
เสร็จแล้วอย่าลืม restart saslauthd นะ
/etc/init.d/saslauthd restart
ลอง check ดูนะครับว่ามันรันได้ป่าว
ps -ef | grep saslauthd
Check ดูว่า sasl ได้สร้างไฟล์ หรือ socket ใน dir ที่ sasl ทำงานหรือเปล่า
ls -lh /var/spool/postfix/var/run/saslauthd
ในส่วนของ Postifx กันต่อครับ เราต้องสร้าง directory /etc/postfix/sasl และไฟล์ smtpd.conf ดังนี้
pwcheck_method: saslauthd
และ config เพิ่มเติมในไฟล์ /etc/postfix/main.cf ตามนี้ครับสำหรับ sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_application_name = smtpd
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
check_relay_domains
เสร็จแล้วก็ restart postfix โลด
/etc/init.d/postfix restart
ทดสอบครับด้วยการสร้าง string นี้จาก account และ password บนเครื่องของเราด้วยคำสั่ง
perl -MMIME::Base64 -e 'print encode_base64("usernameusernamepassword");'
มันก็จะได้ออกมาประมาณนี้นะครับ
dXNlcm5hbWUAdXNlcm5hbWUMb29iYXI=
แล้วก็ให้ copy string ชุดนี้เอาไว้นะครับเพื่อทดสอบด้วย telnet
telnet loclahost 25
มันจะออกมาประมาณนี้ครับ
220 mail.foo.com ESMTP Postfix
EHLO my.host
250-mail.foo.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 GSSAPI
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 GSSAPI
250-XVERP
250 8BITMIME
AUTH PLAIN dXNlcm5hbWUAdXNlcm5hbWUMb29iYXI=
235 Authentication successful
QUIT
221 Bye
เราก็ทักทาย smtp server ตามตัวอย่างครับ ตัวหนาด้านบนคือคำสั่งที่เราใส่เพื่อคุยกับ smtp ครับ ถ้าขึ้น successful ดังตัวอย่างแสดงว่าโอเคแล้ว อย่าลืมตรวจสอบ log file ดูเล่นๆครับ /var/log/mail.log ก็เสร็จครับ หรือลองกับ mail client อย่าง Outlook, Thunderbird, OperaMail, Evolution, MAC Mail ,Eudora, IncrediMail ฯลฯ

ตอนนี้ลงเสร็จแล้ว เดี๋ยวจะเอามาให้ทดลองใช้กันนะคร้าบ

No comments:

Post a Comment