Bước 1: Cài đặt Postfix (nếu chưa có)
sudo apt update
sudo apt install postfix mailutils -y
Khi cài đặt:
- Chọn
Internet Site- System mail name: mail.giamkichsan.com
Đây là hostname mail server của bạn.
3️⃣ Kiểm tra hostname
hostnamectl set-hostname mail.giamkichsan.com hostname
mail.giamkichsan.comphải là hostname server.- Kiểm tra DNS A record:
mail.giamkichsan.comtrỏ tới IP server của bạn.
Bước 2: Tạo hoặc dùng chứng chỉ SSL/TLS
Bạn có thể dùng Let’s Encrypt hoặc chứng chỉ tự ký (self-signed).
A. Chứng chỉ Let’s Encrypt: Yêu cầu chứng chỉ sử dụng chế độ --standalone (yêu cầu tạm dừng máy chủ web nếu đang chạy trên cổng 80)
sudo apt install certbot
sudo certbot certonly --standalone -d mail.giamkichsan.com
Chứng chỉ sẽ nằm ở:
/etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
/etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem
Bước 3: Cấu hình Postfix để dùng SSL/TLS
Mở file cấu hình chính của Postfix:
sudo nano /etc/postfix/main.cf
Thêm hoặc sửa các dòng sau:
# Domain chính
myhostname = mail.giamkichsan.com
mydomain = giamkichsan.com
myorigin = /etc/mailname
# Máy chủ của bạn sẽ gửi mail đi từ domain
inet_interfaces = all
inet_protocols = all
# Mail địa phương
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# Các máy chủ mà mail của bạn sẽ relay
#relayhost =
# TLS (SSL)
smtp_tls_cert_file=/etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem
smtp_use_tls=yes
smtp_tls_loglevel = 2
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# TLS cho Postfix SMTPD (receiving)
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.giamkichsan.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.giamkichsan.com/privkey.pem
smtpd_use_tls=yes
smtpd_tls_loglevel = 2
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# My networks (chỉ mạng nội bộ gửi mail)
# mynetworks = 127.0.0.0/8 [::1]/128
Bước 4: Bật STARTTLS cho cổng SMTP
Trong file /etc/postfix/master.cf, đảm bảo dòng SMTPS (465) có STARTTLS:
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
Điều này cho phép các client kết nối và nâng cấp lên TLS.
Bước 5: Kiểm tra cấu hình
Kiểm tra cấu hình Postfix:
sudo systemctl restart postfix
sudo systemctl status postfix
sudo postfix check
Bước 7: Kiểm tra SSL/TLS
Bạn có thể dùng openssl để kiểm tra:
openssl s_client -connect mail.giamkichsan.com:465 -starttls smtp
Nếu thành công, bạn sẽ thấy thông tin chứng chỉ và kết nối được mã hóa TLS.
Bước 8: Cách giải quyết Gmail từ chối email vì domain mail.giamkichsan.com chưa có SPF/DKIM
1a. Cấu hình SPF cho domain
👉 Vào DNS của giamkichsan.com kiểm tra SPF
dig txt giamkichsan.com
Nếu chưa có thì add DNS record (TXT) cho giamkichsan.com:
Type: TXT
Name: @
Value:
v=spf1 ip4:109.199.101.177 -all
Lưu ý:
109.199.101.177= IP VPS gửi mail-all= chỉ cho phép IP này gửi mail
1b. SPF là gì
- SPF xác thực IP nào được phép gửi mail thay domain.
- Nó kiểm tra mail đến từ server hợp lệ hay không.
- SPF chỉ dựa trên địa chỉ gửi (envelope sender), không kiểm tra nội dung.
2. Cài đặt DKIM (nếu muốn tăng uy tín)
1️⃣ Cài OpenDKIM
sudo apt update
sudo apt install opendkim opendkim-tools -y
2️⃣ Tạo thư mục lưu key DKIM
sudo mkdir -p /etc/opendkim/keys/giamkichsan.com
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod -R 700 /etc/opendkim
3️⃣ Tạo DKIM key
cd /etc/opendkim/keys/giamkichsan.com
sudo opendkim-genkey -s mail -d giamkichsan.com
sudo chown opendkim:opendkim mail.private
sudo chmod 600 mail.private
-s mail→ selector (bạn có thể đổi tên)-d giamkichsan.com→ domain của bạn- Sau khi chạy xong, bạn sẽ có 2 file:
mail.private→ private keymail.txt→ public key để thêm vào DNS
4️⃣ Cấu hình OpenDKIM
Mở file /etc/opendkim.conf và chỉnh / thêm các dòng:
sudo nano /etc/opendkim.conf
# Phiên bản OpenDKIM
Syslog yes
UMask 002
UserID opendkim:opendkim
# Thư mục chứa key riêng
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
TrustedHosts /etc/opendkim/TrustedHosts
# Chế độ tự động chọn selector nếu có nhiều key
AutoRestart yes
AutoRestartRate 10/1h
Mode sv
Canonicalization relaxed/simple
##
Domain giamkichsan.com
Socket inet:12301@localhost // Chinh sua phu hop server
** Tạo các file hỗ trợ
a) KeyTable
sudo nano /etc/opendkim/KeyTable
Thêm hoặc sửa dòng:
#cú pháp chuẩn: keyname domain:selector:/duong/dan/toi/private.key
mail._domainkey.giamkichsan.com giamkichsan.com:mail:/etc/opendkim/keys/giamkichsan.com/mail.private
maillà selector (có thể đặt tùy ý)- Đường dẫn tới private key của bạn
b) SigningTable
sudo nano /etc/opendkim/SigningTable
*@giamkichsan.com mail._domainkey.giamkichsan.com
- Nghĩa là tất cả email từ domain @
giamkichsan.comsẽ dùng keymail._domainkey.giamkichsan.com
c) TrustedHosts
sudo nano /etc/opendkim/TrustedHosts
127.0.0.1
localhost
giamkichsan.com
Phân quyền đúng (rất quan trọng)
sudo chown opendkim:opendkim /etc/opendkim/KeyTable
sudo chown opendkim:opendkim /etc/opendkim/SigningTable
sudo chown opendkim:opendkim /etc/opendkim/TrustedHosts
sudo chmod 640 /etc/opendkim/KeyTable
sudo chmod 640 /etc/opendkim/SigningTable
sudo chmod 640 /etc/opendkim/TrustedHosts
- Các host này được tin cậy để gửi mail qua DKIM.
5️⃣ Cấu hình Postfix kết nối OpenDKIM
Chỉnh file /etc/postfix/main.cf, thêm:
sudo nano /etc/postfix/main.cf
Thêm nội dung dưới vào cuối file:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:12301
non_smtpd_milters = $smtpd_milters
6️⃣ Khởi động OpenDKIM và Postfix
sudo systemctl enable opendkim
sudo systemctl restart opendkim
sudo systemctl restart postfix
Kiểm tra lỗi
sudo journalctl -xeu opendkim.service | tail -50 //Nếu lỗi opendkim.service
sudo journalctl -u opendkim -xe
//Hoac chay debug neu van loi
sudo opendkim -f -x /etc/opendkim.conf
7️⃣ Thêm public DKIM vào DNS
Mở file mail.txt vừa tạo, copy nội dung TXT record. Ví dụ:
sudo nano /etc/opendkim/keys/giamkichsan.com/mail.txt
hoặc
sudo cat /etc/opendkim/keys/giamkichsan.com/mail.txt
mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GN...rest_of_key..."
mail→ selector (-s maillúc tạo key)- Thêm record TXT này vào DNS của domain
giamkichsan.com
Lưu ý: DNS có thể mất 15–60 phút để propagate.
8️⃣ Test DKIM
Sau khi DNS update:
opendkim-testkey -d giamkichsan.com -s mail -vvv
Nếu kết quả OK → DKIM đã hoạt động.
4 Test gửi mail
echo "Test gửi mail qua Gmail relay" | mail -s "Test Mail $(date)" duanvc2811@gmail.com
6️⃣ Kiểm tra mail queue / log
mailq # Mail còn trong queue hay đã gửi
tail -f /var/log/mail.log
[hoac] sudo tail -f /var/log/syslog | grep --color=auto -E "postfix|DKIM|SPF|warning|error"
- Nếu mail gửi thành công → ra khỏi queue, Gmail nhận ngay
- Nếu bị lỗi → log sẽ chỉ ra ngay (thường là lỗi password hoặc TLS)
Nguyên nhân thường gặp
- File log
/var/log/mail.logbị xóa, quyền sai hoặc filesystem readonly. - Rsyslog không có quyền ghi vào thư mục
/var/log. - Một số hệ thống mới Ubuntu dùng systemd-journald để log thay vì file riêng cho mail, hoặc rsyslog chưa được cấu hình để ghi mail.
Cách fix
1️⃣ Tạo lại file log và cấp quyền
sudo touch /var/log/mail.log
sudo chown syslog:adm /var/log/mail.log
sudo chmod 640 /var/log/mail.log
2️⃣ Khởi động lại rsyslog
sudo systemctl restart rsyslog
3️⃣ Khởi động lại Postfix
sudo systemctl restart postfix
4️⃣ Kiểm tra log realtime
sudo tail -f /var/log/mail.log
Để lại một phản hồi