![具有 Postfix 和 SSL 的虚拟域](https://linux22.com/image/571063/%E5%85%B7%E6%9C%89%20Postfix%20%E5%92%8C%20SSL%20%E7%9A%84%E8%99%9A%E6%8B%9F%E5%9F%9F.png)
我有一个 Postfix 邮件服务器设置,用于托管多个虚拟域(比如xxx.com
和yyy.com
)。
用户将其外发邮件服务器配置为mail.xxx.com
和mail.yyy.com
。所有邮件服务器都指的是同一个物理 Postfix 服务器(同一个 IP,在此 Linux 服务器上运行的单个 Postfix 实例)。
Postfix 配置选项需要哪个 SSL 证书smtpd_tls_cert_file
?
或者我必须使用单个证书mail.xxx.com
并告诉用户yyy.com
将其用作mail.xxx.com
其发送服务器?这会打破独立虚拟服务器的假象。
[注意:这些域名是完全独立的。这些不是共享一个共同根的多个子域名]。
答案1
或者我是否必须对 mail.xxx.com 使用单个证书并告诉 yyy.com 的用户使用 mail.xxx.com 作为他们的发件服务器?
是的,最终您必须这样做,或者使用具有多个CommonName
或SubjAltName
属性的证书。
Postfix 无法知道客户端请求了哪个主机名。不存在Host
指示请求域的 HTTP/1.1 标头,并且 Postfix 不支持信噪比然而。
如果您确实需要为邮件服务器设置两个不同的域,则必须smtpd
在两个单独的网络接口/IP 地址上运行两个实例。通常,您只需选择一个“中立”域并告诉您的用户使用该域。
答案2
实际上...如果您希望每个域都使用有效的 SSL 证书,您有两种解决方案:使用多域证书,或将每个域设置在唯一的 IP 上。第一种解决方案很糟糕:这些证书通常非常昂贵(尽管您可以找到便宜的证书),它们会在同一证书上列出您希望认证的所有域,最重要的是,它们只颁发一次,因此仅添加一个新域就意味着获得一个全新的证书。
更好的解决方案是将每个域名放在其自己的 IP 上,然后将每个证书与其各自的 IP 匹配。
以下是在 Postfix 中执行此操作的方法。
您首先将每个域的证书放在在 /etc/postfix/目录(您也可以创建一个在 /etc/postfix/ssl/目录)注意:我使用 Plesk,它使用 .pem 证书文件,但您也可以使用 .key 和 .cer 文件(.pem 文件只是 .key 和 .cer 文件的组合,按此顺序)
然后,您需要修改主配置文件归档在 /etc/postfix/
最初,我的看起来像这样(可能是因为我在设置服务器后添加了最后 3 个 IP):
1.1.1.1- unix - n n - - smtp -o smtp_bind_address=1.1.1.1 -o smtp_bind_address6= -o smtp_address_preference=ipv4
2.2.2.2- unix - n n - - smtp -o smtp_bind_address=2.2.2.2 -o smtp_bind_address6= -o smtp_address_preference=ipv4
smtp inet n - n - - smtpd
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticate d,reject -o smtpd_sender_restrictions=
3.3.3.3- unix - n n - - smtp -o smtp_bind_address=3.3.3.3 -o smtp_bind_address6= -o smtp_address_preference=ipv4
4.4.4.4- unix - n n - - smtp -o smtp_bind_address=4.4.4.4 -o smtp_bind_address6= -o smtp_address_preference=ipv4
5.5.5.5- unix - n n - - smtp -o smtp_bind_address=5.5.5.5 -o smtp_bind_address6= -o smtp_address_preference=ipv4
现在,要将每个证书绑定到其对应的 IP,请执行以下操作:
1.1.1.1- unix - n n - - smtp -o smtp_bind_address=1.1.1.1 -o smtp_bind_address6= -o smtp_address_preference=ipv4
2.2.2.2- unix - n n - - smtp -o smtp_bind_address=2.2.2.2 -o smtp_bind_address6= -o smtp_address_preference=ipv4
3.3.3.3- unix - n n - - smtp -o smtp_bind_address=3.3.3.3 -o smtp_bind_address6= -o smtp_address_preference=ipv4
4.4.4.4- unix - n n - - smtp -o smtp_bind_address=4.4.4.4 -o smtp_bind_address6= -o smtp_address_preference=ipv4
5.5.5.5- unix - n n - - smtp -o smtp_bind_address=5.5.5.5 -o smtp_bind_address6= -o smtp_address_preference=ipv4
#smtp inet n - n - - smtpd
#smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
#submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions=
1.1.1.1:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert1.pem -o smtpd_tls_key_file=/etc/postfix/cert1.pem
1.1.1.1:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert1.pem -o smtpd_tls_key_file=/etc/postfix/cert1.pem
1.1.1.1:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert1.pem -o smtpd_tls_key_file=/etc/postfix/cert1.pem
2.2.2.2:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert2.pem -o smtpd_tls_key_file=/etc/postfix/cert2.pem
2.2.2.2:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert2.pem -o smtpd_tls_key_file=/etc/postfix/cert2.pem
2.2.2.2:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert2.pem -o smtpd_tls_key_file=/etc/postfix/cert2.pem
3.3.3.3:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert3.pem -o smtpd_tls_key_file=/etc/postfix/cert3.pem
3.3.3.3:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert3.pem -o smtpd_tls_key_file=/etc/postfix/cert3.pem
3.3.3.3:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert3.pem -o smtpd_tls_key_file=/etc/postfix/cert3.pem
4.4.4.4:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert4.pem -o smtpd_tls_key_file=/etc/postfix/cert4.pem
4.4.4.4:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert4.pem -o smtpd_tls_key_file=/etc/postfix/cert4.pem
4.4.4.4:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert4.pem -o smtpd_tls_key_file=/etc/postfix/cert4.pem
5.5.5.5:smtp inet n - n - - smtpd -o smtpd_tls_cert_file=/etc/postfix/cert5.pem -o smtpd_tls_key_file=/etc/postfix/cert5.pem
5.5.5.5:smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_tls_cert_file=/etc/postfix/cert5.pem -o smtpd_tls_key_file=/etc/postfix/cert5.pem
5.5.5.5:submission inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions= -o smtpd_tls_cert_file=/etc/postfix/cert5.pem -o smtpd_tls_key_file=/etc/postfix/cert5.pem
就是这样!(不要忘记注释掉上面所示的原始行)
PS:如果您使用 courier-imap,要对 POP/IMAP 执行相同操作,只需将这些 .pem 文件的副本放在/usr/share/courier-imap/(或者在 Plesk 中,你可以将它们放在/usr/共享/) 并将其命名为:imapd.pem.xx.xx.xx.xx pop3d.pem.xx.xx.xx.xx
其中 xx.xx.xx.xx 是相应的 IP 地址(这 2 个证书是同一文件的副本)
希望这可以帮助!