การติดตั้งเมล์เซอร์ฟเวอร์ PostFix บน GNU Linux Ubuntu 2549

จาก Research 2549, สารานุกรมฟรี

โดย พ.ท.ปรัชญา เฉลิมวัฒน์, Ph.D. (บทความนี้เรียบเรียงจากเนื้อหาหลักของ Ivar Abrahamsen,
"How to set up a mail server on a GNU / Linux system: Step by step guide to install Postfix", http://flurdy.com/docs/postfix/)

<<Back

สารบัญ

ซอฟท์แวร์ที่ใช้

ระบบปฏิบัติการ OS: Ubuntu Linux

  • URL: http://www.ubuntu.com
  • ระบบปฏิบัติการที่เลือกใช้เป็น Ubuntu 6.06 ซึ่งพัฒนามาจากฐานการพัฒนาของ Debian Linux
  • ทำไม่ต้องเลือก Ubuntu? มีการติดตั้งที่ง่าย ด้วยคำสั่ง apt-get และมีความปลอดภัยในระบบการทำงานเป็นที่เชื่อถือได้
  • ถ้าต้องการคำตอบที่มีหลักฐานยืนยันลองไปดูข้อมูลสถิติที่ http://www.distrowatch.com
  • ซึ่งจะเป็นหลักฐานยืนยันว่ามีผู้ใช้งานเป็นอันดับหนึ่ง ณ เวลาที่เขียนบทความนี้อยู่

โปรแกรมรับ-ส่งเมล์ MTA: Postfix

  • URL: http://www.postfix.org
  • MTA = Mail Transport Agent
  • ใช้งานง่าย, ฟรี, และมีความคล่องตัวสูง
  • สามารถควบคุมให้ทำงานได้ตามที่ต้องการ และมีความปลอดภัยสูงกว่า sendmail

โปรแกรม Pop/IMAP: Courier IMAP

  • URL: http://www.courier-mta.org/imap/
  • ฟรี และใช้งานง่าย เป็นโปรแกรมสำหรับติดต่อกับเมล์เซอร์ฟเวอร์ด้วยโปรโตคอล POP/IMAP

โปรแกรมฐานข้อมูล: MySQL

  • URL: http://www.mysql.com
  • ฟรี และดี คงไม่มีใครเทียบเท่ากับเซอร์ฟเวอร์ฐานข้อมูล MySQL อันลือชื่อ
  • สามารถรองรับการทำงานได้เช่นเดียวกับโปรแกรมฐานข้อมูลขนาดใหญ่ได้ดี

ตรวจสอบเนื้อความของเมล์: Amavisd-new

โปรแกรมต่อต้านสแปม Anti-Spam: SpamAssassin

โปรแกรมต่อต้านไวรัส: ClamAV

  • URL: http://www.clamav.net
  • โปรแกรมต่อต้านไวรัส ฟรี และมีการปรับปรุงข้อมูลไวรัสอยู่ตลอดเวลา

การตรวจสอบสิทธิ์การเข้าใช้งาน Authentication: Cyrus SASL

  • URL: http://www.imc.org/ietf-sasl/
  • ระบบรักษาความปลอดภัยที่มีการเข้ารหัสการเข้าใช้เมล์ผ่าน SMTP

ต่อต้านสแปม: PostGrey

  • URL: http://isg.ee.ethz.ch/tools/postgrey/
  • Postgrey เป็นโปรแกรมสคริปต์ขนาดเล็กที่สามารถหยุดการทำงานของสแปมได้ถึง 99%
  • สคริปต์นี้เพียงแค่บอกเมล์เซอร์ฟเวอร์ผู้ส่งเมล์ว่าให้ส่งอีกสักครู่ให้ส่งใหม่อีกครั้ง
  • โดยทั่วไปแล้ว spammer จะไม่ทำการส่งอีกแต่เมล์เซอร์ฟเวอร์ทั่วไปจะสามารถส่งได้อีก
  • แล้ว Postgrey ก็จะยอมให้เมล์ผ่านไปได้ถ้าเป็นการส่งซ้ำอีก

โปรแกรมเข้ารหัส Encryption: TLS

  • URL: http://www.ietf.org/html.charters/tls-charter.html
  • โปรแกรมเข้ารหัส TLS ทำการเข้ารหัส SMTP ซึ่งเป็นการทำงานคนละส่วนกับการเข้ารหัสของผู้ใช้ทั่วไป

เว็บอินเทอร์เฟส WebMail

SquirrelMail

  • URL: http://www.squirrelmail.org
  • โปรแกรมเว็บฟร็อนท์เอนด์ที่ใช้อ่านเมล์จากเมล์เซอร์เวอร์ผ่านเว็บ
  • ติดตั้งใช้ง่าย และทำงานด้วย PHP

การติดตั้ง

การติดตั้ง Base ของ Ubuntu

  • เมื่อติดตั้ง Ubuntu ให้ติดตั้ง base system ด้วยการกด Enter สำหรับค่า default ให้ทำงานเป็นแบบ desktop
  • นอกจากนั้นยังสามารถติดตั้งเป็น server base ซึ่งจะติดตั้งเฉพาะโปรแกรมที่จำเป็นเท่านั้นสำหรับเซอร์ฟเวอร์
  • การติดตั้งแบบ server base จะมีประโยชน์ถ้าเราต้องการ remote login ไปแก้ไขเครื่องเซอร์ฟเวอร์

ตรวจสอบ Repositories

  • เมื่อติดตั้ง base system ให้ทำการตรวจสอบแพ็คเกจ repositories
  • คือข้อมูลที่บอกให้ระบบทราบว่าโปรแกรมใหม่ที่เหมาะสมอยู่ที่ใด
  • ข้อมูลของแหล่ง repositories จะอยู่ที่ /etc/apt/sources.list ซึ่งสามารถระบุว่าจะอยู่ในซีดี
  • หรือจะดาวน์โหลดโดยตรงจากเว็บของ Ubuntu ในที่นี้แนะนำให้ไม่ใช้ CD เพื่อที่จะให้ใช้ซอฟท์แวร์ใหม่
#deb cdrom:[Ubuntu 6.06 _Dapper Drake_ - Release i386 (20060601)]/ dapper main restricted
deb http://gb.archive.ubuntu.com/ubuntu dapper main restricted multiverse universe
deb-src http://gb.archive.ubuntu.com/ubuntu dapper main restricted multiverse universe
deb http://gb.archive.ubuntu.com/ubuntu dapper-updates main restricted multiverse universe
deb-src http://gb.archive.ubuntu.com/ubuntu dapper-updates main restricted multiverse universe
deb http://gb.archive.ubuntu.com/ubuntu dapper-security main restricted multiverse universe
deb-src http://gb.archive.ubuntu.com/ubuntu dapper-security main restricted multiverse universe
deb http://gb.archive.ubuntu.com/ubuntu dapper-backports main restricted multiverse universe
deb-src http://gb.archive.ubuntu.com/ubuntu dapper-backports main restricted multiverse universe ## EXTRAS
#deb http://ubuntu-backports.mirrormax.net/ dapper-extras main universe multiverse restricted contrib ## MARILLAT
#deb ftp://ftp.nerim.net/debian-marillat unstable main

ตรวจสอบแพ็คเกจที่จะติดตั้ง

เพื่อที่จะให้เมล์เซอร์ฟเวอร์ทำงานได้อย่างดีและมีความปลอดภัยสูง แนะนำให้ติดตั้งแพ็คเกจที่จะกล่าวต่อไปนี้ ซึ่งซอฟท์แวร์บางตัวจะถูกใช้โดยซอฟท์แวร์ตัวอื่นอีกหลาย ๆ ตัว

  • เกี่ยวกับระบบปฏิบัติการ: OS
    • shorewall - ควรติดตั้งถึงแม้ว่าจะไม่จำเป็น ทั้งนี้เพื่อความปลอดภัยของระบบ
    • openssh-client - ควรติดตั้งเพื่อให้สามารถ remote login เข้าไปแก้ไข/ตรวจสอบระบบได้
    • openssh-server
  • MySQL - ต้องติดตั้ง MySQL 4 ซึ่งโปรแกรมอื่นมีความต้องการใช้
    • mysql-common
    • mysql-client
    • mysql-server
    • libmysqlclient12
  • TLS
    • openssl
  • SASL
    • libsasl2
    • libsasl2-modules
    • libsasl2-modules-sql
    • libauthen-sasl-cyrus-perl
    • libauthen-sasl-perl
    • libgsasl7
  • Postfix
    • postfix
    • postfix-tls - ถ้าไม่ได้ใช้ Ubuntu Breezy ให้ติดตั้งแพ็คเกจนี้เข้าไปด้วย
    • postfix-mysql
  • Courier-IMAP - ถ้าต้องการให้มีเซอร์วิส POP ให้ติดตั้งเพิ่มเติมได้
    • courier-base
    • courier-authdaemon
    • courier-authmysql
    • courier-imap
    • courier-imap-ssl
    • courier-ssl
  • amavis-new
    • amavisd-new
  • Spam Assassin
    • spamassassin
    • spamc
  • ClamAV
    • clamav-base
    • libclamav1
    • clamav-daemon
    • clamav-freshclam
  • Postgrey - มีโปรแกรมอื่นที่สามรถใช้แทนได้คือ postfix-gld ในที่ผู้เขียนเลือกใช้ postgrey
    • postgrey
  • เว็บอินเทอร์เฟสสำหรับอ่านเมล์และเว็บเซอร์ฟเวอร์
    • SquirrelMail
    • squirrelmail
    • squirrelmail-locales
    • apache2
    • libapache2-mod-php4
    • php4-mysql
    • php4-pear
    • php4-cli
    • phpMyAdmin
    • phpmyadmin

เริ่มติดตั้งซอฟท์แวร์

  • ในการติดตั้งไม่ควรติดตั้งพร้อมกันทั้งหมด แต่แนะนำให้ติดตั้งเป็นกลุ่ม ๆ หรือติดตั้งซอฟท์แวร์แพ็คเกจทีละอันที่กล่าวมาข้างต้น
  • ถ้าต้องการข้อมูลเพิ่มเติมสำหรับแต่ละแพ็คเกจให้ใช้คำสั่งในการค้นหา ด้วยการรันคำสั่งการติดตั้งเป็น root
  • ให้เข้าเป็น root ด้วยการใช้คำสั่ง sudo -i
sudo -i 
  • ค้นหาข้อมูลของแพ็คเกจที่ต้องการ เช่นกรณีของแพ็คเกจ postfix ให้คำสั่ง apt-cache search
apt-cache search postfix
  • หรือหากต้องการใช้คำสั่ง grep ในการหาแพ็คเกจที่ติดตั้งไปแล้ว ให้ใช้คำสั่ง dpkg --list
dpkg --list | grep postfix
  • การติดตั้งแพ็คเกจบางอันอาจมีการสอบถามข้อมูลการติดตั้ง เช่น PostFix จะทำการถามประเภทของเซอร์เวอร์ที่จะสร้าง
  • ซึ่งเป็นการใส่ข้อมูลเบื้องต้นซึ่งเราจะเข้าไปแก้ไขค่าของ config ต่อไปได้อีกในภายหลัง
  • โปรแกรม clamav อาจถามว่าจะสร้างไดเร็กทอรี่หรือไม่
  • โปรแกรม Courier จะถามว่าจะติดตั้งเว็บ admin หรือไม่หรือการติดตั้ง TLS เป็นต้น
  • หลาย ๆ แพ็คเกจจะต้องติดตั้งแพ็คเกจอื่น ๆ เพ่ิมเติมเพื่อโปรแกรมทำงานได้อย่างสมบูรณ์
  • ติดตั้งแพ็คเกจหลาย ๆ แพ็คเกจพร้อม ๆ กันด้วยคำสั่ง apt-get install และต่อท้ายด้วยแพ็คเกจ หลาย ๆ แพ็คเกจ
apt-get install package-name, another-package-name, etc
  • ตัวอย่างการติดตั้งแพ็คเกจของ postfix ให้ใช้คำสั่ง apt-get install ดังต่อไปนี้
apt-get install  postfix,  postfix-tls,  postfix-mysql
  • ให้ทำการติดตั้งซอฟท์แวร์แพ็คเกจที่กล่าวข้างต้นให้ครบก่อนที่จะปฏิบัติในขั้นตอนต่อไป

การปรับแต่งค่า

  • ในขั้นตอนนี้สมมติว่าได้ทำการติดตั้งซอฟท์แวร์ที่จำเป็นจนครบเรียบร้อยแล้ว
  • ขั้นตอนต่อไปเป็นการปรับแต่งค่าสำหรับซอฟท์แวร์ต่าง ๆ ที่เกี่ยวข้อง

ระบบปฏิบัติการ OS (Ubuntu)

การปรับแต่งค่าที่สำคัญสำหรับเมล์เซอร์เวอร์คือการติตตั้งไฟร์วอลล์ (ในที่นี้ Shorewall) สำหรับการใช้งาน ค่าการปรับแต่งจะอยู่ที่ไฟล์ /etc/shorewall ซึ่งเราจะทำการปรับแต่งค่าต่าง ๆ เช่น interfaces, hosts zones, policy และ rules

  • การปรับแต่งค่า basic zones file โดยทั่วไป
#zone display comment loc Local Local network
net Net Tinternet
  • การปรับแต่งค่า interface file ตามปกติ
net eth0 detect
  • การปรับแต่งค่าของไฟล์ hosts
loc eth0:192.168.0.0/24
  • การปรับแต่างค่าของไฟล์ policy
fw loc ACCEPT
fw net ACCEPT
loc all DROP info
net all DROP info
all all REJECT info
  • การปรับแต่งค่าโดยทั่วไปของไฟล์ rules สำหรับเมล์เซอร์ฟเวอร์
AllowPing loc fw
AllowSSH loc fw
#AllowSMTP loc fw
#ACCEPT loc fw tcp 465,587 -
#AllowIMAP loc fw #AllowPing  net fw
#AllowSSH loc fw
#AllowSMTP net fw
#ACCEPT net fw tcp 465,587 -
#AllowIMAP net fw
  • เพื่อความปลอดภัยการเข้า SMTP จากทุก ๆ ที่จะถูกตัดทิ้งไปด้วยการใส่ comment (#) ไว้ข้างหน้าคำสั่ง
  • นอกจากนั้นยังยกเลิก IMAP และ TLS SMTP ไว้ชั่วคราวก่อน และอาจจำเป็นต้องเปิด SSH ภายใน
  • จากนั้นให้แก้ไขไฟล์ /etc/default/shorewall
startup=1 
  • และเปิดเซอร์วิสให้ไฟร์วอลล์รันขึ้นมา
 /etc/init.d/shorewall restart

โปรแกรมรับ-ส่งเมล์ MTA (Postfix)

  • โปรแกรม Postfix ใช้พื้นที่ในไดเร็กทอรี่ /etc/postfix
  • ค่าโดยปริยายของโพสท์ฟิกส์จะมีความปลอดภัยค่อนข้างสูง โดยอาศัย chroot jail
  • อย่างไรก็ตาม ในการติดตั้งโพสท์ฟิกส์นั้น chroot อาจทำให้เกิดปัญหาขณะติดตั้ง
  • หากโปรแกรมไม่ทำงานให้ตรวจสอบดูใน master.cf จะมีคำสั่งที่เกี่ยวข้องกับโมดูลและข้อจำกัดของ jail
  • ในไฟล์ main.cf เป็นการกำหนดว่าโพสท์ฟิกส์จะทำงานอย่างไร ซึ่งแต่ละรุ่นของโพสท์ฟิกส์มีการติดตั้งต่างกันไป
  • โดยทั่วไปแล้วค่าในการติดตั้งจะคล้าย ๆ กันมาก

การแก้ไขไฟล์ main.cf

  • ขั้นต้นให้ตั้งค่า "ชื่อเครื่อง" ซึ่งต้องสอดคล้องกับชื่อที่ตั้งใน DNS MX record ให้แก้ไขไฟล์ main.cf
 myhostname = mail.crma.ac.th

่จากนั้นให้ตัดสินใจว่าจะใส่ข้อความในการต้อนรับอย่างไร เพื่อให้มีข้อมูลที่เป็นประโยชน์ต่อผู้ใช้เมล์ (ไม่ใช่แฮ็คเกอร์)

 smtpd_banner = $myhostname ESMTP $mail_name

จากนั้นต้องให้เลือกว่าจะส่งเมล์ออกทั้งหมดไปยังเซอร์ฟเวอร์ SMTP ตัวอื่น หรือจะส่งเอง ซึ่งบางครั้งหากเรามีเซอร์เวอร์ ของไอเอสพีอยู่แล้วก็สามารถส่งต่อไปได้เลย หากเลือกส่งเองก็จะไม่ขึ้นอยู่กับเมล์เซอร์เวอร์อื่น อย่างไรก็ตาม อาจมีความเสี่ยงต่อการเปิดเผยสู่สาธารณะ และอาจถูกบล็อกจาก spam blocker โดยไม่ได้ตั้งใจ หลาย ๆ เมล์เซอร์ฟเวอร์ จะปฏิเสธการใช้ dynamic DNS ให้เลือกการเซ็ทค่าที่เหมาะสม

 # leave blank to do it yourself 
 relayhost = 
 # or put it an accessible smtp server
 relayhost = smtp.yourisp.com
  • ต่อไปให้เลือกค่ารายละเอียดของเน็ตเวอร์ค โดยทั่วไปแล้วจะเปิดให้เข้าถึงได้จากทุกเครื่องแต่จะไว้ใจเฉพาะเครื่องนี้เท่านั้น
 inet_interfaces = all
 mynetworks_style = host
  • จากนั้นสามารถทำการ masquerade แอดเดรสขาออก (outgoing addresses) บางอัน
  • เช่น ชื่อเครื่องของเราคือ "mail.crma.ac.th" เราคงไม่อยากให้เมล์ที่ออกไปเป็น user@mail.crma.ac.th
  • ตรงกันข้าม เราต้องการให้ออกไปเป็น user@crma.ac.th
  • เรายังสามารถเลือกกำหนดว่าจะ masquerade โดเมนใด หรือ ผู้ใช้ที่ไม่ต้องการให้ทำ masquerade
  • หากใช้ dynamic DNS ก็คือชื่อเครื่องก็คือชื่อ subdomain
 masquerade_domains = sub.domain.com !sub.dyndomain.com
 masquerade_exceptions = root

เนื่องจากเราจะใช้เวอร์ช่วลโดเมน เราจะปล่อยให้ฟีลด์นี้ว่างไว้

 local_recipient_maps =
 mydestination =

การตั้งค่าตัวเลขต่าง ๆ ใน main.cf

# ช่วงเวลาในการเตือนผู้่ส่งหากเมล์ไม่สามารถส่งได้ 
delay_warning_time = 4h 
# เป็น error แบบถาวร หรือแบบชั่วคราว
unknown_local_recipient_reject_code = 450
# เวลาในการเก็บข้อความเมล์ในเมล์คิว ก่อนที่จะตอบกลับไปว่าไม่สำเร็จ
# บางที่อาจใช้ 3 วัน, ผู้เขียนใช้ 16 เนื่องจากทำการสำรองข้อมูลให้ผู้ใช้ด้วย
# ใครที่จะขึ้นไว้ว่า on holiday เมื่อปิดเครื่องเมล์เซอร์ฟเวอร์
maximal_queue_lifetime = 7d
# ค่าต่ำสุดและสูงสุดเป็นวินาทีระหว่างการรอที่จะส่งใหม่ถ้าการส่งไม่สำเร็จ
minimal_backoff_time = 1000s
maximal_backoff_time = 8000s
# เวลาในการรอเมื่อเซอร์ฟเวอร์เชื่อมต่อก่อนที่จะรับข้อมูลทั้งหมด
smtp_helo_timeout = 60s
# จำนวนแอดเดรสที่จะใช้ได้ในหนึ่งข้อความ
# การหนดค่านี้มีผลต่อ mass spammers แต่ก็อาจทำให้จำกัดการใช้เมล์ภายในได้
smtpd_recipient_limit = 16
# จำนวนครั้งของ error ก่อนที่จะหยุดส่งเมล์
smtpd_soft_error_limit = 3
# จำนวนครั้งของ error ก่อนที่จะปิดกั้นการรับเมล์นั้น
smtpd_hard_error_limit = 12

การกำหนดสิทธิและข้อห้ามต่าง ๆ

  • จากนั้นเราสามารถกำหนดข้อห้ามหรือสิทธิต่าง ๆ ได้
  • ควรใช้ความระมัดระวังในการแก้ไข ให้ค่าการเซ็ทอยู่ในบรรทัดเดียวเท่านั้น
# Requirements for the HELO statement
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname,  
                                  reject_invalid_hostname, permit
# Requirements for the sender details
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, 
                                     reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Requirements for the connecting server
smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client relays.ordb.org,
                                   reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org
# Requirement for the recipient address
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient, 
                                       reject_unknown_recipient_domain, reject_unauth_destination, permit

ในกรณีการติดตั้งนี้ ผู้เขียนใช้เซอร์ฟเวอร์ spam detection ซึ่งเรียกว่า RBL: Real-time blackhome list เซอร์ฟเวอร์เหล่านี้จะตรวจว่าเซอร์ฟเวอร์ที่เชื่อมต่อนี้เป็นเครื่องที่เปิด relay ที่ถูกใช้โดย spammer หรือไม่ โปรแกรม SpamAssassin ใช้การตรวจสอบแบบ RBL ในการให้คะแนน ้การกำหนดข้อห้ามต่าง ๆ เพิ่มเติม

# require proper helo at connections
smtpd_helo_required = yes
# waste spammers time before rejecting them
smtpd_delay_reject = yes
disable_vrfy_command = yes

จากนั้นเราต้องตั้งค่าสำหรับ maps และ lookups สำหรับเวอร์ช่วลโดเมน

# not sure of the difference of the next two
# but they are needed for local aliasing
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# this specifies where the virtual mailbox folders will be located
virtual_mailbox_base = /var/spool/mail/virtual
# this is for the mailbox location for each user
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# and their user id
virtual_uid_maps = mysql:/etc/postfix/mysql_uid.cf
# and group id
virtual_gid_maps = mysql:/etc/postfix/mysql_gid.cf
# and this is for aliases
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# and this is for domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf
# this is how to connect to the domains (all virtual, but the option is there)
# not used yet
# transport_maps = mysql:/etc/postfix/mysql_transport.cf

จากนั้นเราต้องเตรียมไฟล์ alias ซึ่งสามารถทำได้ด้วยการสำเนามาจาก /etc/aliases

cp /etc/aliases /etc/postfix/aliases

จากนั้นให้ตรวจสอบค่าต่าง ๆ ให้ถูกต้องในไฟล์ main.cf และไฟล์ /etc/postfix/alienn แล้วรันคำสั่ง

postalias /etc/postfix/aliases

Virutal User

ขั้นต่อไปต้องสร้างโฟลเดอร์ที่อยู่สำหรับ Virtual Mail ซึ่งบางครั้ง apt-get จะติดตั้งให้เรียบร้อยเลย

  • หากยังไม่มีผู้ใช้ชื่อ virtual ให้ทำการสร้าง user ใหม่ให้สำหรับ virtual ด้วยคำสั่งต่อไปนี้
mkdir /var/spool/mail/virtual
groupadd virtual -g 5000
useradd virtual -u 5000 -g 5000
chown -R virtual:virtual   /var/spool/mail/virtual
  • หากมีอยู่แล้วให้ทำการแก้ไขด้วยคำสั่งต่อไปนี้
groupmod -g 5000 virtual
usermod -g virtual -u 5000 virtual
chown -R virtual:virtual /var/spool/mail/virtual

mysql_mailbox.cf

จากนั้นต้องสร้างไฟล์ต่าง ๆ สำหรับการค้นหาในฐานข้อมูล ซึ่งในขั้นนี้จะเซ็ทบางอย่างที่จำเป็นก่อน ส่วนที่เหลือจะเซ็ททีหลังเมื่อจำเป็น ให้แก้ไขไฟล์ /etc/postfix/mysql_mailbox.cf

vi /etc/postfix/mysql_mailbox.cf

ด้วยการเซ็ทค่า ต่าง ๆ ไว้เรียบร้อยแล้ว

user=mail
password=apassword
dbname=maildb
table=users
select_field=maildir
where_field=id
hosts=127.0.0.1
additional_conditions = and enabled = 1

mysql_uid.cf

จากนั้นแก้ไขไฟล์ /etc/postfix/mysql_uid.cf ให้มีข้อความดังต่อไปนี้

user=mail
password=apassword
dbname=maildb
table=users
select_field=uid
where_field=id
hosts=127.0.0.1

mysql_gid.cf

แก้ไขไฟล์ /etc/postfix/mysql_gid.cf ให้มีข้อความดังต่อไปนี้

user=mail
password=apassword
dbname=maildb
table=users
select_field=gid
where_field=id hosts=127.0.0.1

mysql_alias.cf

แก้ไขไฟล์ /etc/postfix/mysql_alias.cf ให้มีเนื้่อหาดังต่อไปนี้

user=mail
password=apassword
dbname=maildb
table=aliases
select_field=destination
where_field=mail
hosts=127.0.0.1
additional_conditions = and enabled = 1

mysql_domains.cf

แก้ไขไฟล์ /etc/postfix/mysql_domains.cf ให้มีรายละเอียดังต่อไปนี้

user=mail
password=apassword
dbname=maildb
table=domains
select_field=domain
where_field=domain
hosts=127.0.0.1
additional_conditions = and enabled = 1
  • จะเห็นได้ว่าสามบรรทัดแรกจะเหมือนกันมาก มีบางฟิลด์เท่านั้นที่เปลี่ยน
  • หากกำหนด IP ในไฟล์ hosts (แทนที่จะใช้ localhost) การเชื่อมต่อจะทำผ่าน TCP และไม่ใช่ mysql SOCKET

Database (MySQL)

ในการใช้งานเมล์ผ่านฐานข้อมูล เราจะต้องติดตั้ง MySQL และสร้าง user สำหรับการค้นหา นอกจากนั้นยังต้องสร้างฐานข้อมูล (database)

  • ถ้ายังไม่ได้ทำ ให้เซ็ทรหัสผ่านของ root ของ mysql ด้วยคำสั่ง
 mysqladmin -u root password new_password 
  • จากนั้น login เป็น root ด้วยคำสั่ง
 mysql -u root -p 
  • ให้ใส่รหัสผ่านของ root (ของ MySQL ที่เพิ่งเปลี่ยน) เมื่อถาม Enter password:

สร้างฐานข้อมูล maildb และ mail user

  • หมายเหตุ -- คำสั่งของ mysql จะจบด้วยเซมิคอล่อน ;
  • สร้างฐานข้อมูล maildb ด้วยคำสั่ง
 mysql> create database maildb; 
  • สร้าง user ใหม่ชื่อว่า mail
 mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'localhost' 
           IDENTIFIED by 'apassword'; 
 mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON maildb.* TO 'mail'@'%' 
           IDENTIFIED by 'apassword'; 
 mysql> exit;

สร้างตาราง aliases, domains, และ users

ในฐานข้อมูล maildb นี้เราต้องสร้างตารางเบื้่องต้น (tables) ขึ้นมา 3 ตารางคือ

   * aliases
   * domains
   * users

เราจะสร้างตารางอื่นๆ ด้วยในการขยายขีดความสามารถการทำงานของเมล์

  • ให้ login เป็น user ใหม่ที่เราสร้างขึ้นชื่อ 'mail'
 mysql -u mail -p maildb 
  • ให้ใส่รหัสผ่านเดียวกับที่ได้ตั้งไว้ในคำสั่ง GRANT (apassword)
  • จากนั้นสร้างตารางด้วยคำสั่งใน mysql
 mysql> CREATE TABLE `aliases` ( `pkid` smallint(3) NOT NULL auto_increment, `mail` varchar(120) 
           NOT NULL default , `destination` varchar(120) NOT NULL default , `enabled` tinyint(1) 
           NOT NULL default '1', PRIMARY KEY (`pkid`), UNIQUE KEY `mail` (`mail`) ) ; 
 mysql> CREATE TABLE `domains` ( `pkid` smallint(6) NOT NULL auto_increment, `domain` varchar(120) 
           NOT NULL default , `transport` varchar(120) NOT NULL default 'virtual:', `enabled` tinyint(1) 
           NOT NULL default '1', PRIMARY KEY (`pkid`) ) ; 
 mysql> CREATE TABLE `users` ( `id` varchar(128) NOT NULL default , `name` varchar(128) 
           NOT NULL default , `uid` smallint(5) unsigned NOT NULL default '5000', `gid` smallint(5) unsigned 
           NOT NULL default '5000', `home` varchar(255) NOT NULL default '/var/spool/mail/virtual', 
           `maildir` varchar(255) NOT NULL default 'blah/', `enabled` tinyint(3) unsigned NOT NULL 
           default '1', `change_password` tinyint(3) unsigned NOT NULL default '1', `clear` varchar(128) 
           NOT NULL default 'ChangeMe', `crypt` varchar(128) NOT NULL default 'sdtrusfX0Jj66', 
           `quota` varchar(255) NOT NULL default , `procmailrc` varchar(128) NOT NULL default ,
           `spamassassinrc` varchar(128) NOT NULL default , PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`) ) ;
  • ฟิลด์ท้าย ๆ ตอนนี้ยังไม่มีความจำเป็นต้องใช้แต่จะสร้างเผื่อไว้สำหรับการติดตั้งซอฟท์แวร์อื่นในภายหลัง

แก้ไขไฟล์ my.cnf

ให้แก้ไขไฟล์ my.cnf ซึ่งใน Ubuntu จะสร้างไฟล์นี้่ขึ้นมาโดยอัตโนมัติ ให้แก้ไขไฟล์ /etc/mysql/my.cnf ด้วยคำสั่ง vi หรือ pico

 vi /etc/mysql/my.cnf
## In Hoary you needed to comment out this line
#skip-networking
## however in breezy this has changed to
bind-address = 127.0.0.1
## which is fine
## Make sure this is set
log = /var/log/mysql/mysql.log
## Then in a few weeks comment it out
## when everything is working, as it slows mysql down
  • การแก้ไขข้างต้นเป็นการเพ่ิมการเข้าถึงผ่านระบบเครือข่ายให้กับ MySQL
  • แต่เรายังควบคุมว่าใครบ้างที่จะเชื่อมต่อเข้ามา ด้วยไฟร์วอลล์ และ user ที่สร้างขึ้นมา
  • นอกจากนั้นยังสามารถเชื่อมต่อเข้าตรง ๆ กับ socket ได้เลยซึ่งจะมีความปลอดภัยสูงขึ้นอีก
  • ให้เริ่มการทำงานของ MySQL ใหม่ตามค่าติดตั้งที่ได้เปลี่ยนไป ด้วยคำสั่ง
 sudo /etc/init.d/mysql restart

การปรับแต่งค่าของ IMAP (Courier)

  • แก้ไขไฟล์ /etc/courier/authdaemonrc โดยให้เปลี่ยนบรรทัดของโมดูลดังนี้
 authmodulelist="authmysql"
  • แก้ไขไฟล์ authmysqlrc ให้มีค่าการติดตั้งดังต่อไปนี้ --ให้ระวัง space ที่ท้ายของไฟล์ทำให้การทำงานผิดพลาดได้
MYSQL_SERVER localhost
MYSQL_USERNAME mail
MYSQL_PASSWORD apassword
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE maildb
MYSQL_USER_TABLE users
# comment out this field,
# as I now longer use the encrypted pw options
#MYSQL_CRYPT_PWFIELD crypt
MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD id
MYSQL_HOME_FIELD home
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat(home,'/',maildir)
MYSQL_WHERE_CLAUSE enabled=1
  • จากนั้นให้แก้ไขไฟล์ imapd
# set how many connections to use per person. Easy to underestimate 
# if you have 6 mailboxes set up.
MAXPERIP=20
# high debug to start with
DEBUG_LOGIN=2
IMAPDSTART=YES
  • จากนั้นให้แก้ไขให้เหมือนกันใน pop และ ssl ถ้าต้องการติดตั้งและใช้งาน
  • หากทำการติดตั้งได้อย่างครบถ้วนและไม่มีข้อผิดพลาดมาจนถึงขึ้น เมล์เซอร์ฟเวอร์ควรจะทำงานได้แล้ว
  • อาจลัดขั้นตอนไปยังส่วนข้อมูล (data) หรือการทดสอบเมล์ เพื่อดูว่าเมล์ทำงานได้ถูกต้องแล้วหรือยัง
  • อย่างไรก็ตามเซอร์ฟเวอร์ในขั้นนี้ยังมีช่องโหว่ที่ไม่ปลอดภัย และยังไม่มีการป้องกันสแปม ให้ทำการติดตั้งขั้นตอนต่อไป

การตรวจสอบเนื้อความ - Content Checks (amavisd-new)

ใน Ubuntu dapper การติดตั้ง amavisd จะแยกไฟล์คอนฟิกไว้ที่ /etc/amavis/conf.d หากมีเวอร์ชั่นเก่าให้เปลี่ยนชื่อ /etc/amavis/amavis.conf ให้เป็น amavis.conf.disabled แก้ไขไฟล์ชื่อ 50user ใน /etc/amavis/conf.d เพื่อเพิ่มค่าการเปลี่ยนแปลง (จาก 50-user Tip โดย Donald Goodman)

$mydomain 'yourdomain.com';
$daemon_user= 'virtual';
$daemon_group= 'virtual';
@local_domains_acl = qw(.);
$inet_socket_port = 10024;
$forward_method = 'smtp:127.0.0.1:10025';
# @bypass_virus_checks_acl = qw( . );
# @bypass_spam_checks_acl = qw( . );

และเพิ่ม/เปลี่ยนค่าต่อไปนี้

$TEMPBASE = "$MYHOME/tmp";
# Whilst debugging $log_level = 2;
$warnbannedrecip = 1;
$warn_offsite = 1;
$warnvirusrecip = 1;
$spam_quarantine_to = "spam-quarantine\@$mydomain";
$virus_quarantine_to = "virus-quarantine\@$mydomain";
$sa_local_tests_only = 0;

ในส่วนของ av_scanner ให้ทำการ enable/disable แสกนเนอร์ไวรัสที่จะใช้ ในกรณีนี้เราใช้ ClamAV ดังนั้นให้เอาคอมเมนต์ระหว่างบรรทัด @av_scanners( จนถึงวงเล็บปีกกาของ av_scanners. ทำเช่นเดียวกันกับ @av_scanners_backup. ใน @av_scanner ให้เอาคอมเมนต์ออก สำหรับบรรทัดของ Clam จากนั้นให้ตรวจสอบว่าโฟลเดอร์ $TEMPBASE มีอยู่หรือไม่และมี $daemon_user เป็นเจ้าของ และให้ทำเช่นเดียวกันกับโฟลเดอร์ของไวรัส จากนั้นปฏิบัติตามขั้นตอนต่อไปนี้

cd /var/lib/amavis
mkdir tmp
chown virtual:virtual tmp
chown virtual:virtual virusmails
chown -R virtual:virtual /var/run/amavis

ในสคริปต์เริ่มการทำงานของ amavis ต้องตรวจสอบให้แน่ใจว่าเป็นเจ้าของโดย amvis และมีกลุ่มเป็น amavis เช่นกัน ให้แก้ไขไฟล์ /etc/init.d/amavis ซึ่งเป็นสคริปต์

#edit about line 31
#chown -c -h "$1:$2" "$4"
chown -c -h "virtual:virtual" "$4"

จากนั้นให้กำหนดการเชื่อมต่อกับอินเทอร์เน็ตสำหรับ plugin สำหรับการตรวจสอบ ให้แก้ไขไฟล์ master.cf ใน /etc/postfix โดยแก้ไขจากค่าดีฟอลท์ของ master.cf เพิ่มเซอร์วิสที่ต้องการ. (หมายเหตุ - บรรทัดที่ขึ้นต้นด้วย -o ต้องมีแท็บนำหน้า หรือเสปซสองครั้งเนื่องจากเป็นข้อความต่อจากบรรทัดก่อนหน้า)

#smtp inet n - n - - smtpd
smtp inet n - - - - smtpd -o cleanup_service_name=pre-cleanup
#cleanup unix n - - - 0
cleanup cleanup unix n - - - 0 cleanup -o mime_header_checks=
     -o nested_header_checks=
     -o body_checks=
     -o header_checks=
amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps=
     -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions=
     -o smtpd_helo_restrictions= -o smtpd_sender_restrictions=
     -o smtpd_recipient_restrictions=permit_mynetworks,reject
     -o strict_rfc821_envelopes=yes -o mynetworks=127.0.0.0/8
     -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001
     -o smtpd_hard_error_limit=1001
pre-cleanup unix n - - - 0 cleanup -o virtual_alias_maps=
     -o canonical_maps= -o sender_canonical_maps=
     -o recipient_canonical_maps= -o masquerade_domains=

จากนั้นแก้ไขไฟล์ main.cf ใน /etc/postfix เพิ่มบรรทัดต่อไปนี้

content_filter = amavis:[127.0.0.1]:10024
#receieve_override_options = no_address_mapping

Anti Virus (ClamAV)

การปรับเปลี่ยนค่าของ ClamAV นั้นไม่ยุ่งยาก ตรวจสอบให้แน่ใจว่า ClamAV นั้นรันโดย user เดียวกันกับ amavisd-new จากนั้นให้ปรับค่าคอนฟิกของ fresclam option เพื่อให้แน่ใจว่าได้มีการอัพเดทไวรัสอยู่เสมอ แก้ไขไฟล์ /etc/clamav/clamd.conf เปลี่ยน user ให้เป็น amavisd-new

# User clamav User virtual

เปลี่ยน ownership ของรันไทม์โฟลเดอร์

chown virtual:virtual /var/run/clamav

และให้แก้ไขไฟล์ freshclam.conf

# how frequent per day. default is once an hourwhich is a bit excesive.
# once per day should do.
Checks 1

เป็นอันเสร็จการปรับค่าของ ClamAV

โปรแกรมต่อต้านเมล์ขยะ Anti Spam (SpamAssassin)

ค่าการติดตั้งของ SpamAssassin สามารถใช้ได้งานได้ หากต้องการปรับแต่งค่าการรันให้เข้าไปแก้ไขไฟล์ /etc/spamassassin/local.cf โดยเปรียบเทียบกับค่าปริยาย (default) ที่ /usr/share/spamassassin/ ยกตัวอย่างเช่นหากต้องการเพิ่มหรือลดระดับในการตัดสินใจว่าจะรับ หรือไม่รับอีเมล์ ให้ทำการแก้ไขไฟล์ local.cf.

skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0
use_bayes 1
bayes_path /etc/spamassassin/bayes
bayes_file_mode 0770

หลังจากที่โปรแกรมรวบรวมข้อมูลเกี่ยวกับสแปม (ประมาณ 200 หรือมากกว่า) เราสามารถให้โปรแกรมเรียนรู้ด้วยการใช้ Bayes filterใน SpamAssassin สำหรับอีเมล์เหล่านั้น

  1. ตัวอย่างการใช้งานเบย์ฟิลเตอร์
sa-learn --showdots -C /etc/spamassassin --spam /var/spool/mail/virtual/quarantine/.spam/*
sa-learn --showdots -C /etc/spamassassin --ham /var/spool/mail/virtual/mine/cur/*

หากสังเกตุว่ายังมีสแปมหลุดเข้ามาในเมล์เซอร์ฟเวอร์มากเกินไป (มี false postives มากเกิน อีเมล์จริงถูกโยนทิ้ง) สามารถปรับแต่งค่าเพิ่มเติมได้ ด้วยการลดระดับการตรวจสอบลง ค่าโดยทั่วไปของ SpamAssassin น่าจะสามารถดักจับสแปมได้ประมาณ 97% ของสแปมทั้งหมด. โดยอาจมีประมาณ 1 ใน 1000 ครั้งทำงานผิดพลาด (false positives) ให้ค้นหาข้อมูลที่มีประโยชน์เพ่ิมเติมจากเว็บไซต์ของ SpamAssassin และมีหัวข้อที่น่าสนใจต่าง ๆ เช่น automatic learning การใช้ cronjobs เรียนรู้ spam และ ham ที่ระบุโดยผู้รับอีเมล์.

การควบคุมนโยบาย Policy (Postgrey)

การติดตั้ง Postgrey จะช่วยให้การทำงานของระบบเมล์ดีขึ้น Ubuntu เองก็ขยายข้อมูลและโมดูลเกี่ยวกับการใช้งาน Postgrey ด้วยการติดตั้งใน /etc/postgrey (whitelist configuration) ผู้เขียนไม่แนะนำให้แก้ไขไฟล์นี้ เนื่องจากอาจทำให้เกิดความเสียหายต่อเมล์เซอร์ฟเวอร์ของท่านได้ อย่างไรก็ตามเราจำเป็นต้องแก้ไขไฟล์ main.cf เพื่อเพิ่มมาตรการสำหรับการรับเมล์

#adding the postgrey policy:
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient, 
                                       reject_unknown_recipient_domain, reject_unauth_destination,
                                       check_policy_service inet:127.0.0.1:60000, permit

ค่าปริยายสำหรับเวลาก่อนที่เซอร์ฟเวอร์จะลองส่งเป็น 300 วินาที (หรือ 5 นาที) เราอาจเปลี่ยนค่านี้ได้ เช่นการต้องการให้เร็วขึ้นอาจเปลี่ยนให้เป็น 1 นาที ให้แก้ไขไฟล์ /etc/default/postgrey

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60"
#POSTGREY_TEXT="Your customized rejection message here"ใ

สามารถใส่ข้อความบอกเหตุผลในการไม่รับเมล์ได้ในตัวแปร POSTGREY_TEXT

Authentication (SASL)

การตรวจสอบสิทธิการใช้งานสามารถใช้โปรแกรม Cyrus SASL ซึ่งมีระบบรักษาความปลอดภัยในการตรวจสอบผู้ใช้งานเมล์เซอร์เวอร์ การตรวจสอบจะกระทำ 2 วิธี คือ ด้วย postfix เมื่อทำการส่งเมล์ และโดย Courier เมื่อทำการับเมล์. ขั้นแรกให้ปรับแต่งค่าของ postfix เพิ่มบรรทัดต่อไปนี้ใน main.cf

# modify the existing smtpd_recipient_restrictions
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated,
                                       reject_non_fqdn_recipient, reject_unauth_destination,
                                       check_policy_service inet:127.0.0.1:60000, permit
# modify the existing smtpd_sender_restrictions
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_non_fqdn_sender,
                                     reject_unknown_sender_domain, reject_unauth_pipelining, permit

และเพิ่มบรรทัดต่อไปนี้เข้าไป

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =

จากนั้นให้สร้างไฟล์คอนฟิกของ sasl (อาจมีไดเร็กทอรี่นี้อยู่แล้ว) สร้างไดเร็กทอรี่ด้วยคำสั่ง

mkdir /etc/postfix/sasl

แก้ไขไฟล์ smtpd.conf ด้วยคำสั่ง

vi /etc/postfix/sasl/smtpd.conf

ให้มีข้อความต่อไปนี้

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail
sql_passwd: apasswd
sql_database: maildb
sql_select: select
clear from users where id='%u@%r' and enabled = 1

หากจบขั้นตอนดังกล่าวข้างต้นเป็นอันว่าการปรับแต่งค่าเมล์ และส่วนที่เกี่ยวข้องต่าง ๆ ได้เสร็จสมบูรณ์ อย่างไรก็ตามเมล์เซอร์ฟเวอร์จะสามารถใช้งานได้อย่างปลอดภัย และมีการเข้ารหัสข้อมูลควรทำขั้นตอนต่อไปด้วยการการปรับแต่งค่าของ Courier (สำหรับการอ่านเมล์) โดยจะทำงานผ่านการตรวจสอบ (authenticate) ผ่าน SASL เช่นกัน ใน Ubuntu จะมีการติดตั้งให้อยู่แล้ว เราจำเป็นต้องแก้ไขเพียงเล็กน้อยใน /etc/courier/imapd ดังนี้

IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT 
                           THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"

(หมายเหตุ - หากต้องการใช้งาน POP ให้กระทำการปรับแต่งเช่นเดียวกัน)

Encryption (TLS)

การใช้ SASL เป็นการเข้ารหัสสำหรับการตรวจสอบสิทธิของผู้ใช้งานอีเมล์ อย่างไรก็ตามเนื้อความของอีเมล์ยังคงถูกส่งเป็นข้อความธรรมดา ซึ่งสามารถถูกแกะดูด้วยด้วยโปรแกรมบางประเภท เช่น sniffer ต่าง ๆ โปรแกรม TLS เป็นการพัฒนาเพิ่มต่อจาก SSL เพื่อที่จะเข้ารหัสของข้อความที่ส่งโดย postfix และอ่านโดย courier ระหว่างเครื่องเมล์เซอร์ฟเวอร์ โปแกรม TLS เป็นระบบเข้ารหัสระหว่างผู้ส่งกับผู้รับ ไม่ได้เป็นโปรแกรมประเภท client เพียงอย่างเดียว (รายละเอียดเพิ่มเติมดู GNuPG และ S/MIME) ขั้นแรกต้องทำการสร้าง certificates สำหรับ postfix และ courier ในกรณีของ postfix เราต้องสร้าง certificate (มีอายุ 3 ปี) ด้วยคำสั่ง

cd /etc/postfix (เครื่องหมาย '\' แสดงว่าเป็นบรรทัดเดียวกัน)
openssl req -new -outform PEM -out \ 
     postfix.cert -newkey rsa:2048 -nodes -keyout \
     postfix.key -keyform PEM -days 999 -x509

ในไฟล์ /etc/postfix/main.cf ให้เพิ่มบรรทัดต่อไปนี้

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/postfix.cert
smtpd_tls_key_file = /etc/postfix/postfix.key
smtpd_data_restrictions = reject_unauth_pipelining

ในไฟล์ master.cf เพิ่ม/ปรับเปลี่ยนค่าต่อไปนี้ (ค่าบางค่าอาจมีอยู่แล้ว)

tlsmgr unix - - n 300 1 tlsmgr smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o 
smtpd_sasl_auth_enable=yes
587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes

โปรแกรมที่เครื่องลูกข่ายบางอันอาจ (เช่น Novel Evolution) มีความจำเป็นต้องใช้พอร์ต 465 นอกเหนือจากพอร์ต 25 ที่ใช้โดยเมล์อยู่แล้ว ถ้าหากไม่สามารถรัน STARTTLS ได้ เดเบียนแพ็คเกจต่าง ๆ ใน Ubuntu สร้าง certificate สำหรับ coเurier ให้โดยอัตโนมัติ ในกรณีที่ไม่สามารถหา certificate ได้ให้ใช้คำสั่ง

openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out \
     imapd.pem -nodes -days 999

จากนั้นแก้ไขไฟล์ /etc/courier/imapd-ssl และตรวจสอบดูว่าเป็น path สำหรับ certificate.

TLS_CERTFILE=/etc/courier/imapd.pem

เมื่อทำการแก้ไขเสร็จและเร่ิมใช้งาน TLS แล้วจะมีการเข้า/ถอดรหัสในการรับ-ส่งเมล์ ผู้ใช้อาจถูกถามให้รับ certificate เพื่อเป็นการแลกเปลี่ยนกุญแจในการเข้า-ถอดรหัส ปัญหาในการใช้ SALS และ TLS ในเวลาเดียวกัน อาจมาจากการที่ข้อความของอีเมล์ทั้งหมดถูกเข้ารหัสอยู่แล้วทำให้การใช้งาน SASL มีความจำเป็นน้อยลง

การปรับแต่งค่าของ Webmail SquirrelMail

  • SquirrelMail เป็นโปรแกรมเว็บเมล์ที่เขียนด้วยภาษา PHP สามารถดาวน์โหลดได้ฟรีจาก sourceforge
  • เมื่อติดตั้งใน Ubuntu จะวางไว้ที่ไดเร็กทอรี่ /usr/share ดังนั้นเราต้องนำมาไว้ที่เว็บ root ที่ /var/www
  ln  -s   /usr/share/squirrelmail   /var/www/squirrelmail
  • จากนั้นให้เซ็ทค่า URL เพื่อเข้าใช้ SquirrelMail ด้วยการเรียกผ่านเว็บบราวเซอร์โดยใช้ URL
 http://mail.crma.ac.th/squirrelmail
  • ในกรณีนี้เราเข้าเป็นแบบ subfolder ซึ่งหากสามารถทำเป็น virtual host แล้วจะทำให้สามารถใช้งานได้สะดวกขึ้น
  • ใน Ubuntu ให้แก้ไขไฟล์ /etc/apache2/sites-available/webmail
<VirtualHost *>
  ServerAdmin webmaster@yourdomian.com
  ServerName webmail.yourdomain.com
  DocumentRoot /var/www/squirrelmail
  <Directory /var/www/squirrelmail>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride AuthConfig
      Order allow,deny
      allow from all
  </Directory>
  ErrorLog /var/log/apache2/error-webmail.log
  LogLevel warn
  CustomLog /var/log/apache2/access-webmail.log combined
  ServerSignature On
</VirtualHost>
  • จากนั้นทำการ enable และเปิดใช้งานด้วยคำสั่ง
 ln -s /etc/apache2/sites-available/webmail /etc/apache2/sites-enabled/810-webmail
  • หรือใช้คำสั่ง
 a2ensite webmail
  • เริ่มการทำงานของเว็บเซอร์ฟเวอร์ด้วยคำสั่ง
 sudo /etc/init.d/apache2 reload
  • โฟลเดอร์ config ของ SquirrelMail เป็นเพียงแค่ symbolic link ไปยัง /etc/squirrelmail
  • ดังนั้นถ้ารัน SquirrelMail หลาย ๆ ตัวจ่าจะสำรองไฟล์ด้วยการก็อปปี้เพิ่มอีก
  • SquirrelMail มีคอนฟิกไฟล์อยู่สามไฟล์คือ
    • config_default.php เป็นค่า default ไม่ต้องทำการแก้ไข.
    • config.php จะ overrides ค่า defaults ได้ -- ไม่ต้องแก้ไขไฟล์นี้เนื่องจากสร้างขึ้นโดยอัตโนมัติโดย conf.pl
    • conf_local.php แก้ไขไฟล์นี้ได้เพื่อที่จะเพ่ิมเติมหรือเปลี่ยนแปลงค่าที่กำหนดไว้เป็น default.
  • ในการเปลี่ยนแปลงค่าของ SquirrelMail ให้รันสคริปต์
 /var/www/squirrelmail/config/conf.pl
  • เป็นโปแกรมที่เป็นเมนู และสามารถแก้ไขรายละเอียดต่าง ๆ ได้ง่าย ให้ใช้ความระมัดระวังในการเปลี่ยนค่า
  • ระวังอย่าให้มี spaces ในคำสั่งหรือท้ายคำสั่ง ซึ่งอาจทำให้การทำงานไม่ถูกต้องได้
  • ให้เลือก Database ตัวเลือกที่ 9 จากเมนู
  • จากนั้นเลือก 1 เพื่อแก้ไข DNS สำหรับ address book ให้ใส่
 mysql://username:password@127.0.0.1/database
  • จากนั้นเลือก 3 สำหรับ preferences และใส่ข้อมูลเหมือนเดิม
 mysql://username:password@127.0.0.1/database
  • มี global address เป็นตัวเลือกถ้าจะใช้ก็สามารถตั้งค่านี้ได้
  • จากนั้นให้เลือก 's' เพื่อบันทึก (save) ค่าที่เปลี่ยนแปลงไป แล้วกด 'r' เพื่อกลับไปยังเมนูหลัก
  • กด 'q' เพื่อออกจากโปรแกรม

ตัวอย่างไฟล์ config_local.php

  • อ่านไฟล์ default สำหรับคำอธิบายในรายละเอียด
$org_name = "CRMA webmail";
$org_logo = 'http://flurdy.com/images/flurdy.gif';
$org_logo_width = '212';
$org_logo_height = '108';
$org_title = "webmail by flurdy";
$provider_name = 'flurdy';
$provider_uri = 'http://www.flurdy.com/';
$smtp_auth_mech = 'none';
$default_use_javascript_addr_book = true;
$hide_sm_attributions = true;
$edit_identity = false;
$edit_name = true;
$imap_server_type = 'courier';
$default_folder_prefix = 'INBOX.';
$trash_folder = 'Trash';
$sent_folder = 'Sent';
$draft_folder = 'Drafts';
$show_prefix_option = false;
$default_sub_of_inbox = false;
$show_contain_subfolders_option = false;
$delete_folder = true;
$optional_delimiter = '.';
$force_username_lowercase = true;
$allow_thread_sort = true;
$allow_server_sort = true;
$addrbook_dsn = 'mysql://username:password@localhost/database';
$prefs_dsn = 'mysql://username:password@localhost/database';
$addrbook_global_dsn = 'mysql://username:password@localhost/database';
$addrbook_global_writeable = false;
$addrbook_global_listing = false;
$theme_default = 18;
$theme_css = '/themes/css/verdana-10.css';
  • จากนั้นให้สร้างตาราง (tables) สำหรับการทำงานของ SquirrelMail
  • สร้าง user ใหม่สำหรับ SquirrelMail หรือใช้ user 'mail' เดิมที่ได้สร้างไว้แล้ว
  • สร้างฐานข้อมูลใหม่สำหรับ SquireMail หรืออาจใช้ฐานข้อมูลเดิมของ maildb ที่ได้สร้างไว้แล้ว
  • รายละเอียดการสร้างให้ดูตัวอย่างในส่วนของ MySQL
  • แก้ไขไฟล์ config.php ให้มีค่าสอดคล้องกับฐานข้อมูล และ user ที่ใช้
  • จากนั้นให้ login เข้าไปยัง mysql
 mysql -u username -p database
  • ป้อนรหัสผ่านที่ใช้ให้ถูกต้อง แล้วใช้คำสั่งของ mysql เพื่อสร้างตารางที่ต้องการใช้
 mysql> CREATE TABLE `address` ( `owner` varchar(128) NOT NULL default , `nickname` varchar(16) 
           NOT NULL default , `firstname` varchar(128) NOT NULL default , `lastname` varchar(128) 
           NOT NULL default , `email` varchar(128) NOT NULL default , `label` varchar(255) 
           default NULL, PRIMARY KEY (`owner`,`nickname`), KEY `firstname` (`firstname`,`lastname`) ) ;
 mysql> CREATE TABLE `userprefs` ( `user` varchar(128) NOT NULL default , `prefkey` varchar(50)
           NOT NULL default , `prefval` varchar(255) default NULL, `modified` timestamp(14)
           NOT NULL, PRIMARY KEY (`user`,`prefkey`) ) ;
 mysql> CREATE TABLE `global_abook` ( `owner` varchar(128) NOT NULL default , `nickname` 
           varchar(16) NOT NULL default , `firstname` varchar(128) NOT NULL default , `lastname` 
           varchar(128) NOT NULL default , `email` varchar(128) NOT NULL default , `label` 
           varchar(255) default NULL, PRIMARY KEY (`owner`,`nickname`), 
           KEY `firstname` (`firstname`,`lastname`) );
  • หลังจากสร้างเสร็จแล้วให้ทดลอง SquirrelMail ด้วยการเปิดเว็บบราวเซอร์ไปที
 http://your-squirrelmail-location/src/configtest.php
  • หมายเหตุ ( ตอนนี้อาจยังไม่มีข้อมูลหรือเมล์สำหรับตรวจสอบ แต่อาจดูได้แค่การเชื่อมต่อผ่านเว็บ)

Admin (phpMyAdmin)

DNS

ข้อมูล

การทดสอบ

การปรับแต่งค่าเพิ่มเติมหลังการติดตั้ง

ภาคผนวก

Personal tools