如何拒绝/检测声称来自我自己域的电子邮件?

use*_*061 6 sendmail spamassassin spf

我们有以下电子邮件拓扑:

Exchange server --------- Sendmail server ---------------Internet
Run Code Online (Sandbox Code Playgroud)

sendmail 服务器上没有任何用户邮箱,带有发件人地址的邮件user@my.domain.com只能从交换服务器到达,而不能从 Internet 到达。基于这一事实,我想通过拒绝从 Internet 传入并声称来自我自己的域 ( anyuser@my.domain.com) 的所有电子邮件来限制收到的垃圾邮件数量。

我已经为我的域配置了 SPF 记录,并在 sendmail 服务器上安装了 spfmilter、spamassassin 和 spamass-milter 包。它运作良好,但有两个问题:

  1. 如果在 SMTP 会话期间发件人在“ MAIL FROM:”命令中指定了错误地址,它将被拒绝,但发件人仍然可以发出另一个“ MAIL FROM:”命令,如果第二个地址被接受,则整个邮件也将被接受。我更喜欢发件人不应该有第二次机会,如果他最后指定了一个被 spfmilter 拒绝的地址,那么整个邮件应该被无条件拒绝。

  2. 如果发件人指定了有效地址(被 spfmilter 接受),它可以发出DATA命令,然后像这样“ From: <me@my.domain.com>”放一行(作为消息正文)。此行不是 SMTP 对话的一部分,但它成为邮件标题的一部分(我的 Outlook 将此地址显示为发件人地址)。所以我想配置一个 spamassassin 过滤器测试/规则,如果邮件头中给出的发件人地址与指定为 SMTP 对话的一部分的地址不匹配,它会将邮件标记为垃圾邮件(在 DATA 命令之后,拒绝邮件已经太晚了) ,但不知道如何做到这一点。

有什么建议?

Bil*_*hor 2

我使用配置了 mysql 的 Exim 来过滤我的电子邮件。我发现配置更容易完成。Sendmail 配置对我来说一直显得很神秘。

  1. 为了防止发件人更改 mail_from 身份并重试,您需要将其 IP 地址添加到黑名单并强制执行黑名单。如果您可以让过滤器断开连接而不是拒绝 mail_from,那么他们将需要重新连接以更改 mail_from 地址。我认为没有多少发件人会这样做。我会检查我的数据库并稍后更新。

  2. 以下规则将检查发件人地址是否在“example.com”域内。将这些行添加到您的 local.cf 文件中并重新启动 spamassassin。当您确信它正常工作时,请增加分数。这假定您没有使用 spamassassin 来发送电子邮件。

标头 LOCAL_FROM_HERE 来自 =~ /[.@]example.com/
LOCAL_FROM_HERE 得分 -0.75
描述 LOCAL_FROM_HERE From header 是本地地址

编辑:我对电子邮件数据数据库进行了一些查询。在 MAIL FROM 命令中使用本地地址的 2500 个连接中,只有 28 个使用非本地地址重试。仅拒绝在 MAIL FROM 命令中使用本地地址的失败率约为 1%。我没有发现服务器重新连接并尝试非本地地址的情况。

假设在 spamassassin 过滤邮件之前添加 Envelope_from 标头,这两个条件可以组合在 local.cf 中的单个黑名单条目中。同样,这假设您没有对外发电子邮件运行 spamassassin。

blacklist_from *@example.com

EDIT2:如果地址中使用了本地域,我会在 Exim 中使用 ACL 来拒绝 Mail From 命令。如果连接主机不是我认为的本地主机,则适用这一点。本地主机包括本地网络上的服务器、批准的中继以及在提交端口 (587) 上使用经过身份验证的连接的主机。