我有一个Proxmox机器,它上运行着两个虚拟机,还有两个域,比如domainA.com和domainB.com。这两个域都指向Proxmox公共地址,而且我还设置了nginx来根据传入的域名向每个VM反向http通信。
网络看起来如下:
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做这件事时遇到了麻烦,我不确定这会不会奏效。
发布于 2021-02-17 14:19:51
邮件协议没有任何与HTTP的主机标头相当的内容,而虚拟主机和反向代理是基于它的。
任何“虚拟邮件托管”都是基于一个简单的事实,您可以将域名集成到邮件用户的用户名中。通过邮件服务器主机名来区分用户是不可能的,比如通过SMTP或IMAP或任何其他方式;在协议中,除了用户名之外,没有其他位置可以将域名放入其中。因此,反向代理需要知道用户名,即执行身份验证;但这不再仅仅是反向代理。
另外,我不知道任何类似于SNI的解决方案用于邮件协议,所以所有邮件“虚拟主机”只能使用相同的托管服务器的SSL证书。这意味着,根本不可能为不同的托管域使用不同的邮件服务器主机名,而证书中存在的其他主机名(在CN或SAN字段中)。
对于SMTP,有限地模拟反向代理是可能的。对于后缀,可以这样做:
main.cf中的D3设置中。当然,两个域的internet发件人都必须指向该系统(即所有域的MX必须设置为此中继主机名)。你最好给你的继电器一种方法过滤出无法到达的目的地。换句话说,中继必须始终知道目标服务器上邮箱的实际列表。这是为了减少垃圾邮件的负载和反向散射的概率(这比你想象的要重要得多!)例如,定期将终端服务器的邮箱数据库与其同步,并在中继主机上配置relay_recipient_maps。还记得我说的“不只是反向代理”吗?
/etc/postfix/transport文件中添加行:domainA.com smtp:[192.168.1.2]
domainB.com smtp:[192.168.1.3]方括号直接将后缀改为不执行MX查找,并直接使用指定的地址;它将直接连接到端口25以发送邮件。然后在transport_maps中将该文件指定为main.cf (参见Postfix如何正确地这样做)
https://serverfault.com/questions/1053966
复制相似问题