Freesbsd - ฉบับเต็ม - อธิบายอย่างละเอียดทีละขั้นตอน
การติดตั้ง 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 แหล่งที่มา
สรุปสาระสำคัญของ 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
ใช้ Freebsd 10.2
ข้อสังเกต ความต้องการและการตั้งค่าเริ่มต้น
- คุณจะต้องไม่มีการติดตั้ง Postfix ซึ่งต้องไม่ต่ำกว่าเวอรชั่น 3.0
- ถ้าคุณได้ติดตั้งส่วนเสริมของ mail software หลังจากการติดตั้ง คุณต้องทดสอบให้แน่ใจว่า server ของคุณสามารถส่งกลับมาเป็น SMTPUTF8
- DNS ของคุณควรต้องติดตั้งให้พร้อมก่อนการตั้งค่า
- hostname คือ ชื่อโดเมนของคุณ เช่น domain.com
- mail.hostname คือ ชื่อ Mail server ของคุณ เช่น mail.domain.com
- ใช้ user root (sudo privileges) ทำงานกับ Server FreeBSD
- การติดตั้งนี้เป็นการติดตั้งผ่าน user root เว้นแต่จะระบุไว้เป็นอย่างอื่น
แก้ไข 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 ที่จำเป็นด้วยตัวเลือกพอร์ตอัตโนมัติ
cd /usr/ports/security/openssl
make && make install
cd /usr/ports/security/cyrus-sasl2
make && make install
cd /usr/ports/devel/icu
make && make install
Refresh your environment
สร้าง user และ directory ownership ที่จำเป็น
pw groupadd postfix -g 32
pw groupmod mail -m postfix
pw groupadd postdrop
pw useradd postfix -c "Postfix Daemon User" -d /var/spool/postfix -g postfix -s /bin/false -u 32
chown -v postfix:postfix /var/mail
ดาวน์โหลด Postfix 3.0.1 หรือเวอร์ชั่นที่ใหม่กว่า และ Compile ด้วย openssl และ sasl auth
tar -xzvf postfix-3.0.1.tar.gz
cd postfix-3.0.1
make CCARGS="-DUSE_TLS -I/usr/include/openssl/ -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl" AUXLIBS="-lssl -lcrypto -lsasl2" makefiles
make
ติดตั้ง Postfix
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
แก้ไขไฟล์ /etc/rc.conf
postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
แก้ไขไฟล์ /etc/periodic.conf
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
หยุดการทำงาน sendmail และเปิดการใช้งาน postfix
service sendmail stop
postfix start
การตั้งค่า Postfix
แก้ไข mail.domain.tld, domain.tld, yourotherdomain.tld (yourotherdomain.tld ไม่จำเป็นต้องใส่ก็ได้)
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'
postfix reload
@TODO
Enable Postfix as service and 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
ติดตั้ง saslauthd ด้วยตัวเลือกอัตโนมัติ
cd /usr/ports/security/cyrus-sasl2-saslauthd
make && make install
แก้ไขไฟล์ /etc/rc.conf
saslauthd_enable="YES"
สร้าง หรือ แก้ไขไฟล์ /usr/local/lib/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'
service saslauthd start
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("\000username\000yourpassword")'
แทนที่ dGVzdAB0ZXN0AHRlc3Q= ด้วย key ที่คุณสร้างขึ้น
telnet localhost 25
EHLO localhost
AUTH PLAIN dGVzdAB0ZXN0AHRlc3Q=
คุณควรจะได้รับข้อความว่า Authentication successful
Known Error: ถ้า base64 encode ของคุณมี == ด้านท้ายสองอัน มันอาจจะไม่ได้รับการยอมรับจาก terminal ดังนั้นคุณควรใช้ password ที่จะไม่ให้ผลลัพธ์ออกมาเป็น == สองอันด้านท้าย
จบการตั้งค่า 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 '
postfix reload
เปิดใช้งาน 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'
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 จากอินเทอร์เน็ต
การส่ง email ด้วย telnet
telnet localhost 25
EHLO localhost
MAIL FROM: <youruser@domain.tld> SMTPUTF8
RCPT FROM: <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
cd /usr/ports/security/courier-authlib
make && make install
cd /usr/ports/mail/courier-imap
make && make install
แก้ไขไฟล์ /usr/local/etc/authlib/authdaemonrc และเปลี่ยนค่า authentication method
authmodulelist="authpam"
แก้ไขไฟล์ /etc/rc.conf
courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_imapd_ssl_enable="YES"
courier_imap_pop3d_enable="YES"
courier_imap_pop3d_ssl_enable="YES"
ตั้งค่า Postfix ให้ใช้ Maildir เป็นที่เก็บ Mail
postconf -e 'home_mailbox = Maildir/'
service courier-authdaemond start
service courier-imap-imapd
service courier-imap-imapd-ssl
service courier-imap-pop3d
service courier-imap-pop3d-ssl
service courier-imap-imapd start
service courier-imap-imapd-ssl start
service courier-imap-pop3d start
service courier-imap-pop3d-ssl start
postfix reload
ปรับเปลี่ยน Skeleton และสร้างโฟลเดอร์สำหรับผู้ใช้งานที่เราสร้างขึ้นก่อนหน้านี้ จากในตัวอย่างเราใช้ชื่อผู้ใช้งาน test
mkdir -p /usr/share/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
ติดตั้ง Squirrel-mail
ติดตั้งและแก้ไข Squirrel mail
cd to-your-public-html-filder
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 จากภายนอก