คู่มือฉบับสมบูรณ์สำหรับมือใหม่: Postfix + MySQL + Dovecot พร้อม SSL
สิ่งที่ต้องมี: VPS หรือ Server ที่ติดตั้ง Ubuntu 20.04/22.04 LTS, ชื่อโดเมนจริง (Domain Name), และสิทธิ์ Root
ก่อนอื่นเราต้องตั้งค่า Hostname และติดตั้งโปรแกรมที่จำเป็นทั้งหมด
# อัปเดตระบบ
sudo apt update && sudo apt upgrade -y
# ตั้งค่า Hostname (เปลี่ยน mail.example.com เป็นชื่อของคุณ)
sudo hostnamectl set-hostname mail.example.com
# ติดตั้ง Postfix, Dovecot, MySQL และตัวเชื่อมต่อ
sudo apt install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server -y
* ระหว่างการติดตั้ง Postfix หากมีหน้าต่างเด้งขึ้นมา ให้เลือก "Internet Site" และใส่ System mail name เป็นโดเมนของคุณ (เช่น example.com)
เราจะสร้าง Database เพื่อเก็บข้อมูลโดเมนและผู้ใช้ แทนที่จะใช้ User ของ Linux
Login เข้า MySQL และรันคำสั่งต่อไปนี้:
sudo mysql -u root
-- สร้าง Database
CREATE DATABASE mailserver;
-- สร้าง User สำหรับจัดการ Mail (เปลี่ยน 'mailuserpass' เป็นรหัสผ่านที่ยากขึ้น)
CREATE USER 'mailuser'@'127.0.0.1' IDENTIFIED BY 'mailuserpass';
GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1';
FLUSH PRIVILEGES;
USE mailserver;
-- ตารางเก็บชื่อโดเมน
CREATE TABLE `domains` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ตารางเก็บผู้ใช้งาน (Email + Password)
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`password` varchar(106) NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- เพิ่มข้อมูลตัวอย่าง (โดเมน example.com)
INSERT INTO `domains` (`name`) VALUES ('example.com');
-- เพิ่ม User (info@example.com) รหัสผ่านต้องเข้ารหัส ENCRYPT
-- หมายเหตุ: Dovecot รองรับหลายแบบ แต่เราจะใช้ SHA512-CRYPT
INSERT INTO `users` (`domain_id`, `password`, `email`) VALUES
(1, ENCRYPT('password123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'info@example.com');
exit;
เราต้องบอก Postfix ว่าให้ไปดึงข้อมูล User จาก MySQL แทนการหาในเครื่อง
สร้างไฟล์ /etc/postfix/mysql-virtual-mailbox-domains.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM domains WHERE name='%s'
สร้างไฟล์ /etc/postfix/mysql-virtual-mailbox-maps.cf
user = mailuser
password = mailuserpass
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM users WHERE email='%s'
แก้ไขไฟล์ /etc/postfix/main.cf (สำรองไฟล์เดิมก่อน)
# การตั้งค่าพื้นฐาน
myhostname = mail.example.com
myorigin = /etc/mailname
mydestination = localhost
# บอก Postfix ให้ใช้ MySQL
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
# ตั้งค่าความปลอดภัย (เบื้องต้น)
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
Dovecot ทำหน้าที่ส่งมอบอีเมลให้ผู้ใช้และตรวจสอบรหัสผ่าน
แก้ไข /etc/dovecot/dovecot.conf
# เปิดใช้งาน imap, pop3 และ lmtp
protocols = imap pop3 lmtp
สร้างไฟล์ /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailuserpass
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM users WHERE email='%u';
แก้ไข /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext
แนะนำให้ใช้ Certbot (Let's Encrypt) เพื่อขอใบรับรอง SSL ฟรีสำหรับโดเมน mail.example.com ก่อนทำขั้นตอนนี้
แก้ไข /etc/postfix/master.cf เพื่อเปิด Port 465 (SMTPS) และ 587 (Submission)
# เอาเครื่องหมาย # ออกหน้าบรรทัดเหล่านี้
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
แก้ไข /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
รีสตาร์ท service ทั้งหมดเพื่อให้ค่า config ทำงาน
sudo systemctl restart postfix dovecot mysql
| Protocol | Port (Secure) | Encryption |
|---|---|---|
| IMAP (รับเมล) | 993 | SSL/TLS |
| POP3 (รับเมล) | 995 | SSL/TLS |
| SMTP (ส่งเมล) | 465 หรือ 587 | SSL/TLS หรือ STARTTLS |
วิธีการเพิ่ม Account: File > Info > Add Account > ใส่ email > เลือก "Manual setup or additional server types"
ยินดีด้วย! คุณได้สร้าง Mail Server ของตัวเองเรียบร้อยแล้ว
ดาวน์โหลด Config ทั้งหมด