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

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

Exchange server --------- Sendmail server ---------------Internet 

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

我为我的域configuration了SPFlogging,并在sendmail服务器上安装了spfmilter,spamassassin和spamass-milter软件包。 它运作良好,但有两个问题:

  1. 如果在SMTP对话期间发送者在“ MAIL FROM: ”命令中指定了不良地址,则它将被拒绝,但是发送者仍然可以发出另一个“ MAIL FROM: ”命令,并且如果该第二个地址将被接受,则整个消息也将被接受。 我更希望发件人不应该有第二次机会,如果他最后指定了一个被spfmilter拒绝的地址,则应该无条件地拒绝整个邮件。

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

有什么build议么?

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

  1. 为了防止发件人更改mail_from标识并重试,您需要将其IP地址添加到黑名单并强制执行黑名单。 如果您可以让filter删除连接而不是拒绝mail_from,那么他们将需要重新连接来更改mail_from地址。 我不认为很多发件人会这样做。 我会检查我的数据库并稍后更新。

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

 标题LOCAL_FROM_HERE From =〜/[.@]example.com/
得分LOCAL_FROM_HERE -0.75
描述LOCAL_FROM_HERE从头是本地地址 

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

假设在spamassassin过滤消息之前添加了Envelope_from头,两个条件都可以合并到local.cf中的单个黑名单条目中。 再次假设您不要在外发电子邮件上运行spamassassin。

  blacklist_from *@example.com 

编辑2:我在Exim中使用ACL来拒绝邮件发送命令,如果在地址中使用本地域。 这适用于连接主机不是我认为是本地的主机。 本地主机包括本地networking上的服务器,批准的中继器以及在提交端口上使用经authentication的连接的主机(587)。

使用DKIM 。 它像SPFlogging,但它显示公钥。 您的服务器使用私钥从您的域名邮件中签名

 identificator._domainkey.mydomain.com. IN txt "/*spf*/" +" v=DKIM1; k=rsa; p=MIG......endofkey" //BIND9 

并在ACL设置来validation所有来自你的域的传入邮件的DKIM签名

Dkim是为了解决你的问题而开发的(钓鱼:))

+1的问题。

这听起来像是一个非常普遍的情况,应该有大量的sendmail插件。

当然,你应该有dkim-milterspfmilter ,但是他们并没有解决这个确切的问题,这听起来很简单,只要添加你自己的filter来拒绝任何类似egrep -e '^From: *@my.domain.com'邮件。 egrep -e '^From: *@my.domain.com'

DKIM非常好,但是如果邮件没有签名,由于签名不好,不能让它失败。 那么你必须失败,因为它没有签名, 声称是从你的域名。