Postfix
Forged FROM: header 儘管reject_authenticated_sender_login_mismatch
結構描述
- 伺服器 A 執行 postfix 並充當伺服器 B 的智能主機(也執行 postfix),reject_authenticated_sender_login_mismatch 已設置並(幾乎)按預期工作,見下文
- 客戶端 C 的 MUA 通過伺服器 A 發送郵件
- B 和 C 都通過送出埠連接並使用 STARTTLS 進行身份驗證
嘗試偽造發件人時會發生什麼
- 通過更改 Thunderbird 中的發件人地址或在 Roundcube 中添加新身份來設置任意 FROM: 標頭會導致預期結果:郵件被拒絕
- 在伺服器 B 上使用 A 作為 Smarthost執行相同操作
mail -s "This is a Subject" -a "From: forged_address@example.net"
會導致成功發送郵件觀察到的差異
通過增加 postfix’ smtpd 的詳細程度觀察到以下情況
- 雷鳥和圓形立方體登錄,然後直接將其設置
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
- 至少它不是(與有效郵件相反)DKIM 簽名的
- 這不是垃圾郵件,我只是不希望“每個人”都能偽造發件人地址
問題
- 為什麼會這樣?
- 更重要的是:我能做些什麼來防止它發生?
這是預期的行為,因為 SMTP信封發件人和
From:
標頭是不同的東西。(reject_sender_login_mismatch
以及僅限於經過身份驗證的使用者的版本)阻止在 SMTPMAIL FROM
命令中使用地址,除非它與經過 SASL 身份驗證的所有者匹配。它不關心消息中的內容——包括它的標題。這就是電子郵件的設計方式,而且這種不匹配也有許多合理的原因。使用時
mail -a
,您單獨修改標題。正如你所建議的那樣,它之後沒有改變。您不能使用 Thunderbird 執行此操作的唯一原因是它在信封和標題中使用相同的地址。它不受您的伺服器的限制。