![多个 SMTP / IMAP 服务器的反向代理](https://linux22.com/image/675187/%E5%A4%9A%E4%B8%AA%20SMTP%20%2F%20IMAP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86.png)
我们不想给客户端提供像 IMAP / SMTP 服务器那样的服务器名称beta.example.com
,而是想使用smtp.example.com
。
我们拥有所有域/电子邮件服务器和相应邮件服务器的数据库。有没有办法使用 nginx(或其他服务器/服务)作为反向代理?然后 nginx 应该将请求转发到正确的服务器。
非常感谢
答案1
无需nginx
在边界 SMTP 服务器前放置或任何其他形式的负载平衡器。如果配置不正确,可能会影响您成功投递邮件的能力。只需将您的服务器放在 DMZ 中即可。
传入流量将经过对话的一部分,然后您才能对其进行适当的路由。IMAP 用户将尝试登录。SMTP 服务器将处于命令状态RCPT TO
,并可能尝试将同一封邮件发送到您被列为 MX 的不同域。
通常使用名称来表示smtp01.example.com
服务器群。对于这些服务器中的每一个。您用于邮件服务器的域很少与服务器名称匹配。对于 SMTP、Web、IMAP、POP 等常见服务,除了主机名之外(或代替主机名),发布和使用服务名称也很常见。通过以相同优先级发布 MX 服务器来实现负载平衡。
- 在 DNS 中发布
A
邮件服务器 IP 地址的记录。AAAA
如果要支持 IPv6,还需添加邮件服务器 IPv6 IP 的记录。(如果要配置 IPv4 和 IPv6 支持,则需要两个 PTR 记录。) - 让您的 IP 提供商配置
PTR
记录以返回服务器的服务 (SMTP) 名称。这将使反向 DNS (rDNS) 验证能够正常工作。 - 配置您的邮件服务器以便在发送电子邮件时绑定到上述地址。
HELO
配置邮件服务器以使用服务名称作为其标识。这将允许 rDNS 验证在或命令上工作EHLO
。
考虑像每个 SMTP 服务器的 DNS 条目一样添加 SPF 记录v=spf1 a -all
。这将允许收件人验证此服务器是否打算发送邮件。(SPF 可用于验证服务器以及发件人。)
虽然 MX 服务器通常也是出站邮件服务器,但这并不是必须的。在电子邮件地址中使用的域的 SPF 记录中列出出站 SMTP 服务器(通常example.com
而不是george.example.com
)。
您的 SMTP 服务器应属于一个域。域的 MX 服务器不必位于同一个域中。如果您要配置多个域,请为邮件服务器选择一个服务器,并将其用于所有域。
在较大的安装中,边界(面向外部)SMTP 服务器通常会转发到内部邮件服务器以最终递送传入邮件。所有传出邮件都应发送到边界服务器进行递送。如果您已将传入 MX(邮件交换)服务器与传出 MTA(邮件传输代理)服务器分开,则传出邮件应通过传出 MTA 而不是 MX 服务器发送。MX
无论如何,将其包含在 SPF 记录中都是一个好主意。这将允许您的 MX 服务器发送延迟递送通知,而不会将邮件视为垃圾邮件。
对于漫游用户,您可能需要经过身份验证的 SMTP 访问权限,以允许用户发送电子邮件。最好在提交端口 (587) 上执行此操作,而不是在 SMTP 端口 (25) 上执行此操作。startTLS
连接后,应使用命令通过 TLS (SSL) 进行保护。身份验证应仅在加密连接上允许。这可以在上述配置的服务器上提供,也可以在提供 IMAP 访问的服务器上提供。
根据您的需要,您可以使用支持代理连接的 IMAP 服务器,或者仅允许用户连接到其域的服务器。通常使用服务域来实现此目的,通常是imap.example.com
或mail.example.com
。这些可以在 DNS 中配置为A
记录或CNAMES
。许多邮件客户端将自动正确配置为域的通用服务帐户。如果在配置期间输入 为用户,则[email protected]
软件可能会找到 、 和 等服务域。mail.example.com
对imap.example.com
IMAP 和 STMP 流量使用不同的服务名称是比较常见的。pop.example.com
smtp.example.com.