我已经设置了我的“postfix”服务器以使用 DKIM 签名外发邮件,并验证了它对于使用身份验证的 SMTP 用户来说工作正常。但是,“未送达通知”(即从服务器本身自动发送的邮件)未经签名,因此在转发过程中被某些收件人拒绝。究竟是什么系统发送这些邮件,通过哪个渠道,我如何更改配置以确保它们也经过签名?
与 DKIM 相关的部分/etc/postfix/main.cf
:
# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
OpenDKIM 配置文件/etc/opendkim.conf
:
Syslog yes
Logwhy yes
UMask 007
Canonicalization relaxed/simple
Mode sv
SubDomains no
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
Socket local:/var/spool/postfix/opendkim/opendkim.sock
PidFile /var/run/opendkim/opendkim.pid
OversignHeaders From
TrustAnchorFile /usr/share/dns/root.key
UserID opendkim
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList /etc/opendkim/trusted.hosts
InternalHosts /etc/opendkim/trusted.hosts
尽管未经签名,但未送达目的地的未送达通知的大多数标头如下:
Return-Path: <>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from mail.primary-domain.com
by mail.otherdomain.com (Postfix) with ESMTPS id CC9F8BB862
for <[email protected]>; [...date removed...]
Received: by mail.primary-domain.com (Postfix)
id 1073CBB8A8; [...date removed...]
Date: [...removed...]
From: [email protected] (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: [email protected]
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="D80F1BB862.1696269305/mail.primary-domain.com"
Message-Id: <[email protected]>
Content-Transfer-Encoding: 7bit
/etc/opendkim/trusted.hosts
:
127.0.0.1
localhost
.otherdomain.com
.primary-domain.com
/etc/opendkim/signing.table
:
*@otherdomain.com default._domainkey.otherdomain.com
*@*.otherdomain.com default._domainkey.otherdomain.com
*@primary-domain.com default._domainkey.primary-domain.com
*@*.primary-domain.com default._domainkey.primary-domain.com
更新
根据@NikitaKipriyanov 的建议,我增加了日志级别:
Syslog yes
LogWhy yes
MilterDebug 9
奇怪的是,这并没有产生有关任何传出消息的任何日志(无论是正确签名的“正常”消息,还是未经签名的 NDN)。
答案1
看完之后Postfix MILTER 自述文件更仔细地我发现了这样一段话:
对内部生成的退回邮件进行签名
Postfix 通常不会将内容过滤器应用于内部生成的邮件(如退回邮件或邮局长通知)。当过滤器拒绝邮件时,过滤内部生成的退回邮件会导致邮件丢失,因为由此产生的双重退回邮件几乎肯定会被阻止。
要签署 Postfix 自己的退回邮件,请启用内部生成的退回邮件过滤(下面的第 2 行),并且不要使用 non_smtpd_milters、header_checks 或 body_checks 拒绝任何内部生成的退回邮件(下面的第 3-5 行)。
1 /etc/postfix/main.cf: 2 internal_mail_filter_classes = bounce 3 non_smtpd_milters = don't reject internally-generated bounces 4 header_checks = don't reject internally-generated bounces 5 body_checks = don't reject internally-generated bounces
事实证明,这可能是 Postfix 配置问题。设置在main.cf
:
internal_mail_filter_classes = bounce
另一方面,man postconf
页面上有关于此选项的以下警告:
注意:启用 Postfix 生成的电子邮件内容检查通常不安全。用户会收到警告。
我认为警告的目的是再次提醒米尔特不得拒绝消息。确保它只签名。