首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个公共IP地址上向不同域上的不同邮件服务器代理电子邮件

问在一个公共IP地址上向不同域上的不同邮件服务器代理电子邮件
EN

Server Fault用户
提问于 2021-02-17 12:06:45
回答 1查看 937关注 0票数 0

我有一个Proxmox机器,它上运行着两个虚拟机,还有两个域,比如domainA.com和domainB.com。这两个域都指向Proxmox公共地址,而且我还设置了nginx来根据传入的域名向每个VM反向http通信。

网络看起来如下:

代码语言:javascript
复制
proxmox with nginx = #public IP# and 192.168.1.1, domainA.com = 192.168.1.2, domainB.com=192.168.1.3)

我还想在每个VM上设置邮件服务器,并根据域名路由传入的邮件通信。例如,当我收到收件人test@domainA.com的邮件时,我希望将通信转发到192.168.1.2,当我收到与收件人test@domainB.com的邮件时,我希望将通信转发到192.168.1.3。

我怎样才能做到这一点?我在用nginx做这件事时遇到了麻烦,我不确定这会不会奏效。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-02-17 14:19:51

邮件协议没有任何与HTTP的主机标头相当的内容,而虚拟主机和反向代理是基于它的。

任何“虚拟邮件托管”都是基于一个简单的事实,您可以将域名集成到邮件用户的用户名中。通过邮件服务器主机名来区分用户是不可能的,比如通过SMTP或IMAP或任何其他方式;在协议中,除了用户名之外,没有其他位置可以将域名放入其中。因此,反向代理需要知道用户名,即执行身份验证;但这不再仅仅是反向代理。

另外,我不知道任何类似于SNI的解决方案用于邮件协议,所以所有邮件“虚拟主机”只能使用相同的托管服务器的SSL证书。这意味着,根本不可能为不同的托管域使用不同的邮件服务器主机名,而证书中存在的其他主机名(在CN或SAN字段中)。

对于SMTP,有限地模拟反向代理是可能的。对于后缀,可以这样做:

  1. 建立一个“反向代理”系统,将自己视为两个领域的中继。为此,需要将它们添加到main.cf中的D3设置中。当然,两个域的internet发件人都必须指向该系统(即所有域的MX必须设置为此中继主机名)。

你最好给你的继电器一种方法过滤出无法到达的目的地。换句话说,中继必须始终知道目标服务器上邮箱的实际列表。这是为了减少垃圾邮件的负载和反向散射的概率(这比你想象的要重要得多!)例如,定期将终端服务器的邮箱数据库与其同步,并在中继主机上配置relay_recipient_maps。还记得我说的“不只是反向代理”吗?

  1. 在此“反向代理”上设置传输映射,将每个域的邮件定向到适当的设置。这包括向/etc/postfix/transport文件中添加行:
代码语言:javascript
复制
domainA.com smtp:[192.168.1.2]
domainB.com smtp:[192.168.1.3]

方括号直接将后缀改为不执行MX查找,并直接使用指定的地址;它将直接连接到端口25以发送邮件。然后在transport_maps中将该文件指定为main.cf (参见Postfix如何正确地这样做)

  1. 在目标主机上设置MTA。它们是像往常一样配置的,只是您应该指定中继主机为受信任的中继主机,这样那些MTA的反垃圾邮件系统才能信任其接收到的: header (您不能信任由不受您控制的系统添加的任何接收到的:标头)。
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1053966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档