Centos - การติดตั้งขั้นพื้นฐาน
การติดตั้ง 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 เปิด Firewall
- 12 ติดตั้ง Squirrel-mail
- 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
ใช้ Centos 7, 64 Bit
- ไม่ได้ทดสอบบน Centos 5 กับ Centos 6 ซึ่งอาจจะใช้งานไม่ได้
คุณสามารถติดตั้งด้วย root ไม่เช่นนั้นให้ระบุเป็น non privileged user
ข้อสังเกต ความต้องการและการตั้งค่าเริ่มต้น
- Centos 7 (64 bit) แบบ minimal installation
- Centos 7 มาพร้อมกับการติดตั้ง postfix 2.x
- คู่มือนี้สมมติว่าคุณติดตั้งด้วย root เว้นแต่จะระบุไว้เป็นอย่างอื่น
- DNS ของคุณต้องติดตั้งให้พร้อมก่อนการตั้งค่า
- hostname คือ ชื่อโดเมนของคุณ เช่น domain.com
- mail.hostname คือ ชื่อ Mail server ของคุณ เช่น mail.domain.com
แก้ไข hostname
ถ้าคุณใช้ international domain ให้คุณใช้ในรูปแบบ punycode
ตัวอย่าง: mail.วีคลาส.ไทย punycode equivalent ควรจะเป็น mail.xn--42c0eeo3bp.xn--o3cw4h
vi /etc/hostname
แก้ไขเป็นชื่อ 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 ซึ่งอาจจะมีการเปลี่ยนแปลงในภายหลัง
ติดตั้ง libraries และ tools ที่จำเป็น
yum groupinstall development tools
yum install cyrus-sasl cyrus-sasl-devel openssl openssl-devel libdb-devel.x86_64 libicu-devel telnet net-tools
ดาวน์โหลด 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 makefiles CCARGS='-DUSE_TLS -I/usr/include/openssl -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl ' AUXLIBS='-L/usr/lib64 -L/usr/lib64/openssl -L/usr/lib64/sasl2 -lssl -lcrypto -lsasl2'
make
หมายเหตุ: ถ้าคุณใช้ OS ที่เป็น 32Bit OS ให้แทนที่ /lib64 ด้วย /lib
ติดตั้ง Postfix
make upgrade
คุณสามารถนำไฟล์การตั้งค่าที่ไม่ได้ใช้ออกไป ซึ่งจะแสดงในส่วนสุดท้ายของการติดตั้ง
การตั้งค่า Postfix
สร้าง Mails Alias สำหรับ root หรือ postmaster เพื่อส่งไปยังผู้ใช้งานจริง (YourLogin)
หมายเหตุ: ขั้นตอนนี้เป็นทางเลือกเนื่องจาก Centos 7 ได้เติมไว้ให้แล้ว
vi /etc/aliases
copy และ paste ตัว code ด้านล่าง โดยเปลี่ยน YourLogin เป็น user ของคุณเองแล้วทำการ save และ quit
MAILER-DAEMON: postmaster
postmaster: root
root: YourLogin
ต่อจากนั้น
newaliases
แก้ไข mail.domain.tld, domain.tld, yourotherdomain.tld (yourotherdomain.tld ไม่จำเป็นต้องใส่ก็ได้)
postconf compatibility_level=2
postconf -e 'myhostname = mail.domain.tld'
postconf -e 'mydomain = domain.tld'
postconf -e 'myorigin = $mydomain'
postconf -e 'inet_interfaces = all'
postconf -e 'mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24'
postconf -e 'alias_database = hash:/etc/aliases'
postconf -e 'alias_maps = hash:/etc/aliases'
postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, yourotherdomain.tld'
postconf -e 'smtputf8_enable = yes'
ขั้นตอนสุดท้าย start Postfix ในครั้งแรก
service postfix restart
ลองใช้งานและส่ง 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
yum install cyrus-sasl-plain
แก้ไขไฟล์ /etc/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
ปรับปรุงการตั้งค่า Postfix
postconf -e 'smtpd_sasl_path = smtpd'
postconf -e 'smtpd_sasl_auth_enable = yes'
service saslauthd start
postfix reload
สร้าง user ที่เราสามารถทดสอบการ authentication ได้ แทนที่ AnyUserName ด้วย user ของคุณ
useradd -m AnyUserName -s /usr/sbin/nologin
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 ได้
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'smtpd_sasl_local_domain = $mydomain'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination'
postconf -e 'smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_sender_login_mismatch'
เปิดใช้งาน TLS
สร้าง certificates
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert \
-newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM \
-days 365 -x509
ตอบคำถามต่อไปนี้เมื่อได้รับแจ้ง
ปรับปรุงการตั้งค่า Postfix
postconf -e 'smtpd_enforce_tls = no'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
service postfix restart
สามารถทดสอบโดยการ 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
yum install libtool-ltdl-devel.x86_64
ติดตั้ง 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
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
make install
make install-configure
แก้ไขไฟล์ /usr/local/etc/authlib/authdaemonrc และเปลี่ยนค่า authentication method
authmodulelist="authshadow"
แก้ไขไฟล์ /etc/ld.so.conf.d/locallibs.conf และเพิ่ม
/usr/local/lib
นำค่าที่ปรับเปลี่ยนไปใช้งาน
ldconfig
ต่อจากนั้นให้ Start
/usr/local/sbin/authdaemond start
ตรวจสอบว่าโปรแกรมทำงานอยู่หรือไม่
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
หมายเหตุ: คุณจะต้องเปลี่ยนเป็น user ปกติที่ไม่ใช่ root (สร้าง user ใหม่ถ้าคุณยังไม่เคยสร้าง user ไว้)
ติดตั้ง 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
จากตรงนี้ คุณสามารถกลับไปใช้ root ถ้าคุณไม่ต้องการใช้คำสั่ง sudo
sudo make install
sudo make install-configure
cd /usr/lib/courier-imap/libexec
./pop3d.rc start
ตรวจสอบว่า imap ทำงานอยู่หรือไม่
netstat -ntlp | grep 110
การเปิดใช้งาน SSL ด้วย self signed certificate
cd /usr/lib/courier-imap/etc
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
./mkpop3dcert
ตอนนี้คุณสามารถ run pop ด้วย ssl และ listen ที่พอร์ต 995
cd /usr/lib/courier-imap/libexec
./pop3d-ssl.rc start
netstat -tulpn |grep 995
ขั้นตอนสุดท้ายเปิดการใช้งาน pop3 และ pop3s ที่ init
@TODO
ต่อด้วย Imap
/usr/lib/courier-imap/libexec/imapd.rc start
netstat -ntlp | grep 143
แก้ไขไฟล์ /usr/lib/courier-imap/etc/imapd เปลี่ยน IMAPDSTART=NO เป็น
IMAPDSTART=yes
เปิดการใช้งาน imap SSL โดยใช้ self generated certificates
แก้ไขไฟล์ /usr/lib/courier-imap/etc/imapd.cnf และแก้ไขค่าให้สอดคล้องกันจากนั้นให้สร้าง certs
/usr/lib/courier-imap/share/mkimapdcert
ต่อไป start และ ตรวจสอบ imap-ssl
/usr/lib/courier-imap/libexec/imapd-ssl.rc start
netstat -ntlp |grep 993
ขั้นตอนสุดท้ายเปิดใช้งานที่ startup
@TODO
ตั้งค่า Postfix ให้ใช้ Maildir เป็นที่เก็บ Mail
postconf -e 'home_mailbox = Maildir/'
postfix reload
ปรับเปลี่ยน Skeleton และสร้างโฟลเดอร์สำหรับผู้ใช้งานที่เราสร้างขึ้นก่อนหน้านี้ จากในตัวอย่างเราใช้ชื่อผู้ใช้งาน test
mkdir -p /etc/skel/Maildir/{cur,new,tmp}
mkdir -p /home/test/Maildir/{cur,new,tmp}
chown test.test /home/test/Maildir/{,cur,new,tmp}
chmod 0700 /home/test/Maildir/{,cur,new,tmp}
ทดสอบ IMAP และ POP3
telnet localhost imap
ok login username password
telnet localhost pop3
User username
Pass password
เปิด Firewall
firewall-cmd --zone=public --add-port=995/tcp --permanent
firewall-cmd --zone=public --add-port=110/tcp --permanent
firewall-cmd --zone=public --add-port=143/tcp --permanent
firewall-cmd --zone=public --add-port=25/tcp --permanent
firewall-cmd --reload
ติดตั้ง Squirrel-mail
Make sure you have apache and php installed.
ติดตั้งและแก้ไข Squirrel mail
cd to-your-public-html-folder
wget http://interlab.ait.ac.th/eai-wiki/files/squirrelmail.zip
unzip squirrelmail.zip
แก้ไขไฟล์ config และเปลี่ยนค่า attachchment_dir และ data_dir โดยอย่าลืมสร้างโฟลเดอร์ เปลี่ยน ownership เป็น apache user ของคุณและอนุญาติให้สามารถทำการเขียนได้
vi squirrelmail/config/config.php
การเข้าถึง squirrelmail
http://your-domain/squirrelmail/
ลิงค์ที่เกี่ยวข้อง
Mail server จะไม่รับและส่ง email จากภายนอก