เป็นคำแนะนำติดตั้งโปรแกรม postfix เพื่อทำเป็น mail server
ต้นแบบทดสอบด้วย linux fedora core 4,3,2,1 ใช้งานภายในมหาวิทยาลัยสงขลานครินทร์
วิธีติดตั้ง postfix
- เลือกใช้ postfix แทน sendmail เนื่องจาก
- สามารถทำความเข้าใจแฟ้ม configuration ได้ง่ายกว่า sendmail ที่อ่านไม่รู้เรื่อง แล้วต้อง compile ด้วย
- ติดตั้งง่าย และใช้คำสั่งทำงานทดแทน sendmail ได้
- เร็วกว่า sendmail
- ข้อกำหนดสภาพแวดล้อมของระบบ
- ถ้าเป็น fedora core 1,2,3 ต้องติดตั้งโปรแกรม apt-get แล้ว
- ทดสอบกับลินุกซ์ fedora core 1
- ติดตั้งบน host ชื่อ myhost.domain หมายเลข IP 192.168.7.19
- ต้องเป็น host ที่มีชื่อปรากฎอยู่ใน DNS แล้วจึงจะรับอีเมล์ได้
- หากยังไม่ใช้ apt-get สามารถติดตั้งด้วย rpm มีขั้นตอนใกล้เคียงกัน
- ตรวจสอบว่าเคยติดตั้ง sendmail แล้วหรือไม่ด้วยคำสั่ง rpm -qa | grep sendmail
ถ้ามีโปรแกรม sendmail ติดตั้งอยู่ให้หยุดการทำงานของ sendmail ด้วยคำสั่ง
/etc/init.d/sendmail stop
- ติดตั้ง postfix ด้วยคำสั่ง
apt-get install postfix
ถ้ามีโปรแกรม sendmail ในถอนออก
ด้วยคำสั่ง apt-get remove sendmail
ในกรณีที่ใช้ yum ให้เปลี่ยนคำว่า apt-get เป็น yum ดังตัวอย่าง
yum install postfix
ถ้ามีโปรแกรม sendmail ในถอนออก
ด้วยคำสั่ง yum remove sendmail
- แฟ้มสำคัญสำหรับการปรับแต่งระบบคือ
- /etc/postfix/main.cf
- /etc/postfix/master.cf
- /etc/postfix/alias.cf
- /etc/postfix/virtual.cf
- คำสั่งต่างๆที่ควบคุมการทำงานของ postfix
- ทำงานด้วยเริ่มคำสั่ง /etc/init.d/postfix start
- ยกเลิกการทำงานด้วยคำสั่ง /etc/init.d/postfix stop
- ตรวจสอบสถานะการทำงานด้วยคำสั่ง /etc/init.d/postfix status
- สั่งให้อ่าน configuration หลังปรับแต่งแฟ้ม /etc/postfix/main.cf ด้วยคำสั่ง /etc/init.d/postfix reload
- สั่งให้เริ่มทำงานระบบซ้ำใหม่ด้วยคำสั่ง /etc/init.d/postfix restart
- สั่งให้ postfix ทำงานด้วยคำสั่ง /etc/init.d/postfix start ได้ผลตัวอย่าง
Starting postfix: [ OK ]
แล้วตรวจสอบสถานะการทำงานด้วยคำสั่ง /etc/init.d/postfix status ได้ผลตัวอย่าง
master (pid 4537) is running...
- แก้ไขให้ทำงานทุกครั้งที่บูทเครื่อง
chkconfig postfix on
- ทดสอบการส่งอีเมล์บน mail server ตัวนี้โดยป้อนคำสั่งคุยกับ mail server โดยตรงดังนี้
ป้อนคำสั่ง telnet localhost 25 ได้ผลตัวอย่าง
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 rd9.psu.ac.th ESMTP Postfix
ให้ป้อนคำว่า quit ได้ผลคืนกลับมาที่ prompt
quit
221 Bye
Connection closed by foreign host.
- ทดสอบส่งอีเมล์ด้วยคำสั่งตัวอย่าง
echo "hello" | mail -s test2 [email protected]
ตรวจสอบผลงานว่าได้รับอีเมล์ฉบับที่ส่งคือ
ถึง [email protected] หัวข้อ test2 ข้อความว่า hello
- ถ้าไม่มีการแก้ไขข้อมูล default จะส่งอีเมล์ได้แต่รับอีเมล์ไม่ได้ ลองดูได้ดังนี้
ทดสอบการส่งอีเมล์บน mail server ตัวนี้โดยป้อนคำสั่งคุยกับ mail server โดยตรงดังนี้
ป้อนคำสั่ง telnet myhost.domain 25 ได้ผลตัวอย่าง
Trying 192.168.7.19...
telnet: connect to address 192.168.7.19: Connection refused
ไม่ต้องตกใจ เพราะไม่ได้ตั้งค่าไว้ให้รับ mail
- หากต้องการให้รับ mail ได้ ต้องเป็น host ที่มีชื่อปรากฎอยู่ใน DNS เท่านั้น
แล้วให้แก้ไขแฟ้ม /etc/postfix/main.cf ที่บรรทัดข้อความว่า
inet_interfaces = localhost เปลี่ยนให้เป็นว่า inet_interfaces = all
แล้วสั่งให้ postfix ทำงานระบบใหม่ด้วยคำสั่ง /etc/init.d/postfix restart
ทดสอบการส่งอีเมล์บน mail server ตัวนี้โดยป้อนคำสั่งคุยกับ mail server โดยตรงดังนี้
ป้อนคำสั่ง telnet myhost.domain 25 ได้ผลตัวอย่าง
Connected to myhost.domain.
Escape character is '^]'.
220 myhost.domain ESMTP Postfix
ให้ป้อนคำว่า quit ได้ผลคืนกลับมาที่ prompt
quit
221 Bye
Connection closed by foreign host.
แสดงว่าใช้ได้ ให้ลองทดสอบส่งอีเมล์มาจากเครื่องอื่นมาให้ [email protected]
ตรวจสอบว่าระบบได้รับอีเมล์ฉบับที่ส่ง
ดูจากข้อความด้านท้ายของแฟ้ม /var/spool/mail/postfix
จะมีข้อมูลของอีเมล์ฉบับที่ส่งมาให้
การที่อีเมล์ไปอยู่ที่แฟ้ม /var/spool/mail/postfix
เนื่องจาก default ของระบบกำหนดให้อีเมล์ของ root ถูกส่งไปที่ postfix แทน
- ถ้าต้องการดูข้อมูลที่ตั้งค่าไว้ในแฟ้ม /etc/main.cf ให้ใช้คำสั่งดังนี้
postconf -n
หากไม่ได้มีการแสดงค่าที่ต้องการไว้ สามารถดูค่า default ด้วยคำสั่ง
postconf -d
- หากต้องการให้ relay mail ที่ต้องการส่งไปยัง smtp server/gateway อื่น
ให้แก้ไขแฟ้ม /etc/postfix/main.cf ที่ตัวแปร relayhost
ตัวอย่างเช่น relayhost = gateway.my.domain
- การสร้างอีเมล์แบบ virtual host โดยอีเมล์นั้นไม่จำเป็นต้องมี account อยู่บนเครื่องนั้น
ตัวอย่างคือต้องการอีเมล์ทุกฉบับที่ส่งถึงชื่อ [email protected]
ให้ถูกส่งต่อไปยังอีเมล์ปลายทางชื่อ [email protected]
โดยใช้กับ postfix mail server เดิมที่มีอยู่แล้วคือ yourhost.domain
ให้ทำดังนี้คือ
- แก้ไขให้ DNS มีข้อมูล myvirtual.domain ให้มี A record ที่มี ip address เดียวกับ yourhost.domain
- แก้ไขแฟ้ม /etc/postfix/main.cf ให้มีบรรทัดว่า
virtual_alias_domains = myvirtual.domain
virtual_alias_maps = hash:/etc/postfix/virtual
แล้วสั่งให้ postfix ทำการ reload ข้อมูลใหม่
/etc/init.d/postfix reload
- แก้ไขแฟ้ม /etc/postfix/virtual ให้ข้อมูลการ forward อีเมล์ตามต้องการ ตัวอย่างนี้ให้มีบรรทัดว่า
[email protected] [email protected]
แล้วสั่งให้ postfix ปรับปรุงฐานข้อมูลใหม่
/usr/sbin/postmap /etc/postfix/virtual
- ระบบ mail server ที่แนะนำไว้ข้างบน เป็นการจัด mailbox แบบ unix ดั้งเดิม
โดย mailbox ของแต่ละ user ถูกแยกเก็บเป็นแฟ้มข้อมูลแบบข้อความที่ /var/spool/mail
เหมาะสมกับระบบที่มี user จำนวนไม่มากประมาณไม่เกิน 1,000 ราย
- หากต้องการอ่าน mailbox ด้วยโปรโตคอลแบบ imap หรือ pop3
ต้องติดตั้งโปรแกรม imap server เพิ่มเติมเช่นโปรแกรม uw-imap หรือ dovecot หรือ cyrus-imapd เป็นต้น
ขอแนะนำให้ใช้ dovecot เพราะสะดวกในการใช้ และ dovecot สามารถทดแทน uw-imap ได้
fedora core 1 มีโปรแกรม uw-imap แต่ไม่มี dovecot ติดมา
fedora core 2,3,4 มีโปรแกรม dovecot แต่ไม่มี uw-imap ติดมา
ส่วนโปรแกรม cyrus-imapd ใช้งานยาก
ควรใช้กับผู้ใช้ขนาดจำนวนหลักเกิน 1 หมื่นคน
ซึ่งมีโปรแกรมติดมากับ fedora core 2 อยู่แล้ว
- การติดตั้ง imap แบบของ dovecot ให้ทำดังนี้
apt-get install dovecot
ในกรณีที่ใช้ yum ให้เปลี่ยนคำว่า apt-get เป็น yum ดังตัวอย่าง
yum install dovecot
แก้ไขให้ทำงานทุกครั้งที่บูทเครื่อง
chkconfig dovecot on
แก้ไขแฟ้ม /etc/dovecot.conf เพื่อเปิดการทำงานของ imap และ pop3
ที่บรรทัดข้อความจากเดิม protocol = imap impas ให้เป็น
protocol = imap imaps pop3 pop3s
สั่งให้ dovecot ทำงานใหม่ด้วยคำสั่ง
/etc/init.d/dovecot reload
ทดสอบการทำงานด้วยคำสั่ง telnet 192.168.7.19 imap ถ้าได้ผลทำนองนี้แสดงว่าใช้งานได้
Trying 192.168.7.19...
Connected to 192.168.7.19.
Escape character is '^]'.
* OK dovecot ready.
ถ้าไม่มีบรรทัดข้อความว่า OK แสดงว่าเกิดข้อผิดพลาดในการติดตั้ง
- การติดตั้ง imap แบบของ uw-imap ให้ทำดังนี้
apt-get install imap
... ได้ผล ....
Preparing... ########################################### [100%]
1:imap ########################################### [100%]
Done.
แก้ไขแฟ้ม /etc/xinetd.d/imap เพื่อเปิดการทำงานของ imap
ที่บรรทัดข้อความจากเดิม disable = yes ให้เป็น disable = no
สั่งให้ xinetd ทำงานใหม่ด้วยคำสั่ง
/etc/init.d/xinetd reload
ทดสอบการทำงานด้วยคำสั่ง telnet 192.168.7.19 imap ถ้าได้ผลทำนองนี้แสดงว่าใช้งานได้
Trying 192.168.7.19...
Connected to 192.168.7.19.
Escape character is '^]'.
* OK [CAPABILITY IMAP4REV1 LOGIN-REFERRALS STARTTLS AUTH=LOGIN] 192.168.7.19 IMAP4rev1 2003.338rh at Sun, 11 Jul 2004 20:50:42 +0700 (ICT)
ถ้าไม่มีบรรทัดข้อความว่า OK แสดงว่าเกิดข้อผิดพลาดในการติดตั้ง
- การติดตั้ง imap แบบของ cyrus-imap ให้ทำดังนี้
apt-get install cyrus-imapd
... ได้ผล ....
1:cyrus-imapd ########################################### [100%]
Done
ให้ปรับปรุงระบบดังต่อไปนี้
- แก้ไขแฟ้ม /etc/sysconfig/saslauthd ให้เลือกใช้ PAM ที่บรรทัดข้อความ
MECH=pam
- กำหนดให้ saslauthd ทำงานทุกครั้งที่บูทเครื่อง ด้วยคำสั่ง
chkconfig saslauthd on
- แก้ไขแฟ้ม /etc/postfix/main.cf ให้เลือกใช้ mailbox แบบ lmtp (cyrus) ทีบรรทัดข้อความ
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
- แก้ไขแฟ้ม /etc/imap.conf ให้เพิ่มข้อมูลดังนี้
munge8bit: no
autocreatequota: 10000
lmtp_overquota_perm_failure: yes
createonpost: no
altnamespace: yes
unixhierarchysep: yes
- กำหนดให้ cyrus-imapd ทำงานทุกครั้งที่บูทเครื่อง ด้วยคำสั่ง
chkconfig cyrus-imapd on
- สั่งให้ระบบเริ่มทำงานดังนี้
service saslauthd start
service cyrus-imapd start
service postfix restart
- ทดสอบใช้งานได้เลย
By... วิภัทร ศรุติพรหม [email protected]