如何让 Postfix 使用 DKIM 签署未送达通知?

如何让 Postfix 使用 DKIM 签署未送达通知?

我已经设置了我的“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 生成的电子邮件内容检查通常不安全。用户会收到警告。

我认为警告的目的是再次提醒米尔特不得拒绝消息。确保它只签名。

相关内容