我正在尝试为 Postfix SMTP 服务器设置 DKIM 电子邮件签名。
该服务器将由本地网络上的不同服务使用。
我已经生成了 DKIM 密钥对,将其添加到我的域,并且能够成功地从服务器本身发送电子邮件,如下所示:
me@server:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.lan ESMTP Postfix (Ubuntu)
HELO example.com
250 server.lan
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
To:[email protected]
Subject:Testing from server
hello
.
250 2.0.0 Ok: queued as AAD604EA1CC2
该消息已收到,并带有正确的 DKIM 签名。
但是,如果我在本地网络上的另一台机器上执行完全相同的操作(仅限telnet server.lan 25
),则不会包含 DKIM 签名,并且收件人不知道是谁发送了电子邮件。
我发现这个条目/var/log/mail.log
与此相关:
Jul 30 04:28:16 server opendkim[25664]: AAD604EA1CC2: can't determine message sender; accepting
所以我认为 postfix 没有FROM
正确设置地址。那么它为什么没有这样做?我该如何修复它?
提前致谢...
工作站交易过程中的整个日志如下:
Jul 30 15:56:29 server postfix/smtpd[6795]: warning: database /etc/aliases.db is older than source file /etc/aliases
Jul 30 15:56:29 server postfix/smtpd[6795]: connect from workstation.lan[192.168.1.63]
Jul 30 15:57:24 server postfix/smtpd[6795]: 2C35E4EA1DD1: client=workstation.lan[192.168.1.63]
Jul 30 15:58:18 server postfix/cleanup[6799]: 2C35E4EA1DD1: message-id=<>
Jul 30 15:58:18 server opendkim[25664]: 2C35E4EA1DD1: can't determine message sender; accepting
Jul 30 15:58:18 server postfix/qmgr[25810]: 2C35E4EA1DD1: from=<[email protected]>, size=272, nrcpt=1 (queue active)
Jul 30 15:58:19 server postfix/smtp[6802]: 2C35E4EA1DD1: to=<[email protected]>, relay=ASPMX.L.GOOGLE.COM[173.194.70.26]:25, delay=67, delays=66/0.02/0.26/1.1, dsn=2.0.0, status=sent (250 2.0.0 OK 1343656739 a59si1127667wel.70)
Jul 30 15:58:19 server postfix/qmgr[25810]: 2C35E4EA1DD1: removed
答案1
MTA 从不负责设置邮件头;这是您的邮件客户端或 MUA 的问题。
也就是说,如果 postfix 检测到没有任何 From: 标头的消息,它会将 MAIL FROM 发件人地址添加为 From: 标头;这有据可查。
答案2
我刚刚遇到这个问题并解决了它。这里的关键是邮件日志中的一行:“无法确定邮件发件人;正在接受”。问题是收到的邮件格式不正确,并且缺少 opendkim 执行 DKIM 所需的一些 RFC 必需的标头。
默认情况下,opendkim 配置为允许这些消息通过,因为它无法使用可用信息执行任何操作,既无法确认也无法否认该消息已通过 DKIM,并且它谨慎行事,决定不丢弃消息,除非明确配置。
使用 telnet 发送邮件时触发此问题的原因是,您没有输入 opendkim 期望的所有 RFC 要求的标头。如果您添加了它们(具体来说,opendkim 似乎只检查 From 和 Date 标头,而似乎根本不关心 Date 标头实际包含的内容)
如果您愿意丢弃所有违反 RFC 且缺少发件人或日期标头的邮件,您可以进入 opendkim.conf 并更改或添加“RequiredHeaders yes”行。这样做可能相当安全,因为即使大多数垃圾邮件都能正确完成这些操作,但丢弃邮件时始终存在一些合法邮件也可能被丢弃的风险。
答案3
可能很多人在通过 telnet 手动与 SMTP 服务器交互来测试他们刚安装的 Postfix 时偶然发现了这个问题,一旦通过身份验证,他们就会执行如下操作:
...
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Hi there
this is just a basic test message
.
250 2.0.0 Ok: queued as 2E7FB27F
这导致接收端看到“dkim=permerror(错误消息/签名格式)”,并因此产生负的垃圾邮件分数。
其他回复可能不太清楚,所以我将用粗体和简单的英语重申这一点:From:
您有责任在您的data
部分中添加以便 DKIM 触发!也就是说,您的消息必须包含From:
(理想情况下也包含To:
和Subject:
,但这并不重要):
... 邮件发件人:[电子邮件保护] 250 2.1.0 确定 收件地址:[电子邮件保护] 250 2.1.5 确定 数据 354 以 结束数据。 从:[电子邮件保护] 到:[电子邮件保护] 主题:测试 你好呀 这只是一个基本的测试消息 。 250 2.0.0 确定:排队为 2E7FB27F
答案4
将其添加到 postfix 配置中:
always_add_missing_headers = 是
local_header_rewrite_clients = permit_mynetworks permit_sasl_authenticated permit_inet_interfaces