如何將網路伺服器與電子郵件伺服器分離?
我有一個為多個域執行 Web 伺服器和電子郵件伺服器的伺服器,並且這兩個服務都配置為使用 Let’s Encrypt 的 SSL 證書(對於每個域,Web 伺服器和電子郵件伺服器使用相同的證書)。
我想進行 2 台伺服器設置,並在一台機器上託管 Web 伺服器,在另一台機器上託管電子郵件服務。為了實現這一點,我相信我會遇到這些障礙:
- 證書管理:我將需要能夠為每個域獲取重複的證書,以便兩台機器都可以證明他們是誰,或者可能讓郵件託管機器只獲取證書
mail.example.com
而不是example.com
為每個域設置它- 從網路伺服器發送電子郵件:我需要託管的一些網站將有聯繫方式、登錄和系統資料庫單,這些需要能夠觸發電子郵件消息。這似乎是最大的問題,因為我不知道如何在 Web 伺服器上配置 Postfix,以便通過電子郵件伺服器發送它們。
解耦這些服務的最佳方法是什麼,我如何能夠為每個服務設置一個伺服器而不會遇到我描述的問題?
您已經強調了此過程的主要步驟:證書和將郵件服務從 Web 委託給郵件伺服器。
關於證書,我建議為郵件和 Web 伺服器使用不同的主機名以及不同的證書。
當您使用 Let’s Encrypt 時——其工具的大多數案例都用於 Web 伺服器。ACME 協議需要檢查您是否可以控制您的域名。這適用於網路資源。certbot(或任何其他支持 ACME 的工具)會將一個簡單的文件放入您的 webroot 並告訴 Let’s Encrypt 通過 HTTP 或 HTTPS 請求檢查它。
對於您的郵件伺服器,這不起作用。但是,如果您使用任何兼容的 DNS 提供商(例如 Amazon Route 53 或 DNS Made Easy 或…),您可以在沒有 Web 伺服器的情況下執行相同的操作。
有關 Certbot 中支持的 DNS 提供程序外掛,請參閱以下列表:
--dns-cloudflare Obtain certificates using a DNS TXT record (if you are using Cloudflare for DNS). (default: False) --dns-cloudxns Obtain certificates using a DNS TXT record (if you are using CloudXNS for DNS). (default: False) --dns-digitalocean Obtain certificates using a DNS TXT record (if you are using DigitalOcean for DNS). (default: False) --dns-dnsimple Obtain certificates using a DNS TXT record (if you are using DNSimple for DNS). (default: False) --dns-dnsmadeeasy Obtain certificates using a DNS TXT record (if you areusing DNS Made Easy for DNS). (default: False) --dns-google Obtain certificates using a DNS TXT record (if you are using Google Cloud DNS). (default: False) --dns-luadns Obtain certificates using a DNS TXT record (if you are using LuaDNS for DNS). (default: False) --dns-nsone Obtain certificates using a DNS TXT record (if you are using NS1 for DNS). (default: False) --dns-rfc2136 Obtain certificates using a DNS TXT record (if you are using BIND for DNS). (default: False) --dns-route53 Obtain certificates using a DNS TXT record (if you are using Route53 for DNS). (default: False)
請參閱以下範例它如何適用於 Amazon 的 Route53:
# set AWS API credentials export AWS_ACCESS_KEY_ID="1234567890" export AWS_SECRET_ACCESS_KEY="ABCDEFGHIJKLMNOPQRSTUVWXYZ" # create a certificate certbot certonly --noninteractive --agree-tos -m webmaster@example.com \n --no-eff-email --dns-route53 --rsa-key-size 4096 \n -d mail.example.com -d smtp.example.com -d imap.example.com
正如您在我給定範例的最後一行中看到的,Let’s Encrypt 支持多域證書。如果您的郵件伺服器偵聽多個域,則必須採用這種方式。SMTP 或 IMAP 不像 HTTPS 那樣支持 SNI。
第二步是將您的郵件從您的網路伺服器轉發到郵件伺服器。作為為每個服務擁有一個單獨的伺服器的最佳實踐,Linux/Unix 將在許多情況下使用本地郵件。所以你不應該從你的網路伺服器中完全刪除 Postfix。將 Postfix 設置更改為所謂的“衛星”設置。在這裡,您的 Postfix 會將郵件轉發到中繼伺服器,並僅為本地服務(套接字和/或 localhost:25)提供 SMTP。
如果您使用的是 Debian 或 Ubuntu,您可以通過以下方式重新配置 Postfix:
dpkg-reconfigure postfix
在衛星設置中,您將被要求提供郵件中繼伺服器。在此處輸入新郵件伺服器的域名(例如 mail.example.com)。
在您的郵件伺服器設置中,您應該啟用 Web 伺服器的 IP 地址作為郵件中繼的可信來源。一個好的方法是使用 Postfix 配置指令permit_mynetworks。