多年来,我一直在为家人的邮箱(总共 5 个邮箱)运行自己的邮件服务器(Ubuntu、Postfix、MySQL、Dovecot、Amavis、SpamAssassin 等)。我一直在尝试改进我的反垃圾邮件过滤器。今天我对此感到厌倦,决定采取更激进的措施并创建黑名单。使用 Postfix sender_access 设置,我将列入黑名单的电子邮件地址或主机名存储到我的 MySQL 数据库中。而且这工作得很好。我还编写了一个筛选脚本,将营销电子邮件移到另一个邮箱中,以将其与常规电子邮件区分开来。这在大多数情况下都有效(除非缺少 List-Unsubscribe 标头)。
但是我遇到了一个小问题。有时,postfix 用于 sender_access 的“发件人”地址与电子邮件的“发件人”标头不匹配 - 我知道这是完全正常的。但这很烦人,因为当将新地址列入黑名单时,我必须在日志文件中搜索原始“发件人”,而不是将电子邮件的可见“发件人”标头列入黑名单。
此外,有时我必须将整个电子邮件平台域列入黑名单。例如,来自“[电子邮件保护]“是通过电子邮件平台“serv1.mailing.newsletters.com”发送的。所以我必须将“mailing.newsletters.com”而不是“imaspammer.com”列入黑名单,并冒险将 HAM 电子邮件或新闻通讯列入黑名单。
有办法防止这种情况发生吗?我很确定 sender_access 需要原始的“from”,而且无法更改。那么我有什么选择呢?我正在考虑编写自己的 Perl 管道脚本。
多谢,
阿克塞尔
答案1
您需要使用信封发件人地址sender_access
。From:
标头很容易被伪造为任何内容,而 MTA 应该按原样传递邮件,仅在开头添加自己的行。
标题From:
应该(RFC 2822,3.6.2) 指定邮件的作者,即负责撰写邮件的人。另一个地址代表作者发送邮件是完全正常的,邮件列表就是一个例子,由于 SPF,无法使用该地址作为信封发件人。
当将新地址列入黑名单时,我必须在日志文件中搜索原始“发件人”
这只是部分正确。您也可以从电子邮件标题中找到信封发件人。它由在邮箱(即您的 Postfix)中传递邮件的 MTA 添加,名为Return-Path:
。