我有一台带有单个 Postfix 实例的机器,该实例托管不同的虚拟邮件域。
是否可以配置 Postfix,以便根据 SMTP 客户端用于连接到服务器的域使用不同的 TLS 服务器证书(具有不同的域名)?
我正在寻找类似于Apache基于SNI(服务器名称指示)的虚拟主机的功能。
我的(虚构的)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
解析203.0.113.1?my-cert-chain-for-2n-domain.pem
mail.my-1st-domain.tld
mail.my-2nd-domain.tld
不。SMTP 不包含任何 SNI 机制。正如 Steffen Ulrich 在评论中指出的那样,确实可以做到这一点,因为 STARTTLS 允许 SNI,而DANE(RFC7672)则需要这样做。Postfix 在最近的版本中使用
tls_server_sni_maps
配置指令支持这一点。映射文件只是一个带有域名的文件,后跟该域的一个或多个证书。
此外,您应该使用与您的 HELO/主机名匹配的证书,并且该证书必须与正向/反向 DNS 匹配,因此没有简单的方法可以使 HELO/EHLO 匹配任何自定义内容。这也不重要,因为任何人都不应该与 MX 记录相关;foo.example.org
如果邮件服务器是或则不相关gmail-smtp-in.l.google.com.
。但证书应与 DNS 名称匹配,并且 DNS 名称应具有有效的反向条目。