Postfix

使用 Postfix smtpd_sender_restrictions 拒絕電子郵件

  • April 27, 2022

我在阻止使用特定“發件人”地址發送的電子郵件時遇到了一些問題。電子郵件標題如下所示:

From: "Levi Spammer" <lspammer@iamspammer.com>

我的後綴配置如下所示:

smtpd_sender_restrictions =
       permit_mynetworks,
       check_sender_access hash:/etc/postfix/access_hash,
       check_sender_access pcre:/etc/postfix/access.pcre,
       permit

我在 access_hash 文件中有這個條目:

iamspammer.com     REJECT

這在 access.pcre 中:

/iamspammer.com/   REJECT

但是從該地址發送的電子郵件並未被拒絕。它正在傳遞中。我在這裡做錯了嗎?

check_sender_access規則應用於**SMTP信封FROM地址**(即從MAIL FROM:SMTP 協議協商階段),而不是消息本身的**From:標頭**。

這讓很多不熟悉電子郵件和 SMTP 工作原理的人感到困惑,但重要的是要意識到信封FROM地址與郵件標題完全不同且無關From:(原因與寫在現實世界中的地址幾乎相同)信的信封與信封內實際信件中的任何稱呼或問候完全無關)。它們是兩個完全獨立且不相關的事物。順便說一句,信封 FROM 地址通常稱為全大寫 FROM 或 FROM_(FROM 後跟下劃線),而標頭 From: 地址通常稱為混合大小寫的“From:”(包括:) - 這有助於區分它們。

一個非常簡化的STMP 會話摘要始於發送方機器連接到接收方機器(通常在埠 25 或 465 或 587 上)並使用EHLOHELO命令打開協商(以辨識自己)。如果這被接受,那麼它會發送一個MAIL FROM:命令。這是信封發件人(或FROM)地址。如果接受,它會發送一個或多個RCPT TO:聲明,列出消息的收件人。如果收件人機器接受一個或多個收件人作為有效的目標地址,則發件人然後發送一個DATA命令,後跟消息本身(通常是一個消息標題塊,如 From:、Date:、Subject: 等,後跟一個空行,然後是消息的實際正文。DATA塊由 a.本身終止),並且 SMTP 會話由該QUIT命令終止。

請注意,標頭 From: address 可能與信封 FROM 地址相同,也可能非常相似(例如,信封地址帶有其他資訊,例如人的實際姓名),也可能完全不同(例如信封 FROM 地址可能是郵件列表的地址,而標頭 From: 包含原始發件人的地址)。

有關這兩件事之間差異的更多資訊,有合理的解釋信封 FROM 和標頭 From: at Legitimate reason SMTP “MAIL FROM:” will not match “From:” Header in DATA


無論如何,在所有這些背景資訊之後,如果您想將反垃圾郵件規則應用於Postfix 之類的郵件標頭,您需要使用header_checksFrom:規則和/或配置 Postfix 以使用外部Milter(“郵件過濾器”)程序。Subject:

引用自:https://unix.stackexchange.com/questions/700450