我有一台带有单个 Postfix 实例的机器,它托管不同的虚拟邮件域。
是否可以根据 SMTP 客户端用于连接服务器的域配置 Postfix,使其使用不同的 TLS 服务器证书(具有不同的域名)?
我正在寻找类似于基于 SNI(服务器名称指示)的 Apache 虚拟主机的功能。
我的(虚构的)DNS配置如下
host12345678.my-hoster.tld. IN A 203.0.113.1
1.113.0.203.in-addr.arpa. IN PTR host12345678.my-hoster.tld.
mail.my-1st-domain.tld. IN CNAME host12345678.my-hoster.tld.
my-1st-domain.tld. IN MX 10 mail.my-1st-domain.tld.
mail.my-2nd-domain.tld. IN CNAME host12345678.my-hoster.tld.
my-2nd-domain.tld. IN MX 10 mail.my-2nd-domain.tld.
我的(虚构的)Postfix 配置如下
myhostname = host12345678.my-hoster.tld
mydomain = host12345678.my-hoster.tld
myorigin = $myhostname
mydestination = $myhostname
virtual_mailbox_domains = my-1st-domain.tld my-2nd-domain.tld
virtual_mailbox_maps = ldap:/etc/postfix/ldap-virtual-mailboxes.cf
virtual_transport = lmtp:unix:/run/dovecot/dovecot-lmtp
如何向 Postfix 添加不同的 TLS 证书,以便它使用my-cert-chain-for-1st-domain.pem
或my-cert-chain-for-2n-domain.pem
取决于客户端是否使用mail.my-1st-domain.tld
或mail.my-2nd-domain.tld
解析 203.0.113.1?
答案1
不。SMTP 不包含任何 SNI 机制。
正如 Steffen Ulrich 在评论中指出的那样,确实可以做到这一点,因为 STARTTLS 允许 SNI 和丹麦(RFC7672)需要这个。
Postfix 在最近的版本中支持此功能,使用tls_server_sni_maps
配置指令。
映射文件只是一个带有域名的文件,后面跟着该域的一个或多个证书。
此外,您应该使用与您的 HELO/主机名匹配的证书,并且该证书必须与正向/反向 DNS 匹配,因此没有简单的方法可以让 HELO/EHLO 匹配任何自定义内容。
这也无关紧要,因为没有人应该与 MX 记录相关;邮件服务器是否是foo.example.org
或并不重要gmail-smtp-in.l.google.com.
。但证书应该与 DNS 名称匹配,并且 DNS 名称应该具有有效的反向条目。