ฉบับเต็ม - อธิบายอย่างละเอียดทีละขั้นตอน
การติดตั้ง Postfix กับ SMTPUTF8 ที่เปิดใช้งาน, Cyrus SASL และ OpenSSL
เนื้อหา
- 1 สรุปสาระสำคัญของ mail server
- 2 ข้อสังเกต ความต้องการและการตั้งค่าเริ่มต้น
- 3 ติดตั้ง Postfix จาก source และ libraries ที่จำเป็น (Cyrus SASL, OPENSSL)
- 4 การตั้งค่า Postfix
- 5 ทดสอบว่าคุณมีการเปิดการใช้งาน SMTPUTF8 หรือไม่
- 6 เปิดใช้งาน SMTP Auth
- 7 เปิดใช้งาน TLS
- 8 การรับและส่ง email จากอินเทอร์เน็ต
- 9 การตั้งค่า Courier authlib, Courier IMAP
- 10 ทดสอบ IMAP และ POP3
- 11 ติดตั้ง Squirrel-mail
- 12 ข้อผิดพลาด
- 13 ลิงค์ที่เกี่ยวข้อง
- 14 แหล่งที่มา
สรุปสาระสำคัญของ mail server
คู่มือนี้ใช้สำหรับการติดตั้ง mail server ที่สามารถรับ mail ที่เป็น SMTPUTF8 ได้ นอกจากนี้ยังป้องการการตีกลับของอีเมลหากผู้ส่งส่งไปยัง mail server
ที่ไม่รองรับ SMTPUTF8 รวมถึง IMAP และ POP3 ที่ใช้ Courier ด้วย ผู้ใช้จะถูกเพิ่มเป็น local user ถึงแม้ว่าจะ login ผ่าน SSH หรือไม่ก็ตาม mail ทั้งหมดจะถูกเก็บไว้ที่ /home/user
Squirrel-mail ที่ถูกแก้ไขนี้จะถูกติดตั้งในการส่งและรับ email (จะต้องมีการทดสอบ)
email client สามารถนำมาใช้ได้ โดยใช้ username ที่ไม่ได้เป็น EAI address
ใช้ Ubuntu 14.04 (Trusty)
ข้อสังเกต ความต้องการและการตั้งค่าเริ่มต้น
- คุณต้องแน่ใจว่าไม่มีการติดตั้ง Postfix หรือใช้ apt-get ติดตั้งส่วนเสริมของ mail software เพราะว่ามันจะทำการติดตั้ง Postfix ตัวเก่าที่ไม่รองรับ SMTPUTF8
- ถ้าคุณได้ติดตั้งส่วนเสริมของ mail software หลังจากการติดตั้ง คุณต้องทดสอบให้แน่ใจว่า server ของคุณสามารถส่งกลับมาเป็น SMTPUTF8
- DNS ของคุณควรต้องติดตั้งให้พร้อมก่อนการตั้งค่า
- hostname คือ ชื่อโดเมนของคุณ เช่น domain.com
- mail.hostname คือ ชื่อ Mail server ของคุณ เช่น mail.domain.com
แก้ไข hostname
ถ้าคุณใช้ international domain ให้คุณใช้ในรูปแบบ punycode
ตัวอย่าง: mail.วีคลาส.ไทย punycode equivalent ควรจะเป็น mail.xn--42c0eeo3bp.xn--o3cw4h
sudo hostname mail.domain.com
ปิดและเปิด server ใหม่ เพื่อปรับปรุง hostname
หลังจากปิดและเปิด server ใหม่แล้ว ให้ใช้คำสั่งต่อไปนี้จะแสดง hostname เพื่อดูว่า hostname เปลี่ยนแล้ว
hostname
ติดตั้ง Postfix จาก source และ libraries ที่จำเป็น (Cyrus SASL, OPENSSL)
ใช้คำสั่ง get เพื่อดาวน์โหลด Postfix เวอร์ชั่น 3.0.1 หรือเวอร์ชั่นที่ใหม่กว่าเพื่อเปิดใช้งาน SMTPUTF8 คุณสามารถโหลดได้จาก http://www.postfix.org/download.html ในตัวอย่างด้านล่าง เราดาวน์โหลด postfix-3.0.1.tar.gz เวอร์ชั่นของคุณอาจจะแตกต่างออกไป ขณะนี้การติดตั้ง Postfix ด้วย apt-get นั้นจะทำการติดตั้ง Postfix เวอร์ชั่นเก่าที่ยังไม่รองรับ SMTPUTF8 ซึ่งอาจจะมีการเปลี่ยนแปลงในภายหลัง คุณสามารถดูคู่มือต้นฉบับได้จาก http://www.linuxfromscratch.org/blfs/view/cvs/server/postfix.html
ติดตั้ง libraries ที่จำเป็นสำหรับ users และ directory
sudo apt-get update
sudo apt-get install icu-devtools libicu-dev libsasl2-dev libssl-dev
sudo apt-get build-dep postfix
sudo groupadd -g 32 postfix
sudo groupadd postdrop
sudo useradd -c "Postfix Daemon User" -d /var/spool/postfix -g postfix -s /bin/false -u 32 postfix
sudo chown -v postfix:postfix /var/mail
ดาวน์โหลด Postfix 3.0.1 หรือเวอร์ชั่นที่ใหม่กว่า
tar -xzvf postfix-3.0.1.tar.gz
cd postfix-3.0.1
sed -i 's/.\x08//g' README_FILES/*
Compile ด้วย openssl และ sasl auth
make CCARGS="-DUSE_TLS -I/usr/include/openssl/ \
-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" \
AUXLIBS="-lssl -lcrypto -lsasl2" makefiles && make
ติดตั้ง Postfix
sudo sh postfix-install -non-interactive daemon_directory=/usr/lib/postfix \
manpage_directory=/usr/share/man \
html_directory=/usr/share/doc/postfix-3.0.1/html \
readme_directory=/usr/share/doc/postfix-3.0.1/readme
การตั้งค่า Postfix
สร้าง Mails Alias สำหรับ root หรือ postmaster เพื่อส่งไปยังผู้ใช้งานจริง (YourLogin)
sudo vi /etc/aliases
copy และ paste ตัว code ด้านล่าง โดยเปลี่ยน YourLogin เป็น user ของคุณเองแล้วทำการ save และ quit
MAILER-DAEMON: postmaster
postmaster: root
root: YourLogin
ต่อจากนั้น
sudo newaliases
แก้ไข mail.domain.tld, domain.tld, yourotherdomain.tld (yourotherdomain.tld ไม่จำเป็นต้องใส่ก็ได้)
sudo postconf -e 'myhostname = mail.domain.tld'
sudo postconf -e 'mydomain = domain.tld'
sudo postconf -e 'myorigin = $mydomain'
sudo postconf -e 'inet_interfaces = all'
sudo postconf -e 'mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24'
sudo postconf -e 'alias_database = hash:/etc/aliases'
sudo postconf -e 'alias_maps = hash:/etc/aliases'
sudo postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, yourotherdomain.tld'
sudo postconf -e 'smtputf8_enable = yes'
ขั้นตอนสุดท้าย start Postfix ในครั้งแรก
sudo /usr/sbin/postfix start
@TODO
Enable Postfix service to run at startup
ลองใช้งานและส่ง mail โดยใช้ Telnet ส่ง mail ไปยัง server อื่นๆ เช่น gmail
ทดสอบว่าคุณมีการเปิดการใช้งาน SMTPUTF8 หรือไม่
ป้อนคำสั่งในหน้า console ซึ่งคำสั่งจะทำการเชื่อมต่อไปยัง SMTP
telnet localhost 25
ควรจะแสดงผลลัพธ์ดังนี้
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 YourHostName ESMTP Postfix
พิมพ์คำสั่งด้านล่างแล้วกด enter
EHLO localhost
เมื่อพบว่ามี 250 SMTPUTF8 อยู่ แสดงว่า server ของคุณ สามารถรับและส่ง mail จากที่อยู่ email สากลได้
250-YourHostName
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
หากไม่พบ 250 SMTPUTF8 ให้ลองเอา Postfix ออกและลองใหม่อีกครั้ง เพราะอาจจะมีการติดตั้งส่วนเสริม software ของ Postfix ที่เป็นตัวเก่าเหลืออยู่
เปิดใช้งาน SMTP Auth
sudo apt-get install libsasl2-modules sasl2-bin
sudo cp /etc/default/saslauthd /etc/default/saslauthd-postfix
แก้ไขไฟล์ /etc/default/saslauthd-postfix โดยกำหนดตัวแปลต่อไปนี้ START, NAME และ OPTIONS
START=yes
DESC="SASL Auth. Daemon for Postfix"
NAME="saslauthd-postf" # max. 15 char.
# Option -m sets working dir for saslauthd (contains socket)
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd" # postfix/smtp in chroot()
sudo rm -rf /run/saslauthd
sudo ln -s /var/spool/postfix/var/run/saslauthd /run/saslauthd
sudo dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
sudo adduser postfix sasl
cd /etc/pam.d
sudo cp other smtp
sudo service saslauthd restart
sudo mkdir /etc/sasl2
สร้าง หรือ แก้ไขไฟล์ /etc/sasl2/smtpd.conf ใช้เฉพาะวิธีการแบบ PLAIN เท่านั้น
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
ปรับปรุงการตั้งค่า Postfix
sudo postconf -e 'smtpd_sasl_path = smtpd'
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postfix reload
สร้าง user ที่เราสามารถทดสอบการ authentication ได้ แทนที่ AnyUserName ด้วย user ของคุณ
sudo useradd -m AnyUserName -s /usr/sbin/nologin
sudo passwd AnyUserName
สร้าง Auth key ของคุณ แทนที่ username ด้วย username ของคุณ และแทนที่ password ด้วย password ของคุณ
perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'
แทนที่ dGVzdAB0ZXN0AHRlc3Q= ด้วย key ที่คุณสร้างขึ้น
telnet localhost 25
EHLO localhost
AUTH PLAIN dGVzdAB0ZXN0AHRlc3Q=
คุณควรจะได้รับข้อความว่า Authentication successful
จบการตั้งค่า Postfix ด้วยการอนุญาติให้เฉพาะผู้ใช้ที่ทำการ authenticate ทำการส่งไปยัง SMTP ได้
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'smtpd_sasl_local_domain = $mydomain'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'
sudo postconf -e 'smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_sender_login_mismatch'
เปิดใช้งาน TLS
สร้าง certificates
cd /etc/postfix
sudo openssl req -new -outform PEM -out smtpd.cert \
-newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM \
-days 365 -x509
ตอบคำถามต่อไปนี้เมื่อได้รับแจ้ง
ปรับปรุงการตั้งค่า Postfix
sudo postconf -e 'smtpd_enforce_tls = no'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_use_tls = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
sudo postfix reload
สามารถทดสอบโดยการ telnet ไปยัง 25 และใช้คำสั่ง EHLO จะพบคำว่า STARTTLS
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
พิมพ์คำสั่งด้านล่าง
STARTTLS
ปรากฎผลลัพธ์ดังนี้
220 2.0.0 Ready to start TLS
การรับและส่ง email จากอินเทอร์เน็ต
- หมายเหตุ การติดตั้ง mail ผ่าน command line อาจจะไปติดตั้งทับ Postfix ของคุณด้วย Postfix ตัวเก่ากว่า
การส่ง email ด้วย telnet
telnet localhost 25
EHLO localhost
MAIL FROM: <youruser@domain.tld> SMTPUTF8
RCPT TO: <EAI@IDN.idn>
data
Subject: A Test
This is the body
.
ใช้เครื่องหมาย "." เพื่อจบข้อความและทำการส่งข้อความ
ในส่วนนี้โปรดตรวจสอบให้แน่ใจว่าสามารถรับและส่ง mail ได้
สามารถส่งข้อความด้วย EAI address และตรวจสอบได้ที่ /var/mail/mail.log ใน log ด้านล่าง
หมายเหตุ test@domain.tld คือ ผู้รับ local
Aug 3 02:48:49 ip-172-31-21-209 postfix/local[21614]: 7EAD343550: to=<test@domain.tld>, relay=local, delay=0.62, delays=0.62/0/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Aug 3 02:48:49 ip-172-31-21-209 postfix/qmgr[21586]: 7EAD343550: removed
email จะถูกจัดเก็บไว้ที่ /var/mail/
หากไม่ได้รับ email ให้ลองใช้เครื่องมือ online อื่น เช่น mxtoolbox.com เพื่อตรวจสอบปัญหาที่เกิดขึ้น
การตั้งค่า Courier authlib, Courier IMAP
ขั้นตอนนี้จะทำการเปิดใช้งาน IMAP และ POP3
ติดตั้ง libtool ซึ่งจำเป็นสำหรับ authlib
sudo apt-get install libtool
ติดตั้ง Courier Unicode Library 1.2 ซึ่งสามารถดาวน์โหลดได้จาก http://sourceforge.net/projects/courier/files/courier-unicode
tar -jxvf courier-unicode-1.2.tar.bz2
cd courier-unicode-1.2
./configure
make
sudo make install
ดาวน์โหลด authlib ได้จาก http://sourceforge.net/projects/courier/files/authlib/ เวอร์ชั่นล่าสุดคือ 0.66.3
tar -jxvf courier-authlib-0.66.3.tar.bz2
cd courier-authlib-0.66.3
./configure --with-authshadow --with-mailuser=postfix --with-mailgroup=postfix
make
sudo make install
sudo make install-configure
แก้ไขไฟล์ /usr/local/etc/authlib/authdaemonrc และเปลี่ยนค่า authentication method
authmodulelist="authshadow"
เฉพาะ authshadow เท่านั้นที่ทำงานร่วมกับชื่อผู้ใช้ที่เป็น non-ASCII สำหรับ authentications ตัวอื่น ๆ เช่น PAM และ MYSQL จะส่งผลลัพธ์ออกมาเป็นตัวอักษรที่อ่านไม่ออกซึ่งจะทำให้การ authenticate ล้มเหลว
ต่อจากนั้นให้ Start
sudo /usr/local/sbin/authdaemond start
ตรวจสอบว่าโปรแกรมทำงานอยู่หรือไม่
sudo ps -ef |grep authdaemond
ควรจะแสดงค่าดังต่อไปนี้
26393 26392 0 10:26 ? 00:00:00 /usr/local/libexec/courier-authlib/authdaemond
26394 26393 0 10:26 ? 00:00:00 /usr/local/libexec/courier-authlib/authdaemond
26395 26393 0 10:26 ? 00:00:00 /usr/local/libexec/courier-authlib/authdaemond
26396 26393 0 10:26 ? 00:00:00 /usr/local/libexec/courier-authlib/authdaemond
26397 26393 0 10:26 ? 00:00:00 /usr/local/libexec/courier-authlib/authdaemond
26398 26393 0 10:26 ? 00:00:00 /usr/local/libexec/courier-authlib/authdaemond
ติดตั้ง courier imap ซึ่งจะรองรับทั้ง IMAP และ POP3
ดาวน์โหลดได้จาก http://sourceforge.net/projects/courier/files/imap
tar -jxvf courier-imap-4.16.2.tar.bz2
cd courier-imap-4.16.2
./configure
make
sudo make install
sudo make install-configure
cd /usr/lib/courier-imap/libexec
sudo ./pop3d.rc start
ตรวจสอบว่า imap ทำงานอยู่หรือไม่
sudo netstat -ntlp | grep 110
การเปิดใช้งาน SSL ด้วย self signed certificate
cd /usr/lib/courier-imap/etc
sudo vi pop3d.cnf
ปรับเปลี่ยนได้ตามต้องการจากนั้นให้ save และ quit
[ req_dn ]
C=US
ST=NY
L=New York
O=Courier Mail Server
OU=Automatically-generated POP3 SSL key
CN=localhost
emailAddress=postmaster@example.com
ต่อไปให้สร้าง certificates
cd ../share
sudo ./mkpop3dcert
ตอนนี้สามารถ run pop ด้วย ssl และ listen ที่พอร์ต 995
cd /usr/lib/courier-imap/libexec
sudo ./pop3d-ssl.rc start
sudo netstat -tulpn |grep 995
ขั้นตอนสุดท้ายเปิดการใช้งาน pop3 และ pop3s ที่ init
sudo ln -s /usr/lib/courier-imap/libexec/pop3d /etc/init.d/
sudo ln -s /usr/lib/courier-imap/libexec/pop3d-ssl /etc/init.d/
update-rc.d pop3d defaults
update-rc.d pop3d-ssl defaults
@TODO
*Run level for ubuntu*
ต่อด้วย Imap
sudo /usr/lib/courier-imap/libexec/imapd.rc start
sudo netstat -ntlp | grep 143
แก้ไข imapd
sudo vi /usr/lib/courier-imap/etc/imapd
เปลี่ยนเป็น yes
IMAPDSTART=yes
เปิดการใช้งาน imap SSL โดยใช้ self generated certificates
แก้ไขการตั้งค่าและปรับเปลี่ยนให้สอดคล้องกัน
sudo vi /usr/lib/courier-imap/etc/imapd.cnf
สร้าง certificate
sudo /usr/lib/courier-imap/share/mkimapdcert
ต่อไป start และ ตรวจสอบ imap-ssl
sudo /usr/lib/courier-imap/libexec/imapd-ssl.rc start
sudo netstat -ntlp |grep 993
ขั้นตอนสุดท้ายเปิดใช้งานที่ startup
@TODO
ตั้งค่า Postfix ให้ใช้ Maildir เป็นที่เก็บ Mail
sudo postconf -e 'home_mailbox = Maildir/'
sudo postfix reload
ปรับเปลี่ยน Skeleton และสร้างโฟลเดอร์สำหรับผู้ใช้งานที่เราสร้างขึ้นก่อนหน้านี้ จากในตัวอย่างเราใช้ชื่อผู้ใช้งาน test
sudo mkdir -p /etc/skel/Maildir/{cur,new,tmp}
sudo mkdir -p /home/test/Maildir/{cur,new,tmp}
sudo chown test.test /home/test/Maildir/{,cur,new,tmp}
sudo chmod 0700 /home/test/Maildir/{,cur,new,tmp}
ทดสอบ IMAP และ POP3
telnet localhost imap
ok login username password
telnet localhost pop3
User username
Pass password
ติดตั้ง Squirrel-mail
ติดตั้งและแก้ไข Squirrel mail
cd /var/www/html
wget http://interlab.ait.ac.th/eai-wiki/files/squirrelmail.zip
unzip squirrelmail.zip
แก้ไขไฟล์ config และเปลี่ยนค่า attachchment_dir และ data_dir โดยอย่าลืมสร้างโฟลเดอร์ เปลี่ยน ownership เป็น apache user ของคุณและอนุญาติให้สามารถทำการเขียนได้
vi /var/www/html/squirrelmail/config/config.php
การเข้าถึง squirrelmail
http://your-domain/squirrelmail/
ข้อผิดพลาด
สิ่งนี้เกิดขึ้นเมื่อทำการ login เข้าสู่ IMAP
error while loading shared libraries: libcourier-unicode.so.1: cannot open shared object file: No such file or directory
วิธีการแก้ปัญหา sudo vi /etc/ld.so.conf แล้วเพิ่ม
/usr/local/lib
จากนั้นให้ run sudo ldconfig
ลิงค์ที่เกี่ยวข้อง
Mail server จะไม่รับและส่ง email จากภายนอก
แหล่งที่มา
http://www.linuxfromscratch.org/blfs/view/cvs/server/postfix.html
http://www.postfix.org/SASL_README.html https://wiki.debian.org/PostfixAndSASL