使用 Postfix smtpd_sender_restrictions 拒絕電子郵件
我在阻止使用特定“發件人”地址發送的電子郵件時遇到了一些問題。電子郵件標題如下所示:
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 上)並使用
EHLO
或HELO
命令打開協商(以辨識自己)。如果這被接受,那麼它會發送一個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_checks
From:
規則和/或配置 Postfix 以使用外部Milter(“郵件過濾器”)程序。Subject: