ฉบับเต็ม - อธิบายอย่างละเอียดทีละขั้นตอน

From Wiki_EAI
Jump to navigation Jump to search

การติดตั้ง Postfix กับ SMTPUTF8 ที่เปิดใช้งาน, Cyrus SASL และ OpenSSL

สรุปสาระสำคัญของ 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://postfix.org/

https://kiranjith.wordpress.com/2010/03/15/12-postfix-installing-and-configuring-courier-auth-libs-courier-imap-and-pop3/

http://www.linuxfromscratch.org/blfs/view/cvs/server/postfix.html

http://www.postfix.org/SASL_README.html https://wiki.debian.org/PostfixAndSASL