伪造自:标头,尽管reject_authenticated_sender_login_mismatch

her*_*nes 3 postfix smarthost

结构描述

  • 服务器 A 运行 postfix 并充当服务器 B(也运行 postfix)的智能主机,reject_authenticated_sender_login_mismatch 已设置并按预期工作(几乎),请参见下文
  • 客户端C的MUA通过服务器A发送邮件
  • B 和 C 均通过提交端口连接并使用 STARTTLS 进行身份验证

尝试伪造发件人时会发生什么

  • 通过更改 Thunderbird 中的发件人地址或在 roundcube 中添加新身份来设置任意 FROM: 标头会导致预期结果:邮件被拒绝
  • 在使用 A 作为智能主机的服务器 B 上执行相同操作mail -s "This is a Subject" -a "From: forged_address@example.net"会导致成功发送邮件

观察到的差异

通过增加 postfix'smtpd 的详细程度观察到以下情况

  • Thunderbird 和 Roundcube 登录然后直接将 设为FROM:可接受的值
  • 服务器 B 以相同的方式启动,但随后设法更改FROM:标头。这在 postfix smtpd 日志文件中看不到,但在最终发送的邮件中看不到:

    Return-Path: <valid_address@example.com>
    Delivered-To: herrhannes@example.com
    Received: from mail.example.com 
    by mail.example.com (Dovecot) with LMTP id UuV2IVaP3lvdKAAAEby5rg
    for <herrhannes@example.com>; Sun, 04 Nov 2018 07:19:02 +0100
    To: herrhannes@example.com
    Subject: This is a Subject
    From: forged_address@example.com
    MIME-Version: 1.0
    Content-Type: text/plain; charset="UTF-8"
    Content-Transfer-Encoding: 8bit
    Message-Id: <20181104061902.15A9F4A9@debian.example.com>
    Date: Sun,  4 Nov 2018 07:19:02 +0100 (CET)
    Authentication-Results: ORIGINATING;
        auth=pass smtp.auth=valid_address@example.com 
    smtp.mailfrom=valid_address@example.com
    
    
    body of your email
    
    Run Code Online (Sandbox Code Playgroud)
    • 至少它没有(相对于有效邮件)DKIM 签名
    • 这不是垃圾邮件,我只是不希望“每个人”都能够伪造发件人地址

问题

  • 为什么会出现这种情况?
  • 更重要的是:我能做些什么来防止这种情况发生?

Esa*_*nen 5

这是预期的行为,因为 SMTP信封发件人From:标头是不同的东西。(该reject_sender_login_mismatch版本仅限于经过身份验证的用户)会阻止在 SMTPMAIL FROM命令中使用地址,除非该地址与经过 SASL 身份验证的所有者相匹配。它不关心消息 \xe2\x80\x93 中包含其标头的内容。电子邮件就是这样设计的,而且这种不匹配也有很多合理的原因

\n\n

使用时mail -a,您单独修改标题。正如您所建议的那样,之后它不会改变。无法使用 Thunderbird 执行此操作的唯一原因是它在信封和标头中使用相同的地址。它不受您的服务器的限制。

\n