Virtual E-mail Accounting
จากที่เคยเซ็ตระบบเมลรอไว้เมื่อสามเดือนก่อน โดยใช้ maildir format + imap + pop3 interface พร้อม spam/virus scanner ก็ทดลองใช้เป็นการภายในมาระยะหนึ่ง มันก็ใช้การได้ดี มาถึงตอนนี้ ผู้บริหารต้องการเริ่มใช้ระบบเมลแล้ว ก็เลยมาเซ็ตต่อ ให้ใช้ virtual account คือไม่ต้อง generate shell account บนระบบ เพื่อความปลอดภัยของระบบ แต่ใช้ DBMS เก็บข้อมูลผู้ใช้ (ตามที่ kitty เคยแนะนำในการสนทนาครั้งหนึ่ง)
เคยอ่านพบในข้อมูลแพกเกจของ debian ว่า cyrus สามารถทำ virtual mail ได้ แต่สูตรที่ใช้อยู่ คือ exim4 + courier ยังไม่อยากเปลี่ยน ค้นไปสักหน่อยก็พบว่า ทั้ง exim4 และ courier ต่างก็สนับสนุนการ deliver และ authenticate ผ่าน DBMS ทั้ง MySQL และ PostgreSQL ก็เลยจัดการลองซะ โดยเริ่มจาก HOWTO ที่เคยเก็บไว้ใน blog เก่า ทำไปทำมา ปรากฏว่าเขาทำครบถ้วนมากๆ มีทั้งระบบตอบกลับอัตโนมัติด้วย จะทดสอบทีละขั้นก็ทำได้ยาก ก็เลยค้นใหม่อีก จนไปเจอ อีกฉบับ ดูเป็นขั้นเป็นตอนดี ทำทีละขั้นได้เลย สรุปย่อๆ สักหน่อย (เพิ่มเติมจาก exim4 + sa-exim + spamassassin + amavisd-new + clamav + courier-imap บน Debian) ก็คือ:
- apt-get install exim4-daemon-heavy ซึ่งจะมาแทน exim4-daemon-light ที่ไม่สนับสนุนการ lookup DBMS
- apt-get install courier-authmysql (หรือ courier-authpostgresql) เพื่อเพิ่ม module การ authenticate ของ courier ผ่าน DBMS
- create database และ table สำหรับการ authenticate ตามคำแนะนำในเอกสารของ
courier-authmysql
CREATE TABLE users ( id char(128) DEFAULT '' NOT NULL, crypt char(128) DEFAULT '' NOT NULL, clear char(128) DEFAULT '' NOT NULL, name char(128) DEFAULT '' NOT NULL, uid int(10) unsigned DEFAULT '65534' NOT NULL, gid int(10) unsigned DEFAULT '65534' NOT NULL, home char(255) DEFAULT '' NOT NULL, maildir char(255) DEFAULT '' NOT NULL, quota char(255) DEFAULT '' NOT NULL, KEY id (id(128)) );
- เพิ่มโมดูล authmysql (หรือ authpostgresql) ในรายการ authmodulelist ใน
/etc/courier/authdaemonrc แล้วเซ็ตค่าใน /etc/courier/authmysqlrc (หรือ
authpostgresqlrc)
MYSQL_SERVER localhost MYSQL_USERNAME mail MYSQL_PASSWORD password MYSQL_DATABASE maildb MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD crypt MYSQL_LOGIN_FIELD id MYSQL_HOME_FIELD home MYSQL_NAME_FIELD name
จบแล้ว /etc/init.d/courier-authdaemon restart - ทดลองเพิ่ม user ลงใน database และทดสอบ imap authentication
- เซ็ต exim4 เพื่อให้กระจายจดหมายตามข้อมูลใน database (ขั้นนี้วิธีในเว็บหลังไม่ผ่าน
ต้องผสมวิธีการกับเว็บแรก):
- กำหนดการเชื่อมต่อ DBMS (ในที่นี้คือ MySQL)
hide mysql_servers = host/db/user/password
- เพิ่ม virtual_local director ให้ accept และใช้
virtual_local_md_delivery transport
virtual_local: driver = accept domains = +local_domains transport = virtual_local_md_delivery
- เพิ่ม virtual_local_md_delivery transport ให้กระจายเมลแบบ Maildir
โดย query หาแหล่งถุงเมลของผู้ใช้จาก DBMS
virtual_local_md_delivery: driver = appendfile directory = ${lookup mysql {SELECT maildir FROM users \ WHERE id='${quote_mysql:$local_part@$domain}'}{$value}} maildir_format
(พอสังเขปนะครับ ความจริงมีต่ออีก แต่เป็นการ fine tune อย่างอื่น)
- กำหนดการเชื่อมต่อ DBMS (ในที่นี้คือ MySQL)
จบแล้ว ทดลองส่งเมลถึงผู้ใช้แล้วเปิดเมลผ่าน IMAP interface ได้เรียบร้อย :-)
0 ความเห็น:
แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)
<< กลับหน้าแรก