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

จาก Wiki_EAI
ไปยังการนำทาง ไปยังการค้นหา


การติดตั้ง 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


ใช้ 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 จากภายนอก

แหล่งที่มา

http://postfix.org/