![Postfix 客户端证书信息未传递给 opendkim milter](https://linux22.com/image/765732/Postfix%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%81%E4%B9%A6%E4%BF%A1%E6%81%AF%E6%9C%AA%E4%BC%A0%E9%80%92%E7%BB%99%20opendkim%20milter.png)
我有一个私人 postfix 服务器,它使用 dovecot sasl 来选择性地验证提交客户端,并且我正在尝试将其设置为接受客户端证书,以允许它充当某些特定原始服务器的中继主机。
我已经基本让它工作了,但是遇到了一个小问题,opendkim milter 无法将证书认证的中继连接识别为内部或经过认证的,因此它不会添加 DKIM 签名。
在main.cf中:
milter_default_action = accept
smtpd_milters = inet:opendkim:8891
non_smtpd_milters = inet:opendkim:8891
smtpd_tls_CAfile = /path/to/private-ca-cert.pem
tls_append_default_CA = no
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_tls_all_clientcerts,reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_tls_all_clientcerts,reject_unauth_destination
在 master.cf 中的 submission/inet 下:
-o smtpd_client_restrictions=permit_sasl_authenticated,permit_tls_all_clientcerts,reject
-o smtpd_tls_ask_ccert=yes
以上所有功能均正常运行,并且允许提供由我的私人 CA 签名的有效证书的连接进行中继访问。
然而,这些中继的电子邮件并未经过 opendkim 签名 - 相反,opendkim milter 记录了以下内容:
external host [host.that.connected.with.cert] attempted to send as [mydomain.com]
我知道我可以使用 opendkimExternalIgnoreList
配置,但由于这些主机位于动态 IP 上,这不是一个理想的解决方案,而且我正在寻找一种可以接受任何主机的解决方案,就像它接受通过 SASL 验证的提交连接从任何邮件客户端发送的邮件一样。
我相信我已经将其追溯到{auth_authen}
milter 用来确定邮件是否来自经过身份验证的连接的宏……postfix 仅将该宏设置为 sasl 用户名。
有什么方法可以扩展功能{auth_authen}
或添加新宏(使用 opendkim 的MacroList
配置)以表明使用了有效的客户端证书?
答案1
因为无论如何你只接受经过身份验证的邮件,所以你不需要传递有关使用哪种方法的信息opendkim- 仅(布尔)区分具有强制身份验证(签名)的端口和不提供身份验证(验证)的端口。
您可以-o milter_macro_daemon_name=whatever
设置master.cf
让opendkim知道哪些邮件应该签名。否则该宏将默认为$myhostname
,但通过使用(任意,opendkim 不关心)不同的您可以区分仅验证端口和强制身份验证端口的值。
文档建议使用ORIGINATING
并VERIFYING
使其非常明显。然后MacroList
您opendkim.conf
可以检查是否daemon_name
等于您设置的内容。