Thứ ba, 01/04/2014 | 00:00 GMT+7

Cách cấu hình mail server bằng Postfix, Dovecot, MySQL và SpamAssassin

Trong hướng dẫn này, ta sẽ cấu hình mail server bằng Postfix, Dovecot, MySQL và SpamAssassin trên Ubuntu 12.04. Làm theo hướng dẫn này, bạn có thể thêm domain ảo, user và alias . Hơn nữa, VirtualHost của bạn sẽ được bảo mật khỏi trung tâm thư rác.

Yêu cầu

Trước khi cài đặt mail server của bạn, VPS của bạn cần có những thứ sau:

* Miền đang chuyển tiếp đến server ( miền cài đặt )
* Đã cài đặt và cấu hình MySQL ( setup mysql )
* User có quyền root ( cài đặt user mới - bỏ qua bước 5)
* Cấu hình và xác định FQDN của bạn ( cài đặt FQDN )

Tùy chọn : Chứng chỉ SSL ( cài đặt certificate ssl được ký miễn phí )

Tùy chọn (Đăng nhập với quyền user root)

Cài đặt các gói với quyền là user root rất hữu ích vì bạn có tất cả các quyền .

 

sudo -i

 

Giới thiệu password của user . Sau khi thành công, bạn sẽ thấy biểu tượng $ chuyển thành # .

Bước 1: Cài đặt Gói

apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql

Khi cấu hình Postfix được yêu cầu chọn Trang web Internet:



Cấu hình Postfix sẽ hỏi về tên thư Hệ thống - bạn có thể sử dụng FDQN hoặc domain chính của bạn .



Bước 2: Tạo Database MySQL, Miền ảo, User và Bí danh

Sau khi quá trình cài đặt kết thúc, ta sẽ tạo database MySQL để cấu hình ba bảng khác nhau: một bảng cho domain , một cho user và bảng cuối cùng cho alias .

Ta sẽ đặt tên cho database servermail , nhưng bạn có thể sử dụng bất kỳ tên nào bạn muốn.

Tạo database servermail:

 

mysqladmin -p create servermail

 

Đăng nhập với quyền user root MySQL

mysql -u root -p

Nhập password root MySQL của bạn; nếu thành công bạn sẽ thấy:

mysql >

Đầu tiên, ta cần tạo một user mới, cụ thể cho xác thực thư và ta sẽ cấp quyền SELECT.

mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword';

Sau đó, ta cần reload các quyền của MySQL đảm bảo nó áp dụng các quyền đó thành công:

mysql > FLUSH PRIVILEGES;

Cuối cùng, ta cần sử dụng database để tạo bảng và giới thiệu dữ liệu :

mysql> USE servermail;

Ta sẽ tạo một bảng cho các domain cụ thể được công nhận là domain được ủy quyền.


CREATE TABLE `virtual_domains` (
`id`  INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ta sẽ tạo một bảng để giới thiệu user . Tại đây bạn sẽ thêm địa chỉ email và password . Cần phải liên kết mỗi user với một domain .

CREATE TABLE `virtual_users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Cuối cùng, ta sẽ tạo một bảng alias ảo để chỉ định tất cả các email mà bạn sẽ chuyển tiếp đến email khác.


CREATE TABLE `virtual_aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ta đã tạo thành công ba bảng. Bây giờ ta sẽ giới thiệu dữ liệu.

Miền ảo

Ở đây ta sẽ giới thiệu các domain của bạn bên trong bảng virtual_domains. Bạn có thể thêm tất cả các domain bạn muốn, nhưng trong hướng dẫn này, ta sẽ chỉ giới thiệu domain chính (example.com) và FQDN của bạn (hostname.example.com).


INSERT INTO `servermail`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'example.com'),
('2', 'hostname.example.com');

Email ảo

Ta sẽ giới thiệu địa chỉ email và password được liên kết cho từng domain . Đảm bảo rằng bạn thay đổi tất cả thông tin bằng thông tin cụ thể của bạn.


INSERT INTO `servermail`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com');

Bí danh ảo

Ta sẽ giới thiệu địa chỉ email (nguồn) mà ta sẽ chuyển tiếp đến địa chỉ email khác (đích).


INSERT INTO `servermail`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'alias@example.com', 'email1@example.com');

Thoát MySQL

 mysql > exit

Bước 3: Cấu hình Postfix

Ta sẽ cấu hình Postfix để xử lý các kết nối SMTP và gửi thông báo cho từng user được giới thiệu trong Database MySQL.

Trước tiên, ta cần tạo một bản sao của file mặc định, trong trường hợp bạn muốn hoàn nguyên về cấu hình mặc định.

cp /etc/postfix/main.cf /etc/postfix/main.cf.orig

Mở file main.cf để sửa đổi nó:

nano /etc/postfix/main.cf

Đầu tiên, ta cần comment Tham số TLS và nối các tham số khác. Trong hướng dẫn này, ta đang sử dụng certificate SSL miễn phí và các đường dẫn được đề xuất trong hướng dẫn ( liên kết ), nhưng bạn có thể sửa đổi tùy theo cấu hình cá nhân của bạn .


# TLS parameters
#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_session_cache_database = btree:${data_directory}/smtpd_scache
#smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

Sau đó, ta sẽ thêm các thông số sau vào bên dưới cài đặt TLS mà ta đã thay đổi ở bước trước:


smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination

Ta cần comment cài đặt mặc định của mydestination và thay thế nó bằng localhost . Thay đổi này cho phép VPS của bạn sử dụng các domain ảo bên trong bảng MySQL.


#mydestination = example.com, hostname.example.com, localhost.example.com, localhost
mydestination = localhost 

Xác minh tham số myhostname được đặt với FQDN của bạn.


myhostname = hostname.example.com

Nối dòng sau để gửi thư local đến tất cả các domain ảo được liệt kê bên trong bảng MySQL.

virtual_transport = lmtp:unix:private/dovecot-lmtp

Cuối cùng, ta cần thêm ba tham số này để cho Postfix biết cấu hình domain ảo, user và alias .


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

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:

https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt

Ta sẽ tạo ba file cuối cùng mà ta thêm vào file main.cf để cho Postfix biết cách kết nối với MySQL.

Đầu tiên, ta cần tạo file mysql-virtual-mailbox-domains.cf . Cần thay đổi các giá trị tùy thuộc vào cấu hình cá nhân của bạn.


nano /etc/postfix/mysql-virtual-mailbox-domains.cf
		
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

Sau đó, ta cần khởi động lại Postfix.


service postfix restart

Ta cần đảm bảo Postfix tìm thấy domain của bạn, vì vậy ta cần kiểm tra nó bằng lệnh sau. Nếu thành công, nó sẽ trả về 1:


postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Sau đó, ta cần tạo file mysql-virtual-mailbox-maps.cf.


nano /etc/postfix/mysql-virtual-mailbox-maps.cf 
		
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

Ta cần khởi động lại Postfix .

service postfix restart

Đến đây, ta sẽ đảm bảo Postfix tìm thấy địa chỉ email đầu tiên của bạn bằng lệnh sau. Nó sẽ trả về 1 nếu nó thành công:

postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Cuối cùng, ta sẽ tạo file cuối cùng để cấu hình kết nối giữa Postfix và MySQL.


nano /etc/postfix/mysql-virtual-alias-maps.cf
		
user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

Khởi động lại Postfix

service postfix restart

Ta cần xác minh Postfix có thể tìm thấy alias của bạn. Nhập lệnh sau và nó sẽ trả về thư được chuyển tiếp đến alias :

postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Nếu bạn muốn bật cổng 587 để kết nối an toàn với các ứng dụng email, cần phải sửa đổi file /etc/postfix/master.cf


nano /etc/postfix/master.cf

Ta cần bỏ ghi chú những dòng này và thêm các tham số khác:


submission inet n       -       -       -       -       smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

Trong một số trường hợp, ta cần khởi động lại Postfix đảm bảo cổng 587 đang mở.

service postfix restart

Lưu ý: Bạn có thể sử dụng công cụ này để quét các cổng domain của bạn và xác minh cổng 25 và 587 đang mở ( http://mxtoolbox.com/SuperTool.aspx )

Bước 4: Cấu hình Dovecot

Ta sẽ sao chép 7 file mà ta sẽ sửa đổi để bạn có thể hoàn nguyên nó về mặc định nếu cần. Nhập lần lượt các lệnh sau:


cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig
cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig

Chỉnh sửa file cấu hình từ Dovecot.

nano /etc/dovecot/dovecot.conf

Xác minh tùy chọn này được bỏ ghi chú.

!include conf.d/*.conf

Ta sẽ bật các giao thức (thêm pop3 nếu bạn muốn) bên dưới dòng !include_try /usr/share/dovecot/protocols.d/*.protocol line .


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap lmtp

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:


https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt

Sau đó, ta sẽ chỉnh sửa file cấu hình thư:

nano /etc/dovecot/conf.d/10-mail.conf

Tìm dòng mail_location , bỏ ghi chú và đặt tham số sau:

mail_location = maildir:/var/mail/vhosts/%d/%n

Tìm dòng mail_privileged_group , bỏ ghi chú và thêm tham số mail như sau:

mail_privileged_group = mail

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:


https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt

Xác minh quyền

Nhập lệnh này:


ls -ld /var/mail

Đảm bảo các quyền như sau:

drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail

Ta sẽ tạo một folder cho mỗi domain mà ta đăng ký trong bảng MySQL:

mkdir -p /var/mail/vhosts/example.com

Tạo user vmail và group với id là 5000


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /var/mail

Ta cần thay đổi chủ sở hữu của /var/mail mục /var/mail thành user vmail.

chown -R vmail:vmail /var/mail

Sau đó, ta cần chỉnh sửa file /etc/dovecot/conf.d/10-auth.conf :

nano /etc/dovecot/conf.d/10-auth.conf

Bỏ ghi chú xác thực văn bản thuần túy và thêm dòng này:

disable_plaintext_auth = yes

Sửa đổi thông số auth_mechanisms :

auth_mechanisms = plain login

Comment dòng này:

#!include auth-system.conf.ext

Bật ủy quyền MySQL bằng cách bỏ comment này:

!include auth-sql.conf.ext

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:

https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt

Ta cần tạo file /etc/dovecot/dovecot-sql.conf.ext với thông tin của bạn để xác thực:

nano /etc/dovecot/conf.d/auth-sql.conf.ext

Nhập mã sau vào file :


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
} 

Ta cần sửa đổi file /etc/dovecot/dovecot-sql.conf.ext với thông tin MySQL tùy chỉnh :

nano /etc/dovecot/dovecot-sql.conf.ext

Bỏ ghi chú tham số trình điều khiển và đặt mysql làm tham số:

driver = mysql

Bỏ comment kết nối và giới thiệu thông tin cụ thể về MySQL của bạn:

connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword

Bỏ comment default_pass_scheme và thay đổi nó thành SHA-512 .

default_pass_scheme = SHA512-CRYPT

Bỏ comment password_query và thêm thông tin này:

password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:

https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt

Thay đổi chủ sở hữu và group của folder dovecot thành user vmail:


chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot 

Mở và sửa đổi file /etc/dovecot/conf.d/10-master.conf (hãy cẩn thận vì các thông số khác nhau sẽ bị thay đổi).


nano /etc/dovecot/conf.d/10-master.conf

##Uncomment inet_listener_imap and modify to port 0
service imap-login {
  inet_listener imap {
    port = 0
}

#Create LMTP socket and this configurations
service lmtp {
   unix_listener /var/spool/postfix/private/dovecot-lmtp {
	   mode = 0600
	   user = postfix
	   group = postfix
   }
  #inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    #address =
    #port =
  #}
} 

Sửa đổi tham số unix_listener thành service_auth như sau:


service auth {

  unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
  }

  unix_listener auth-userdb {
  mode = 0600
  user = vmail
  #group =
  }

  #unix_listener /var/spool/postfix/private/auth {
  # mode = 0666
  #}

  user = dovecot
}

Sửa đổi service auth-worker như thế này:


service auth-worker {
  # Auth worker process is run as root by default, so that it can access
  # /etc/shadow. If this isn't necessary, the user should be changed to
  # $default_internal_user.
  user = vmail
}

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:

https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt

Cuối cùng, ta sẽ sửa đổi file cấu hình SSL từ Dovecot (bỏ qua bước này nếu bạn định sử dụng cấu hình mặc định).

# nano /etc/dovecot/conf.d/10-ssl.conf

Thay đổi thông số ssl thành bắt buộc:

ssl = required

Và sửa đổi đường dẫn cho ssl_certssl_key :

ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem

Khởi động lại Dovecot

service dovecot restart

Bạn nên kiểm tra xem cổng 993 có đang mở và hoạt động hay không (trong trường hợp bạn bật pop3; bạn cũng nên kiểm tra cổng 995).

telnet example.com 993

Xin chúc mừng. Bạn đã cấu hình thành công mail server của bạn và bạn có thể kiểm tra account của bạn bằng ứng dụng email:

- Username: email1@example.com
- Password: email1's password
- IMAP: example.com
- SMTP: example.com

Lưu ý: sử dụng cổng 993 cho IMAP an toàn và cổng 587 hoặc 25 cho SMTP.

Bước 5: Cấu hình SpamAssassin

Đầu tiên ta cần cài đặt SpamAssassin.

apt-get install spamassassin spamc

Sau đó, ta cần tạo một user cho SpamAssassin.

adduser spamd --disabled-login

Để cấu hình thành công SpamAssassin, bạn cần mở và sửa đổi cài đặt cấu hình.

nano /etc/default/spamassassin

Ta cần thay đổi tham số ENABLED để kích hoạt daemon SpamAssassin.

ENABLED=1

Ta cần phải cấu hình nhà và các thông số tùy chọn.


SPAMD_HOME="/home/spamd/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" 

Sau đó, ta cần chỉ định tham số PID_File như sau:

PIDFILE="${SPAMD_HOME}spamd.pid"

Cuối cùng, ta cần chỉ định rằng các-luật của SpamAssassin sẽ được cập nhật tự động.

CRON=1

Lưu ý: So sánh những thay đổi này với file này để phát hiện những nhầm lẫn hoặc lỗi:

https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt

Ta cần mở /etc/spamassassin/local.cf để cài đặt các-luật chống thư rác.

nano /etc/spamassassin/local.cf

SpamAssassin sẽ cho điểm từng thư và nếu xác định được email này lớn hơn 5,0 khi kiểm tra thư rác, thì thư đó sẽ tự động được coi là thư rác. Bạn có thể sử dụng các thông số sau để cấu hình các-luật chống thư rác:


rewrite_header Subject ***** SPAM _SCORE_ *****
report_safe             0
required_score          5.0
use_bayes               1
use_bayes_rules         1
bayes_auto_learn        1
skip_rbl_checks         0
use_razor2              0
use_dcc                 0
use_pyzor               0

Ta cần thay đổi file Postfix /etc/postfix/master.cf để thông báo rằng mỗi email sẽ được kiểm tra bằng SpamAssassin.

nano /etc/postfix/master.cf

Sau đó, ta cần tìm dòng sau và thêm bộ lọc spamassassin:


smtp      inet  n       -       -       -       -       smtpd
-o content_filter=spamassassin

Cuối cùng, ta cần thêm các tham số sau:


spamassassin unix -     n       n       -       -       pipe
user=spamd argv=/usr/bin/spamc -f -e  
/usr/sbin/sendmail -oi -f ${sender} ${recipient}

Cần khởi động SpamAssassin và khởi động lại Postfix để bắt đầu xác minh thư rác từ email.


service spamassassin start
service postfix restart

Xin chúc mừng! Bạn đã cài đặt thành công mail server của bạn với Postfix và Dovecot với xác thực MySQL và lọc thư rác với SpamAssassin!


Tags:

Các tin liên quan

Cách cấu hình mail server bằng Postfix, Dovecot, MySQL và SpamAssassin
2014-04-01
Cách cấu hình công cụ để sử dụng IPv6 trên VPS Linux
2014-04-01
Cách điều chỉnh cấu hình SSH Daemon của bạn trên VPS Linux
2014-03-26
Cách xác thực người dùng với server SSH bằng Monkeysphere trên VPS Ubuntu
2014-03-24
Cách xác thực danh tính server SSH với Monkeysphere trên VPS Ubuntu
2014-03-24
Cách thiết lập DNSSEC trên server DNS BIND ủy quyền
2014-03-19
Cách thiết lập DNSSEC trên server DNS BIND ủy quyền
2014-03-19
Cách cài đặt TrueCrypt (CLI) trên Linux
2014-03-17
Cách sử dụng Công cụ IPRoute2 để quản lý cấu hình mạng trên VPS Linux
2014-03-11
Cách sử dụng các lệnh và mở rộng lịch sử Bash trên VPS Linux
2014-03-05