Hướng dẫn · 19/09/2026

Hướng dẫn cài đặt email server trên Ubuntu với Postfix và Dovecot

Tự vận hành email server không chỉ là cài SMTP và IMAP. Để thư đến đúng inbox, máy chủ cần IP có uy tín, reverse DNS, TLS, SPF, DKIM, DMARC, lọc spam, chống open relay, giám sát queue và backup có thể khôi phục. Bài này dựng một máy chủ cho một domain trên Ubuntu bằng Postfix, Dovecot và Rspamd.

Hướng dẫn cài đặt email server trên Ubuntu với Postfix và Dovecot

Tự vận hành email server không chỉ là cài SMTP và IMAP. Để thư đến đúng inbox, máy chủ cần IP có uy tín, reverse DNS, TLS, SPF, DKIM, DMARC, lọc spam, chống open relay, giám sát queue và backup có thể khôi phục. Bài này dựng một máy chủ cho một domain trên Ubuntu bằng Postfix, Dovecot và Rspamd.

Nếu email là dịch vụ sống còn nhưng không có người trực vận hành, hãy dùng nhà cung cấp email được quản lý. Một cấu hình đúng hôm nay vẫn cần vá lỗi, theo dõi blacklist, xử lý spam và phục hồi dữ liệu về sau.

Kiến trúc sử dụng

Thành phầnVai trò
PostfixNhận và gửi SMTP; cung cấp submission cho người dùng
DovecotLưu mailbox dạng Maildir, IMAP và xác thực SMTP
Rspamd + RedisChấm điểm spam, tích hợp milter và ký DKIM
Let's EncryptChứng chỉ TLS cho SMTP/IMAP
Fail2ban/UFWGiảm brute force và giới hạn bề mặt mạng

Ví dụ dùng domain example.com, hostname mail.example.com và IPv4 203.0.113.10. Hãy thay toàn bộ giá trị mẫu bằng thông tin thật.

1. Kiểm tra điều kiện trước khi thuê VPS

  • Nhà cung cấp cho phép outbound TCP 25 và không NAT chung IP gửi thư.
  • Có thể đặt PTR/reverse DNS của IP thành mail.example.com.
  • IP chưa nằm trong blacklist lớn và không phải dải có uy tín xấu.
  • Máy có IP tĩnh, tối thiểu khoảng 2 GB RAM cho stack nhỏ.
  • Domain cho phép chỉnh A, MX và TXT.

Nếu outbound 25 bị chặn, có thể dùng SMTP relay uy tín cho chiều gửi. Không tìm cách vượt chính sách nhà cung cấp.

2. Tạo DNS nền tảng

LoạiTênGiá trị mẫu
Amail203.0.113.10
MX@10 mail.example.com.
TXT@v=spf1 mx -all

Yêu cầu nhà cung cấp VPS đặt PTR của 203.0.113.10 về mail.example.com. Forward-confirmed reverse DNS phải khớp: hostname này cũng cần phân giải trở lại đúng IP.

Nếu chưa vận hành IPv6 đầy đủ và chưa có PTR IPv6, đừng tạo AAAA cho mail host và nên cấu hình Postfix chỉ dùng IPv4.

3. Chuẩn bị Ubuntu và firewall

hostnamectl set-hostname mail.example.com
apt update && apt full-upgrade -y
apt install -y postfix dovecot-imapd dovecot-lmtpd \
  rspamd redis-server certbot fail2ban swaks ufw

Khi Postfix hỏi, chọn Internet Site và nhập example.com làm system mail name.

ufw default deny incoming
ufw default allow outgoing
ufw allow from ADMIN_IP to any port 22 proto tcp
ufw allow 25/tcp
ufw allow 80/tcp
ufw allow 587/tcp
ufw allow 993/tcp
ufw enable

Port 25 dành cho server-to-server, 587 cho người dùng gửi thư có xác thực, 993 cho IMAPS và 80 dùng cấp/gia hạn chứng chỉ. Không mở database, Redis hoặc cổng quản trị nội bộ ra Internet.

4. Cấp chứng chỉ TLS

Đảm bảo A record đã trỏ đúng và port 80 chưa bị chiếm:

certbot certonly --standalone \
  -d mail.example.com \
  --agree-tos -m admin@example.com --no-eff-email

Chứng chỉ nằm tại /etc/letsencrypt/live/mail.example.com/. Thêm deploy hook để reload dịch vụ sau gia hạn:

cat > /etc/letsencrypt/renewal-hooks/deploy/reload-mail.sh <<'SH'
#!/bin/sh
systemctl reload postfix
systemctl reload dovecot
SH
chmod 750 /etc/letsencrypt/renewal-hooks/deploy/reload-mail.sh
certbot renew --dry-run

5. Cấu hình Postfix

Thiết lập identity, mailbox, TLS, Dovecot SASL và giới hạn relay:

postconf -e 'myhostname = mail.example.com'
postconf -e 'mydomain = example.com'
postconf -e 'myorigin = $mydomain'
postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain'
postconf -e 'inet_interfaces = all'
postconf -e 'inet_protocols = ipv4'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'home_mailbox = Maildir/'
postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem'
postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_security_level = may'
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, permit_sasl_authenticated, reject_unauth_destination'

mynetworks chỉ tin localhost. Không thêm dải mạng rộng tùy tiện vì có thể biến máy thành open relay.

Trong /etc/postfix/master.cf, bật service submission và yêu cầu TLS:

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

6. Cấu hình Dovecot

Trong /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir:~/Maildir

Trong 10-auth.conf:

disable_plaintext_auth = yes
auth_mechanisms = plain login

Trong block service auth của 10-master.conf:

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

Trong 10-ssl.conf của Dovecot 2.3 trên Ubuntu:

ssl = required
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem

Cú pháp Dovecot có thay đổi giữa các nhánh lớn. Luôn đối chiếu phiên bản cài đặt bằng dovecot --version và kiểm tra cấu hình bằng doveconf -n.

7. Tạo mailbox đầu tiên

Mô hình đơn giản dùng system user cho một domain:

adduser alice
maildirmake.dovecot /home/alice/Maildir
chown -R alice:alice /home/alice/Maildir

Tài khoản đăng nhập là alice; địa chỉ nhận là alice@example.com. Mô hình này dễ hiểu nhưng không phù hợp khi cần nhiều domain hoặc hàng trăm mailbox. Khi đó nên dùng virtual users với SQL/LDAP hoặc một mail suite được đóng gói.

8. Tích hợp Rspamd với Postfix

Rspamd thường lắng nghe milter ở localhost:11332. Xác minh bằng ss -lntp, sau đó:

postconf -e 'milter_protocol = 6'
postconf -e 'milter_default_action = accept'
postconf -e 'smtpd_milters = inet:127.0.0.1:11332'
postconf -e 'non_smtpd_milters = inet:127.0.0.1:11332'

milter_default_action=accept giúp SMTP không ngừng hoàn toàn khi bộ lọc tạm lỗi, nhưng cần cảnh báo để không bỏ qua sự cố kéo dài.

9. Tạo DKIM và xuất bản DNS

mkdir -p /var/lib/rspamd/dkim
rspamadm dkim_keygen -b 2048 \
  -s mail -d example.com \
  -k /var/lib/rspamd/dkim/example.com.mail.key \
  > /root/example.com.mail.dkim.txt
chown -R _rspamd:_rspamd /var/lib/rspamd/dkim
chmod 600 /var/lib/rspamd/dkim/example.com.mail.key

File TXT chứa public key cần đặt tại mail._domainkey.example.com. Cấu hình module dkim_signing của Rspamd dùng selector mail, domain example.com và private key trên. Tên user dịch vụ có thể khác theo package; kiểm tra bằng systemctl cat rspamd.

Khởi động lại và kiểm tra:

postfix check
doveconf -n
rspamadm configtest
systemctl restart postfix dovecot rspamd
systemctl --no-pager --full status postfix dovecot rspamd

10. Thêm DMARC

Bắt đầu ở chế độ quan sát:

_dmarc.example.com. TXT
"v=DMARC1; p=none; rua=mailto:dmarc@example.com; adkim=s; aspf=s"

Sau khi mọi nguồn gửi hợp pháp đều pass và align SPF/DKIM, nâng dần lên quarantine rồi reject. Không bật p=reject ngay nếu domain còn gửi qua CRM, hóa đơn hoặc dịch vụ marketing chưa được kiểm kê.

11. Kiểm tra chống open relay và luồng thư

postconf -n
ss -lntp | grep -E ':25|:587|:993'
swaks --server mail.example.com \
  --from outside@example.net \
  --to user@another-domain.test

Phép thử relay không xác thực tới domain bên ngoài phải bị từ chối. Tiếp theo, kiểm tra submission có xác thực và TLS bằng tài khoản thật, gửi thư đến Gmail/Outlook rồi xem header Authentication-Results để xác nhận SPF, DKIM và DMARC.

Cấu hình mail client:

Dịch vụMáy chủCổngBảo mật
IMAPmail.example.com993TLS
SMTP submissionmail.example.com587STARTTLS, bắt buộc xác thực

12. Fail2ban, log và queue

Bật jail phù hợp cho postfix, postfix-sasldovecot, nhưng kiểm tra tên log/journal của phiên bản Ubuntu. Theo dõi:

journalctl -u postfix -u dovecot -u rspamd -f
postqueue -p
rspamc stat
fail2ban-client status

Cảnh báo khi queue tăng, disk gần đầy, chứng chỉ sắp hết hạn, Rspamd dừng hoặc tỷ lệ gửi lỗi tăng. Không tự động retry vô hạn thư bị từ chối vĩnh viễn.

13. Backup và khôi phục

Sao lưu ít nhất:

  • /home/*/Maildir hoặc kho mailbox thực tế;
  • /etc/postfix, /etc/dovecot, /etc/rspamd;
  • DKIM private keys và thông tin DNS;
  • user/group cần thiết hoặc database virtual users;
  • tài liệu firewall, PTR và quy trình cấp lại TLS.

Mã hóa backup, lưu ngoài VPS và kiểm thử restore mailbox sang máy cô lập. DKIM key cần được bảo vệ như secret; nếu lộ, xoay selector và khóa.

14. Những giới hạn cần biết

  • IP mới có thể bị hạn chế dù cấu hình đúng; reputation cần thời gian và lưu lượng hợp lệ.
  • Không dùng hệ thống này để gửi marketing hàng loạt nếu chưa có unsubscribe, quản lý complaint và warm-up phù hợp.
  • Một VPS đơn là single point of failure; MX phụ không thay thế mailbox backup.
  • Webmail như Roundcube là một ứng dụng riêng cần vá lỗi và bảo vệ.
  • Catch-all làm tăng spam; nên tạo địa chỉ cụ thể và alias có chủ đích.

Checklist production

  • A/PTR khớp hai chiều; HELO dùng đúng FQDN.
  • MX, SPF, DKIM và DMARC phân giải đúng.
  • Port 25 không open relay; 587 bắt buộc TLS và xác thực.
  • IMAP chỉ dùng TLS; certificate renewal đã dry-run thành công.
  • Database/Redis không public; SSH giới hạn theo IP và dùng key.
  • Queue, disk, blacklist, log, certificate và backup có cảnh báo.
  • Backup ngoài máy đã restore thử.
  • postmaster@, abuse@ và địa chỉ nhận DMARC được theo dõi.

Kết luận

Một email server hoạt động được có thể dựng trong vài giờ; một email server đáng tin cậy cần vận hành liên tục. Postfix, Dovecot và Rspamd tạo nền tảng tốt cho quy mô nhỏ khi DNS, TLS, authentication, giám sát và backup được làm đầy đủ. Nếu không kiểm soát được PTR, outbound port 25 hoặc người trực sự cố, nên dùng dịch vụ email quản lý hoặc SMTP relay.

Nguồn tham khảo

Thảo luận

Bình luận 0

Đăng nhập để bình luận

Bạn cần có tài khoản để tham gia thảo luận và trả lời độc giả khác.

Đăng nhậpĐăng ký

Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.