การติดตั้งเมล์เซอร์ฟเวอร์ 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/)
ซอฟท์แวร์ที่ใช้
ระบบปฏิบัติการ 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
- URL: http://www.ijs.si/software/amavisd/
- โปรแกรม plug-in สำหรับการตรวจสอบ spam และไวรัส
โปรแกรมต่อต้านสแปม Anti-Spam: SpamAssassin
- URL: http://spamassassin.apache.org
- โปรแกรมที่มีประสิทธิภาพในการต่อต้าน spam
โปรแกรมต่อต้านไวรัส: 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 สำหรับอีเมล์เหล่านั้น
- ตัวอย่างการใช้งานเบย์ฟิลเตอร์
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
- หมายเหตุ ( ตอนนี้อาจยังไม่มีข้อมูลหรือเมล์สำหรับตรวจสอบ แต่อาจดูได้แค่การเชื่อมต่อผ่านเว็บ)
