Cách cài đặt Mailserver với Postfix và Dovecot, kết nối IMAP qua Thunderbird với hệ điều hành Ubuntu

Để thiết lập Ubuntu làm máy chủ gửi và nhận email với địa chỉ info@demo.com, bạn cần cài đặt và cấu hình một Mail Transfer Agent (MTA) như Postfix, đồng thời thiết lập các dịch vụ liên quan để hỗ trợ giao thức nhận email (POP3/IMAP) như Dovecot. Dưới đây là các bước chi tiết (Ta sẽ ví dụ tên miền cần trỏ và xây dựng Mailserver là demo.com):

1. Yêu cầu hệ thống

  • Một máy chủ chạy Ubuntu (bản mới nhất hoặc LTS khuyến nghị).
  • Một tên miền (ở đây là demo.com) đã được trỏ DNS đúng cách.
  • Quyền truy cập root hoặc sudo.

2. Cấu hình DNS

Đảm bảo bạn cấu hình các bản ghi DNS cho tên miền của mình:

  • MX Record: Trỏ về máy chủ mail.
demo.com. IN MX 10 mail.demo.com.
mail.demo.com. IN A [IP_CỦA_BẠN]
demo.com. IN TXT "v=spf1 mx a -all"

3. Cài đặt Postfix

  1. A Record: Địa chỉ IP của máy chủ mail.  
  2. SPF Record: Cho phép máy chủ gửi mail hợp lệ.  
  3. DKIM và DMARC: Thêm cấu hình bảo mật email (xem bước 6).

Cài đặt Postfix:

sudo apt update sudo apt install postfix

Cấu hình Postfix: Trong quá trình cài đặt, bạn sẽ được yêu cầu chọn kiểu cấu hình:

Kiểm tra và chỉnh sửa file cấu hình: Mở file /etc/postfix/main.cf:

sudo nano /etc/postfix/main.cf

Thêm/chỉnh sửa các dòng sau:

myhostname = mail.demo.com
mydomain = demo.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain relayhost = home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

Lưu và khởi động lại Postfix:

sudo systemctl restart postfix

4. Cài đặt Dovecot

  1. Chọn "Internet Site".
  2. Điền tên miền chính là demo.com.

Cài đặt Dovecot:

sudo apt install dovecot-core dovecot-imapd dovecot-pop3d

Cấu hình Dovecot: Mở file /etc/dovecot/conf.d/10-mail.conf:

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

Tìm và sửa dòng:

mail_location = maildir:~/Maildir

Đảm bảo user mail có quyền truy cập vào thư mục /home/username/Maildir.

Khởi động lại Dovecot:

sudo systemctl restart dovecot

5. Tạo tài khoản email

Tạo một user trên hệ thống:

sudo adduser info

Đặt mật khẩu cho user này (đây sẽ là mật khẩu email).

Tạo thư mục Maildir cho user:

sudo maildirmake /home/info/Maildir sudo chown -R info:info /home/info/Maildir

6. Cấu hình bảo mật email (SPF, DKIM, DMARC)

SPF: Đã cấu hình trong bước DNS.

DKIM:

Cài đặt OpenDKIM:

sudo apt install opendkim opendkim-tools

Cấu hình OpenDKIM:

sudo nano /etc/opendkim.conf

Thêm/chỉnh sửa:

Domain demo.com KeyFile /etc/opendkim/keys/demo.com/default.private Selector default

Tạo key DKIM:

sudo mkdir -p /etc/opendkim/keys/demo.com sudo opendkim-genkey -s default -d demo.com -D /etc/opendkim/keys/demo.com sudo chown -R opendkim:opendkim /etc/opendkim/keys

Thêm bản ghi TXT vào DNS:

default._domainkey.demo.com. IN TXT "v=DKIM1; k=rsa; p=[PUBLIC_KEY]"

Trong đó public_key có thể lấy trong file default.txt vừa mới tạo

DMARC:

_dmarc.demo.com. IN TXT "v=DMARC1; p=none; rua=mailto:postmaster@demo.com"

7. Cấu hình TLS cho SMTP

  1.  
  2. Thêm bản ghi DMARC vào DNS:

Cài đặt chứng chỉ TLS (dùng Let's Encrypt):

sudo apt install certbot sudo certbot certonly --standalone -d mail.demo.com

Cấu hình Postfix để sử dụng TLS: Mở /etc/postfix/main.cf và thêm:

smtpd_tls_cert_file=/etc/letsencrypt/live/mail.demo.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/mail.demo.com/privkey.pem smtpd_tls_security_level = may smtp_tls_security_level = may smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Khởi động lại Postfix:

sudo systemctl restart postfix



 

Đoạn này thì Nam thấy có 1 vấn đề khá lớn đó là nếu sử dụng Cloudflare làm nơi quản lý DNS, thì phải chú ý riêng mail.demo.com cần trỏ về chính xác địa chỉ (thay vì sử dụng Cloudflare), nên chỗ quản lý bản ghi, cần bỏ phần Proxy của Record đó mà để là DNS only

Một số lưu ý trong cấu hình Config của Postfix

Postfix sử dụng SASL để xử lý xác thực SMTP. Hãy kiểm tra tệp cấu hình main.cf:

Kiểm tra các dòng liên quan đến SASL

Đảm bảo rằng các dòng sau đây tồn tại trong /etc/postfix/main.cf:

smtpd_sasl_auth_enable = yes 
smtpd_sasl_type = dovecot 
smtpd_sasl_path = private/auth 
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_local_domain = $myhostname 
broken_sasl_auth_clients = yes

Nếu bạn sử dụng Dovecot làm backend SASL, hãy kiểm tra thêm cấu hình sau:

3. Kiểm tra cấu hình Dovecot

Hãy xác nhận rằng Dovecot được cấu hình để hỗ trợ xác thực SASL.

Kiểm tra tệp 10-master.conf

Mở tệp:

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

Đảm bảo rằng cấu hình cho socket Postfix-Dovecot đúng:

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

Kiểm tra tệp 10-auth.conf

Mở tệp:

sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login

Nếu Postfix và Dovecot không thể giao tiếp qua socket /var/spool/postfix/private/auth, sẽ xảy ra lỗi.

ls -l /var/spool/postfix/private/auth
srw-rw-rw- 1 postfix postfix ...

Nếu không đúng, chạy lệnh:

sudo chmod 666 /var/spool/postfix/private/auth sudo chown postfix:postfix /var/spool/postfix/private/auth

Nếu Dovecot không chấp nhận tên @ tên miền

1. Cấu hình Dovecot để chấp nhận user@domain

Kiểm tra tệp cấu hình /etc/dovecot/conf.d/10-auth.conf và chỉnh sửa như sau:

sudo nano /etc/dovecot/conf.d/10-auth.conf
auth_username_format = %n
auth_username_format = %u

Ý nghĩa:

Lưu ý: Nếu dòng này đang được comment (#), hãy bỏ dấu #.

2. Kiểm tra hệ thống xác thực

Kiểm tra cách bạn lưu trữ thông tin xác thực (user/password):

3. Kiểm tra cấu hình Postfix

Hãy kiểm tra xem Postfix có bị ảnh hưởng bởi vấn đề này không:

4. Khởi động lại dịch vụ

Sau khi chỉnh sửa cấu hình, khởi động lại các dịch vụ:

sudo systemctl restart dovecot
 sudo systemctl restart postfix

Cách gửi Email qua SMTP Google với việc Setup Email cùng mật khẩu ứng dụng

1. Cấu hình relayhost trong Postfix để gửi qua SMTP Gmail

sudo nano /etc/postfix/main.cf
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

2. Tạo file sasl_passwd để lưu thông tin xác thực Gmail

sudo nano /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 your-email@gmail.com:your-password

3. Bảo vệ file sasl_passwd và tạo database

sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd

4. Khởi động lại Postfix

sudo systemctl restart postfix

Vấn đề SSL trong quá trình sử dụng

Gần đây Nam gặp một vấn đề khá khó chịu là Mailserver 1 hôm chết nghẻo - tìm hiểu lý do thì là do chứng chỉ bảo mật hết hạn, chính vì vậy ta cần xử lý Cron Job để luôn gia hạn chứng chỉ hàng ngày, như vậy sẽ đỡ mất thời gian và làm gián đoạn luồng Email của khách hàng. Nhận thấy ở Server Litespeed của Nam khi chạy Cronjob thì luôn không được do cổng 80 đã bị lấy mất (Bởi dịch vụ Openlitespeed) chính vì vậy ta sẽ cần Disable chúng, chạy lệnh Renew  sau đó lại Start lại Openlitespeed server

sudo nano /usr/local/bin/certbot-renew-lsws.sh

Ta sẽ tạo 1 file Script để Cronjob chạy chúng theo lịch trình

#!/bin/bash

echo "==== STARTING SSL RENEWAL ===="

# Stop OpenLiteSpeed
echo "[*] Stopping lsws..."
sudo systemctl stop lsws

# Renew SSL certificates
echo "[*] Renewing certbot certificates..."
sudo certbot renew

# Start OpenLiteSpeed
echo "[*] Starting lsws..."
sudo systemctl start lsws

echo "==== SSL RENEWAL DONE ===="

Thực hiện thực thi hành động 

sudo chmod +x /usr/local/bin/certbot-renew-lsws.sh

Tạo Cron Job

sudo crontab -e

Thêm dòng sau để chạy mỗi ngày lúc 3 giờ sáng (bạn có thể chỉnh thời gian tùy thích):

0 3 * * * /usr/local/bin/certbot-renew-lsws.sh >> /var/log/certbot-lsws.log 2>&1

Cách sửa lỗi Apple Mail không nhận Self Host Mailserver

Gần đây Nam gặp một tình cảnh trớ trêu đó là hệ thống mailserver dựng bằng dovecot, postfix chạy tốt trên Thunderbird, nhưng lại gặp vấn đề khi đăng nhập vào Apple Mail, bởi giao diện đăng nhập của Apple Mail khá khó tìm phần Add mail, rất may là trong quá trình sử dụng Nam đã tìm ra nguyên nhân

Nguyên nhân chính: SSL được gia hạn nhưng hệ thống Dovecot, Postfix chưa nhận 

Hóa ra lý do lại rất đơn giản, chỉ cần reload lại 2 công cụ này thì mọi thứ lại tốt hơn. 

Khi bạn chạy sudo certbot renew, chứng chỉ mới được cập nhật trên hệ thống, nhưng Postfix và Dovecot không tự động reload cấu hình trừ khi bạn có hook hoặc reload thủ công.

Khắc phục: Sau khi renew, hãy chạy:

sudo systemctl reload dovecot
sudo systemctl reload postfix