ITtoday.vn – Bài viết này sẽ hướng dẫn các bạn cài đặt Mail server Postfix sử dụng Virtual Domain và Virtual User dựa trên database Mysql.
1.Chuẩn bị
Cài đặt các gói cần thiết:
yum -y install mysql mysql-devel dovecot cyrus-sasl mysql-server
Kiểm tra nếu server có Postfix rồi thì remove đi
Tại sao chúng ta lại remove bản posfix có sẵn hoạc yum của CentOS, vì default chưa có compile module pos mysql.
Check bằng command:
postconf -m
Check trong kết quả trả về sẽ ko có mysql, nếu có mysql thì không cần phải remove và không cần phải thực hiện bước 3 ( trên centos 6.x thì có thể bạn không cần phải thực hiện bước này )
yum remove postfix
2. Cài đặt Postfix
version 2.5.1
ftp://ftp.cuhk.edu.hk/pub/packages/mail-server/postfix/official/postfix-2.5.1.tar.gz
Xả nén file source. Vào thư mục source vừa xả nén.
Chaỵ command:
make -f Makefile.init makefiles \
CCARGS=’-DUSE_SASL_AUTH -I/usr/include/sasl \
-DHAS_MYSQL -I/usr/include/mysql’ \
AUXLIBS=’-L/usr/lib64 -lldap -L/usr/lib64 -llber -L/usr/lib64 -lsasl2 \
-L/usr/lib64/mysql -lmysqlclient -lz -lm’
Lưu ý chỗ bold, chỗ đó là khai báo lib của CentOS, ở đây LM build trên CentoS 64bit, vì thế phaỉ khai báo là /usr/lib64 nếu bạn dung 32bit thì thế /usr/lib64 thành /usr/lib
Tiến hành Compile:
make
Tiến hành install
make install
Lưu ý: khi install nó sẽ hỏi các option và dir ở đâu, default nên enter hết để cho các phần sau map đúng các dir của postfix.
Sau khi xong, tiến hành test
postfix start
postconf –m
Sẽ thấy có dòng chứa mysql.
3. Thiết lập Mysql DB lưu trữ domain và account email.
Tạo database tên là mailserver
Login vào mysql console:
mysql -u root -p
Tạo user mailserver với password vnlamp
mysql>create database mailserver;
GRANT SELECT ON mailserver.* TO mailuser@localhost
IDENTIFIED BY ‘vnlamp’;
Exit
4. Tạo DB Table
Khi bạn thấy ghi là có mysql> nghĩa là ta đang log vào console của mysql.
Tạo bảng chứa domain
mysql>
CREATE TABLE `virtual_domains` (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
Tạo bảng chứa user
mysql>
CREATE TABLE `virtual_users` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
user VARCHAR(40) NOT NULL,
password VARCHAR(32) NOT NULL,
CONSTRAINT UNIQUE_EMAIL UNIQUE (domain_id,user),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);
Tạo bảng chứa alias
mysql>
CREATE TABLE `virtual_aliases` (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
domain_id INT(11) NOT NULL,
source VARCHAR(40) NOT NULL,
destination VARCHAR(80) NOT NULL,
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);
5. Cấu hình và tạo các file map cho Postfix
Tạo file /etc/postfix/mysql-virtual-mailbox-domains.cf với nội dung
user = mailuser
password = vnlamp
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name=’%s’
Thiết lập thông số cho postfix, chạy command này nó sẽ add line vào file /etc/postfix/main.cf của postfix
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Tạo domain test cho db, chạy command
mysql>
INSERT INTO virtual_domains (id, name) VALUES (1, ‘example.com’);
exit
Thiết lập cho postfix vdomain examaple.com sẽ lấy từ file, chạy command
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Tạo vmailbox map, chạy command
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Khai báo owner, chạy command
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000
Tạo một user thử, Lưu ý kỹ phần này
mysql>
INSERT INTO virtual_users (id, domain_id, user, password)
VALUES (1, 1, ‘test’, MD5(‘vnlamp’));
Tạo record trung gian với bảng trung gian, Lưu ý kỹ phần này
mysql>
CREATE VIEW view_users AS
SELECT CONCAT(virtual_users.user, ‘@’, virtual_domains.name) AS email,
virtual_users.password
FROM virtual_users
LEFT JOIN virtual_domains ON virtual_users.domain_id=virtual_domains.id;
Tạo file /etc/postfix/mysql-virtual-mailbox-maps.cf với nội dung
user = mailuser
password = vnlamp
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM view_users WHERE email=’%s’
Thiết lập postfix dùng vmailbox, chạy command
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
postmap -q test@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Thiết lập alias , Lưu ý kỹ phần này
mysql>
INSERT INTO virtual_aliases (id, domain_id, source, destination)
VALUES (1, 1, ‘test’, ‘test@example.com’),
(2, 1, ‘test’, ‘test_alias@yahoo.com’);
Tạo bảng trung gian Lưu ý kỹ phần này
mysql>
CREATE VIEW view_aliases AS
SELECT CONCAT(virtual_aliases.source, ‘@’, virtual_domains.name) AS email,
destination
FROM virtual_aliases
LEFT JOIN virtual_domains ON virtual_aliases.domain_id=virtual_domains.id;
Tạo file /etc/postfix/mysql-virtual-alias-maps.cf với nội dung
user = mailuser
password = vnlamp
hosts = 127.0.0.1
dbname = mailserver
query = SELECT destination FROM view_aliases WHERE email=’%s’
Thiết lập postfix user của domain nào cần alias
postmap -q test@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Tạo file /etc/postfix/mysql-email2email.cf với nội dung
user = mailuser
password = vnlamp
hosts = 127.0.0.1
dbname = mailserver
query = SELECT email FROM view_users WHERE email=’%s’
Rồi chạy command:
postmap -q test@example.com mysql:/etc/postfix/mysql-email2email.cf
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf,mysql:/etc/postfix/mysql-email2email.cf
Security:
chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
7. Cấu hình Dovecot
Thêm dòng này vào file /etc/postfix/master.cf
dovecot unix – n n – – pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}
Restart Postfix
postfix reload
Thiết lập postfix sử dụng dovecot như là transport, chạy command
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1
Edit file /etc/dovecot.conf
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
mail_location = maildir:/home/vmail/%d/%n
namespace private {
separator = .
prefix = INBOX.
inbox = yes
}
auth default {
mechanisms = plain login
passdb sql {
args = /etc/dovecot-sql.conf
}
userdb static {
args =uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
}
}
}
dict {
}
Taọ file /etc/dovecot-sql.conf với nội dung
driver = mysql
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=vnlamp
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM view_users WHERE email=’%u’;
Restart Dovecot:
service dovecot restart
Hoặc /etc/init.d/dovecot restart
Lưu ý cần theo dõi tail -f /var/log/maillog , dovecot hay postfix có error thì nó sẽ báo.
dovecot: Dovecot v1.0.rc15 starting up
dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mymailserver)
Module auth-mysql đã được load.
Security
chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf
8. Setup SSL/SMTP cho Postfix/Dovecot
mkdir -p /etc/ssl/private/
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \
-keyout /etc/ssl/private/dovecot.pem
chmod o= /etc/ssl/private/dovecot.pem
Cấu hình các cilent cho phép relay mail không cần đăng nhập, chạy command
postconf -e mynetworks=192.168.2.0/24
Hoàn tất cấu hình SMTP
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_recipient_restrictions=permit_mynetworks,per mit_sasl_authenticated,reject_unauth_destination
Lời kết:
Lưu ý các dòng In đỏ và các dòng có ghi lưu ý
Tạo thêm domain thì:
Trong mysql console chạy
INSERT INTO virtual_domains (name) VALUES (‘’);
Khai báo domain mới với postfix
postmap -q mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Còn tạo user mới thì tương tự, xem các dòng màu đỏ.
Hãy liên hệ với chúng tôi:
ITtoday
VP Miền Bắc: Số 47 – Ngõ 207 Xuân Đỉnh – Q.Bắc Từ Liêm – TP.Hà Nội – ĐT: 097 383 6600
VP Miền Nam: 53/21 Đường 18, Khu phố 5, Phường Ninh Chung, Quận Thủ Đức, TP Hồ Chí Minh. – ĐT: 0976.413.635
Email: itotdayvn@gmail.com
Website: www.ittoday.vn
Chúc các bạn thành công!