结构描述
- 服务器 A 运行 postfix 并充当服务器 B(也运行 postfix)的智能主机,reject_authenticated_sender_login_mismatch 已设置并(几乎)按预期工作,见下文
- 客户端 C 的 MUA 通过服务器 A 发送邮件
- B 和 C 都通过提交端口连接并使用 STARTTLS 进行身份验证
尝试伪造发件人时会发生什么
- 通过更改 thunderbird 中的发件人地址或在 roundcube 中添加新身份来设置任意 FROM:标头会导致预期结果:邮件被拒绝
- 在服务器 B 上使用 A 作为智能主机执行相同操作可成功发送邮件
mail -s "This is a Subject" -a "From: [email protected]"
观察到的差异
通过增加 postfix' smtpd 的详细程度,观察到以下情况
- thunderbird 和 roundcube 登录然后直接设置
FROM:
为可接受的值 服务器 B 以同样的方式启动,但不知何故
FROM:
后来设法更改了标头。这在 postfix smtpd 日志文件中看不到,但在最终发送的邮件中可以看到:Return-Path: <[email protected]> Delivered-To: [email protected] Received: from mail.example.com by mail.example.com (Dovecot) with LMTP id UuV2IVaP3lvdKAAAEby5rg for <[email protected]>; Sun, 04 Nov 2018 07:19:02 +0100 To: [email protected] Subject: This is a Subject From: [email protected] MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Message-Id: <[email protected]> Date: Sun, 4 Nov 2018 07:19:02 +0100 (CET) Authentication-Results: ORIGINATING; auth=pass [email protected] [email protected] body of your email
- 至少它不是(与有效邮件相反)DKIM 签名的
- 这不是垃圾邮件,我只是不希望“每个人”都能伪造发件人地址
问题
- 为什么会发生这种情况?
- 更重要的是:我能做些什么来防止这种情况发生?
答案1
这是预期的行为,因为 SMTP信封发件人和From:
header 是分开的。reject_sender_login_mismatch
(仅限经过身份验证的用户使用的版本)阻止在 SMTPMAIL FROM
命令中使用地址,除非它与经过 SASL 身份验证的所有者匹配。它不关心邮件内容 - 包括其标题。这就是电子邮件的设计方式,而且还有许多其他这种不匹配的正当理由。
使用时,mail -a
您单独修改标头。正如您所建议的那样,它之后不会更改。您无法使用 Thunderbird 执行此操作的唯一原因是它在信封和标头中使用相同的地址。它不受您的服务器限制。