Cài đặt Postfix Mail server + Dovecot + Mysql trên CentOS

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.

Cài đặt Postfix Mail server + Dovecot + Mysql trên CentOS

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!

Rate this post