การติดตั้ง postfix mail
โดย..วิภัทร ศรุติพรหม wipat.s@psu.ac.th
 
(เพิ่มเตามบางส่วนโดย อดิศร  ขาวสังข์)
ต้นแบบทดสอบด้วย linux fedora core 3


วิธีติดตั้ง postfix

  1. เลือกใช้ postfix แทน sendmail เนื่องจาก
     

    • สามารถทำความเข้าใจแฟ้ม configuration ได้ง่ายกว่า sendmail ที่อ่านไม่รู้เรื่อง แล้วต้อง compile ด้วย

    • ติดตั้งง่าย และใช้คำสั่งทำงานทดแทน sendmail ได้

    • เร็วกว่า sendmail

     

  2. ข้อกำหนดสภาพแวดล้อมของระบบ
     

    • ติดตั้งโปรแกรม apt-get แล้ว

    • ทดสอบกับลินุกซ์ fedora core 1

    • ติดตั้งบน host ชื่อ myhost.domain หมายเลข IP 192.168.7.19

    • ต้องเป็น host ที่มีชื่อปรากฎอยู่ใน DNS แล้วจึงจะรับอีเมล์ได้

    • หากยังไม่ใช้ apt-get สามารถติดตั้งด้วย rpm มีขั้นตอนใกล้เคียงกัน

       

  3. ตรวจสอบว่าเคยติดตั้ง sendmail แล้วหรือไม่ด้วยคำสั่ง rpm -qa | grep sendmail
    ถ้ามีโปรแกรม sendmail ติดตั้งอยู่ให้หยุดการทำงานของ sendmail ด้วยคำสั่ง
    /etc/init.d/sendmail stop

     

  4. ติดตั้ง postfix ด้วยคำสั่ง apt-get install postfix
    ......ได้ผล....
    Preparing...                ########################################### [100%]
       1:postfix                ########################################### [100%]
    Done.
    ถ้ามีโปรแกรม sendmail ในถอนออกด้วยคำสั่ง apt-get remove sendmail

     

  5. แฟ้มสำคัญสำหรับการปรับแต่งระบบคือ

    1. /etc/postfix/main.cf

    2. /etc/postfix/master.cf

    3. /etc/postfix/alias.cf

    4. /etc/postfix/virtual.cf

       

  6. คำสั่งต่างๆที่ควบคุมการทำงานของ 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


     
  7. สั่งให้ postfix ทำงานด้วยคำสั่ง /etc/init.d/postfix start ได้ผลตัวอย่าง
    Starting postfix:                                           [  OK  ]

    แล้วตรวจสอบสถานะการทำงานด้วยคำสั่ง /etc/init.d/postfix status ได้ผลตัวอย่าง
    master (pid 4537) is running...

     

  8. ทดสอบการส่งอีเมล์บน 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.

     

  9. ทดสอบส่งอีเมล์ด้วยคำสั่งตัวอย่าง
    echo "hello" | mail -s test2 your_email_address@yourhost.domain
    ตรวจสอบผลงานว่าได้รับอีเมล์ฉบับที่ส่งคือ
    ถึง your_email_address@yourhost.domain หัวข้อ test2 ข้อความว่า hello

     

  10. ถ้าไม่มีการแก้ไขข้อมูล 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

     

  11. หากต้องการให้รับ 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.
    แสดงว่าใช้ได้ ให้ลองทดสอบส่งอีเมล์มาจากเครื่องอื่นมาให้ root@myhost.domain
    ตรวจสอบว่าระบบได้รับอีเมล์ฉบับที่ส่ง
    ดูจากข้อความด้านท้ายของแฟ้ม /var/spool/mail/postfix
    จะมีข้อมูลของอีเมล์ฉบับที่ส่งมาให้
    การที่อีเมล์ไปอยู่ที่แฟ้ม /var/spool/mail/postfix
    เนื่องจาก default ของระบบกำหนดให้อีเมล์ของ root ถูกส่งไปที่ postfix แทน

     

  12. ถ้าต้องการดูข้อมูลที่ตั้งค่าไว้ในแฟ้ม /etc/main.cf ให้ใช้คำสั่งดังนี้
    postconf -n
    หากไม่ได้มีการแสดงค่าที่ต้องการไว้ สามารถดูค่า default ด้วยคำสั่ง
    postconf -d

     

  13. ระบบ mail server ที่แนะนำไว้ข้างบน เป็นการจัด mailbox แบบ unix ดั้งเดิม
    โดย mailbox ของแต่ละ user ถูกแยกเก็บเป็นแฟ้มข้อมูลแบบข้อความที่ /var/spool/mail
    เหมาะสมกับระบบที่มี user จำนวนไม่มากประมาณไม่เกิน 1,000 ราย

     

  14. หากต้องการอ่าน mailbox ด้วยโปรโตคอลแบบ imap หรือ pop3
    ต้องติดตั้งโปรแกรม imap server เพิ่มเติมเช่นโปรแกรม uw-imap หรือ dovecot หรือ cyrus-imapd เป็นต้น
    ขอแนะนำให้ใช้ dovecot เพราะสะดวกในการใช้ และ dovecot สามารถทดแทน uw-imap ได้
    fedora core 1 มีโปรแกรม uw-imap แต่ไม่มี dovecot ติดมา
    fedora core 2 มีโปรแกรม dovecot แต่ไม่มี uw-imap ติดมา
    ส่วนโปรแกรม cyrus-imapd ใช้งานยาก
    ควรใช้กับผู้ใช้ขนาดจำนวนหลักเกิน 1 หมื่นคน
    ซึ่งมีโปรแกรมติดมากับ fedora core 2 อยู่แล้ว

     

  15. การติดตั้ง imap แบบของ dovecot ให้ทำดังนี้
    apt-get install dovecot
    ... ได้ผล ....
    Preparing...                ########################################### [100%]
       1:dovecot                   ########################################### [100%]
    Done.
    แก้ไขแฟ้ม /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 แสดงว่าเกิดข้อผิดพลาดในการติดตั้ง
     

  16. การ switch ระหว่าง sendmail ให้ใช้คำสั่งดังนี้

    system-switch-mail  หรือ
    redhat-switch-mail

    แล้วเลือก postfix
     

  17. การคอนฟิกเพื่อจำกัดการ relay mail ให้ดูในหัวข้อ  "TRUST AND RELAY CONTROL" ของไฟล์คอนฟิก /etc/postfix/main.cf

    • โดยให้กำหนดพารามิเตอร์ของ mynetworks_style ว่ามีค่าเป็น class, subnet หรือ host

    • โดยค่า default จะเป็น subnet หมายถึงว่า postfix จะ "trust" SMTP client ที่มี IP อยู่ในเครือข่ายเดียวกับ subnetwork ที่เป็น local machine ซึ่งบน Linux จะทำงานได้ถูกต้องเฉพาะ interfaces ที่ถูกระบุด้วยคำสั่ง ifconfig

    • การกำหนดค่าเป็น class หมายถึง postfix จะ "trust" SMTP client ที่มี IP อยู่ใน class เดียวกันกับเครือข่ายที่เป็น Local machine

    • การกำหนดค่าเป็น host หมายถึง postfix จะ "trust" เฉพาะ local machine

       

  18. การติดตั้ง 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 แสดงว่าเกิดข้อผิดพลาดในการติดตั้ง

     

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

    • ทดสอบใช้งานได้เลย