Postfix là phần mềm chuyển thư/tin nhắn (MTA), là ứng dụng dùng để gửi và nhận email. Nó có thể được cấu hình để chỉ cho phép gửi email từ ứng dụng cục bộ. Giải pháp này đặc biệt phù hợp khi bạn cần gửi thông báo email định kỳ từ ứng dụng hoặc khi lượng email gửi đi lớn hơn hạn mức mà nhà cung cấp dịch vụ email bên thứ ba đưa ra. Nó cũng nhẹ hơn so với việc vận hành một máy chủ SMTP hoàn chỉnh nhưng vẫn đáp ứng đầy đủ các chức năng cần thiết.

Trong hướng dẫn này, chúng ta sẽ cài đặt và cấu hình Postfix làm SMTP chỉ gửi email. Bạn phải yêu cầu chứng chỉ TLS miễn phí từ Let’s Encrypt cho tên miền của mình để mã hóa email gửi đi bằng chứng chỉ này.
Lưu ý, kể từ ngày 22 tháng 6 năm 2022, DigitalOcean chặn SMTP cho tất cả tài khoản mới. Cũng trong chính sách này, DigitalOcean đã hợp tác với SendGrid để khách hàng vẫn có thể gửi email dễ dàng. Bạn có thể tìm hiểu thêm về quan hệ hợp tác của chúng tôi và bắt đầu sử dụng SendGrid tại DigitalOcean’s SendGrid Marketplace App.
Điều kiện tiên quyết
- Một máy chủ Ubuntu 22.04 đã được thiết lập theo hướng dẫn Thiết lập Máy chủ Ban đầu trên Ubuntu 22.04, bao gồm tạo người dùng
non-rootcó quyềnsudo. - Một tên miền đã được đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng
your_domainlàm ví dụ. Bạn có thể mua tên miền tại Namecheap, lấy miễn phí trên Freenom hoặc sử dụng nhà đăng ký tùy chọn. - Bản ghi DNS loại A trỏ
your_domainvề địa chỉ IP công khai của máy chủ. Bạn có thể tham khảo hướng dẫn Giới thiệu về DNS của DigitalOcean để biết cách thêm bản ghi.
Lưu ý, hostname của máy chủ và tên Droplet phải trùng với your_domain, vì DigitalOcean sẽ tự động thiết lập bản ghi PTR cho địa chỉ IP của Droplet dựa trên tên của nó.
Bạn có thể kiểm tra hostname của máy chủ bằng lệnh hostname trong dấu nhắc lệnh CMD. Kết quả phải trùng với tên mà bạn đã đặt cho Droplet khi tạo. Nếu không đúng, đặt lại bằng lệnh:
hostname your_domain
Ngoài ra, tài khoản của bạn phải được mở cổng 25, điều này có thể chưa được bật đối với một số tài khoản. Cũng cần lưu ý, một số nhà cung cấp email có thể từ chối email đến từ dải IP của DigitalOcean (hoặc nhà cung cấp khác), tùy theo chính sách riêng của mỗi nhà.
Bước 1: Cài đặt Postfix
Trong bước này, chúng ta sẽ cài đặt Postfix. Cách nhanh nhất là cài gói mailutils, gói này bao gồm Postfix cùng một số chương trình bổ trợ để kiểm tra việc gửi email.
Trước tiên, cập nhật cơ sở dữ liệu gói:
sudo apt update
Sau đó, cài đặt Postfix bằng lệnh:
sudo apt install mailutils
Gần cuối quá trình cài đặt, cửa sổ cấu hình Postfix sẽ xuất hiện:

Chọn Internet Site từ menu, nhấn TAB để chọn <Ok>, sau đó ENTER
Tùy chọn mặc định là Internet Site, lựa chọn đề xuất này phù hợp với trường hợp của bạn, vậy nên hãy nhấn TAB, sau đó ENTER. Nếu chỉ thấy phần mô tả, nhấn TAB để chọn OK, rồi ENTER.
Nếu cửa sổ cấu hình không tự xuất hiện, chạy lệnh:
sudo dpkg-reconfigure postfix
Sau đó, bạn sẽ nhận được một thông báo cấu hình khác về tên máy chủ email hệ thống (System mail name).

Nhập tên miền của bạn, nhấn TAB để chọn <Ok>, rồi ENTER.
Tên máy chủ email hệ thống phải trùng với tên bạn đã đặt cho máy chủ khi tạo Droplet. Sau khi nhập xong, nhấn TAB, sau đó ENTER.
Như vậy, Postfix đã được cài đặt xong và sẵn sàng để cấu hình.
Bước 2: Cấu hình Postfix
Trong bước này, chúng ta sẽ cấu hình Postfix để chỉ gửi và nhận email từ chính máy chủ đang chạy nó, tức là từ localhost.
Để thực hiện điều đó, bạn cần cấu hình Postfix chỉ lắng nghe trên giao diện loopback, giao diện mạng ảo mà máy chủ dùng để trao đổi nội bộ. Để thay đổi, chúng ta sẽ chỉnh sửa tệp cấu hình chính của Postfix là main.cf, nằm trong thư mục /etc/postfix.
Mở tệp bằng nano hoặc trình soạn thảo yêu thích:
sudo nano /etc/postfix/main.cf
Tìm các dòng sau:
# /etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .
Đặt giá trị của inet_interfaces thành loopback-only:
# /etc/postfix/main.cf
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .
Nếu tên miền của bạn thực chất là một tên miền phụ và bạn muốn email trông như được gửi từ tên miền chính, hãy thêm dòng sau vào cuối main.cf:
# /etc/postfix/main.cf
...
masquerade_domains = your_main_domain
Tùy chọn masquerade_domains chỉ định tên miền mà tên miền phụ sẽ bị loại bỏ trong địa chỉ email.
Khi hoàn tất, lưu và đóng tệp.
Khởi động lại Postfix với lệnh sau:
sudo systemctl restart postfix
Bây giờ, Postfix đã được cấu hình để chỉ gửi email từ máy chủ của bạn. Tiếp theo, chúng ta sẽ kiểm tra bằng cách gửi một email mẫu đến một địa chỉ email.
Bước 3: Kiểm tra máy chủ SMTP
Trong bước này, chúng ta sẽ kiểm tra khả năng gửi email từ Postfix tới một tài khoản email bên ngoài bằng lệnh mail, công cụ này nằm trong gói mailutils đã cài ở bước 1.
Gửi một email thử nghiệm, chạy lệnh sau:
echo "This is the body of the email" | mail -s "This is the subject line" your_email_address
Bạn có thể thay đổi nội dung và tiêu đề email tùy ý. Nhớ thay your_email_address bằng một địa chỉ email hợp lệ mà bạn có thể truy cập.
Kiểm tra hộp thư của địa chỉ vừa gửi. Bạn sẽ thấy email trong hộp thư đến, nếu không có, hãy kiểm tra thư mục spam. Hiện tại, mọi email bạn gửi đều chưa được mã hóa, điều này có thể khiến nhà cung cấp dịch vụ đánh giá là thư rác. Chúng ta sẽ thiết lập mã hóa ở bước 5.
Nếu gặp lỗi khi chạy lệnh mail hoặc không nhận được email sau một thời gian dài, bạn nên kiểm tra lại cấu hình Postfix vừa chỉnh sửa và đảm bảo tên máy chủ trùng với tên miền.
Với cấu hình hiện tại, địa chỉ trong trường From của email thử nghiệm sẽ có dạng your_user_name@your_domain, trong đó your_user_name là tên người dùng trên máy chủ mà bạn chạy lệnh.
Bây giờ, bạn đã gửi thành công một email từ máy chủ và xác nhận, mail đã được nhận. Ở bước tiếp theo, chúng ta sẽ thiết lập chuyển tiếp email cho người dùng root.
Bước 4: Chuyển tiếp thư hệ thống
Trong bước này, chúng ta sẽ cấu hình chuyển tiếp email cho người dùng root, để các thư hệ thống gửi đến root trên máy chủ sẽ được chuyển tiếp đến một địa chỉ email bên ngoài.
Tệp /etc/aliases chứa danh sách tên thay thế cho các người nhận email. Mở tệp này để chỉnh sửa:
sudo nano /etc/aliases
Ở trạng thái mặc định, tệp sẽ trông như sau:
# /etc/aliases
# See man 5 aliases for format
postmaster: root
Chỉ thị duy nhất ở đây xác định rằng email hệ thống sẽ được gửi đến root.
Thêm dòng sau vào cuối tệp:
# /etc/aliases
...
root: your_email_address
Dòng này chỉ định email gửi tới root sẽ được chuyển tiếp đến địa chỉ email của bạn. Nhớ thay your_email_address bằng email cá nhân. Sau đó, lưu và đóng tệp.
Để thay đổi có hiệu lực, chạy lệnh:
sudo newaliases
Lệnh newaliases sẽ tạo cơ sở dữ liệu alias mà lệnh mail sử dụng, dữ liệu này được lấy từ tệp cấu hình vừa chỉnh sửa.
Kiểm tra khả năng gửi thư đến root:
echo "This is the body of the email" | mail -s "This is the subject line" root
Bạn sẽ nhận được email tại địa chỉ đã cấu hình. Nếu không thấy, hãy kiểm tra thư mục spam.
Trong bước này, chúng ta đã thiết lập chuyển tiếp thư hệ thống đến email cá nhân. Tiếp theo, chúng ta sẽ bật mã hóa email để mọi thư gửi từ máy chủ được bảo vệ trong quá trình truyền và có độ tin cậy cao hơn.
Bước 5: Bật mã hóa SMTP
Trong bước này, chúng ta sẽ bật mã hóa SMTP bằng cách yêu cầu chứng chỉ TLS miễn phí từ Let’s Encrypt cho tên miền (sử dụng Certbot) và cấu hình Postfix để sử dụng chứng chỉ này khi gửi thư.
Ubuntu bao gồm Certbot trong kho gói mặc định, cài đặt bằng lệnh:
sudo apt install certbot
Khi được hỏi xác nhận, nhập Y và nhấn ENTER.
Trong phần thiết lập máy chủ ban đầu ở mục điều kiện tiên quyết, bạn đã cài đặt ufw (tường lửa đơn giản). Bạn cần cấu hình để cho phép cổng HTTP 80 hoạt động, nhằm hoàn tất xác minh tên miền:
sudo ufw allow 80
Kết quả sẽ tương tự:
Rule added
Rule added (v6)
Khi cổng đã mở, chạy Certbot để lấy chứng chỉ:
sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain
Lệnh này yêu cầu Certbot phát hành chứng chỉ với khóa RSA 4096 bit, chạy máy chủ web tạm thời (--standalone) để xác minh và kiểm tra qua cổng 80 (--preferred-challenges http). Nhớ thay your_domain bằng tên miền và nhập địa chỉ email khi được yêu cầu.
Kết quả sẽ tương tự:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
This certificate expires on 2022-07-04.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Như thông báo, chứng chỉ và khóa riêng đã được lưu trong /etc/letsencrypt/live/your_domain.
Bây giờ, mở main.cf để chỉnh sửa:
sudo nano /etc/postfix/main.cf
Tìm phần sau:
# 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_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Chỉnh lại như sau, thay your_domain bằng tên miền của bạn khi cần thiết, để cập nhật cấu hình TLS cho Postfix:
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Sau khi hoàn tất, bạn hãy lưu lại và đóng tệp.
Áp dụng thay đổi bằng cách khởi động lại Postfix:
sudo systemctl restart postfix
Tiếp theo, gửi lại một email thử nghiệm:
echo "This is the body of an encrypted email" | mail -s "This is the subject line" root
Kiểm tra địa chỉ email của bạn. Có thể thư sẽ đến ngay trong hộp thư đến, vì nhà cung cấp dịch vụ thường đánh dấu email không mã hóa là spam.
Bạn có thể xem thông tin kỹ thuật của email trong ứng dụng để xác nhận rằng thư đã được mã hóa.
Kết luận
Bạn đã có một máy chủ email chỉ gửi, chạy bằng Postfix. Việc mã hóa toàn bộ thư đi là bước đầu hiệu quả để tránh thư bị đánh dấu là spam. Nếu mục đích chỉ để phục vụ môi trường phát triển, biện pháp này là đủ.
Tuy nhiên, nếu gửi email đến người dùng tiềm năng (như email xác nhận đăng ký diễn đàn) hoặc các nhà cung cấp phổ biến như Gmail, bạn nên cấu hình thêm bản ghi SPF để tăng độ tin cậy, giúp email dễ được chấp nhận hơn.