我在阻止使用特定“发件人”地址发送的电子邮件时遇到一些问题。电子邮件标头如下所示:
From: "Levi Spammer" <[email protected]>
我的后缀配置如下所示:
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
但从该地址发送的电子邮件并未被拒绝。正在交付中。我在这里做错了什么吗?
答案1
check_sender_access
规则适用于邮件传输协议信封FROM
地址(即从MAIL FROM:
SMTP协议协商阶段开始),不至于From:
标头在消息本身中。
这让很多不熟悉电子邮件和 SMTP 工作原理的人感到困惑,但重要的是要认识到信封FROM
地址与邮件标头完全不同且无关From:
(原因与现实世界发布的地址上写的地址几乎相同)信件的信封与信封内实际信件中的任何称呼或问候完全无关)。它们是两个完全独立且不相关的事物。顺便说一句,信封 FROM 地址通常称为全大写 FROM 或 FROM_(FROM 后跟下划线),而标头 From: 地址通常称为大小写混合的“From:”(包括:
) - 这有助于区分它们。
一个非常简单的总结STMP会话首先发送方计算机连接到接收方计算机(通常在端口 25 或 465 或 587 上)并使用EHLO
orHELO
命令打开协商(以识别自身)。如果接受,则会发送MAIL FROM:
命令。这是信封发件人(或FROM
)地址。如果接受,它将发送一个或多个RCPT TO:
列出消息收件人的语句。如果收件人计算机接受一个或多个收件人作为有效的目标地址,则发件人会发送一条DATA
命令,后跟消息本身(通常是一组消息头,如 From:、Date:、Subject: 等,后跟空行,然后消息的实际正文DATA
由单独的一行终止.
),并且使用该命令终止 SMTP 会话QUIT
。
请注意,标头 From: 地址可能与信封 FROM 地址相同,也可能非常相似(例如带有个人真实姓名等附加信息的信封地址),也可能完全不同(例如信封 FROM 地址)可能是邮件列表的地址,而标题 From: 包含原始发件人的地址)。
有关这两者之间差异的更多信息,请参阅信封 FROM 和标头 From 之间的差异的合理解释:合法原因 SMTP“MAIL FROM:”与 DATA 中的“From:”标头不匹配
无论如何,在了解了所有背景信息之后,如果您想将反垃圾邮件规则应用于邮件标头(例如PostfixFrom:
或Subject:
Postfix 中的邮件标头),则需要使用标头检查规则和/或配置 Postfix 使用外部米尔特(“邮件过滤器”)程序。
答案2
我有
check_sender_access hash:/etc/postfix/sender,
作为我的限制的一部分。
在我的sender
文件中,我有诸如
iamspammer.com 554 Spam not welcome here
[email protected] 554 Spam not welcome here
这将导致 554 错误(包括消息)出现在 SMTP 层。
构建此文件后,您需要构建哈希文件:
postmap sender
您最终应该得到sender.db
这就是所使用的文件。