Với domain example.com, chúng ta tạo mail server cho email dạng user@example.com, sau đó có thể gởi nhờ nhiều domain khác cho mail server để có các email dạng user@other.domain.
Chúng ta cần các DNS record:
- A mail.example.com: trỏ đến IP mail server
- MX example.com: trỏ đến mail.example.com
- CNAME smtp.example.com: trỏ đến mail.example.com
- CNAME imap.example.com: trỏ đến mail.example.com
- CNAME autoconfig.example.com: trỏ đến mail.example.com
- CNAME autodiscover.example.com: trỏ đến mail.example.com
- SRV _autodiscover._tcp.example.com: trỏ đến mail.example.com
Ngoài ra còn một số record phục vụ cho “đối ngoại” của mail server, không cần phân tích ở đây.
Chúng ta tránh không dùng domain example.com cho các dịch vụ mail hay web, chỉ dùng trong địa chỉ email mà thôi. Thêm nữa, mặc dù dùng CNAME sẽ khiến việc phân giải ra IP chậm nhưng nếu chúng ta dùng IP động thì sẽ phải cập nhật ít record A hơn.
- mail.example.com cũng là hostname của mail server
- cho phép từ @example.com, dò tìm mail server mail.example.com
- smtp.example.com dùng thay cho mail.example.com để chỉ định SMTP server
- imap.example.com dùng thay cho mail.example.com để chỉ định IMAP server
- dành cho mail client Thunderbird tự động cấu hình mail user
- dành cho Outlook/Apple mail tự động cấu hình mail user
- dành cho Outlook tìm URL của file autodiscover.xml
Hostname/Sub-domain mail.example.com ngoài việc là tên của IMAP, SMTP server trên các cổng 993, 587 còn là tên website các dịch vụ web của mail server như webmail, web UI quản lý CSDL, mail admin. Như vậy mail.example.com dùng các cổng 993, 587, 80, 443.
Mô hình của chúng ta gồm 2 máy:
- Web server chạy Nginx
- Mail server chạy Postfix, Dovecot, MariaDB, Apache2
Câu hỏi là tại sao dùng đến 2 web server Nginx, Apache2? Là vì chúng ta host nhiều website trên web server Nginx, không chỉ là các web dịch vụ cho mail server. Có thể bỏ web server Apache2 trên mail server, khi đó các dịch vụ web của mail server nằm trên web server Nginx.
Chúng ta NAT các port dịch vụ web 80, 443 về web server, các port dịch vụ mail 25, 465, 587, 993, 995 về mail server.
Khi user ở cùng mạng LAN với mail server, tất cả các DNS record đều không thể phân giải ra IP, do đó các dịch vụ email trục trặc có thể gây hiểu lầm là do cấu hình.
Vì vậy chúng ta cần một local DNS như dnsmasq để phân giải domain name ra local IP. Tất cả các DNS record 1-7 như trên đều có thể thiết lập tương ứng trên dnsmasq, chỉ có mail.domain.com vừa trỏ về local IP của mail server trên các cổng dịch vụ mail, vừa trỏ về local IP của web server trên các cổng dịch vụ web. Dnsmasq không NAT IP theo port nên chúng ta dùng web server Apache2 trên mail server.
Tạo các record 1-7 trên dnsmasq
Soạn thảo file /etc/dnsmasq.conf để tạo các record cần thiết.
# IP mail server
address=/mail.domain.com/local_ip_mailserver
# MX record
mx-host=domain.com,mail.domain.com,10
# CNAME, tất cả trỏ về mail server
cname=smtp.domain.com,mail.domain.com
cname=imap.domain.com,mail.domain.com
cname=autoconfig.domain.com,mail.domain.com
cname=autodiscover.domain.com,mail.domain.com
# SRV Record
srv-host=_autodiscover._tcp.domain.com,mail.domain.com,443
Khởi động lại dnsmasq
service dnsmasq restart
Như vậy, trong local network chúng ta cấu hình local dns giống như internet dns, ngoại trừ các dịch vụ web của mail server không dùng proxy mà kết nối thẳng với web server trên mail server.