Để 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):
Đảm bảo bạn cấu hình các bản ghi DNS cho tên miền của mình:
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"Cài đặt Postfix:
sudo apt update sudo apt install postfixCấ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.cfThê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 postfixCài đặt Dovecot:
sudo apt install dovecot-core dovecot-imapd dovecot-pop3dCấu hình Dovecot: Mở file /etc/dovecot/conf.d/10-mail.conf:
sudo nano /etc/dovecot/conf.d/10-mail.confTì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 dovecotTạ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/MaildirSPF: Đã cấu hình trong bước DNS.
DKIM:
Cài đặt OpenDKIM:
sudo apt install opendkim opendkim-toolsCấu hình OpenDKIM:
sudo nano /etc/opendkim.confThêm/chỉnh sửa:
Domain demo.com KeyFile /etc/opendkim/keys/demo.com/default.private Selector defaultTạ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/keysThê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"Cài đặt chứng chỉ TLS (dùng Let's Encrypt):
sudo apt install certbot sudo certbot certonly --standalone -d mail.demo.comCấ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.crtKhở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
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:
Đả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 = yesNếu bạn sử dụng Dovecot làm backend SASL, hãy kiểm tra thêm cấu hình sau:
Hãy xác nhận rằng Dovecot được cấu hình để hỗ trợ xác thực SASL.
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 } }Mở tệp:
sudo nano /etc/dovecot/conf.d/10-auth.confdisable_plaintext_auth = noauth_mechanisms = plain loginNế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/authsrw-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/authKiể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.confauth_username_format = %nauth_username_format = %uÝ nghĩa:
Lưu ý: Nếu dòng này đang được comment (#), hãy bỏ dấu #.
Kiểm tra cách bạn lưu trữ thông tin xác thực (user/password):
Hãy kiểm tra xem Postfix có bị ảnh hưởng bởi vấn đề này không:
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 postfixsudo nano /etc/postfix/main.cfrelayhost = [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 = noanonymoussudo nano /etc/postfix/sasl_passwd[smtp.gmail.com]:587 your-email@gmail.com:your-passwordsudo chmod 600 /etc/postfix/sasl_passwdsudo postmap /etc/postfix/sasl_passwdsudo systemctl restart postfixGầ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
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>&1Gầ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
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