我收到大量伪装成我发送的垃圾邮件,但发件人位于某个任意垃圾邮件发送者域中。例如
Return-Path: <[email protected]>
... (stuff elided, etc.)
Received: from [static-93.0.72.177-ttvi.com.br] (unknown [177.72.0.158])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
(Authenticated sender: [email protected])
by Server22.lejj.com (Postfix) with ESMTPSA id B527943151
...
To: [email protected]
From: <[email protected]>
发件人为[电子邮件保护],但当它交给 Cyrus-IMAP 时,它似乎是由我发送的,这意味着它被存入了我识别的发件人收件箱中。
我想阻止来自我的域的所有传入邮件(发送使用 TLS + SMTP AUTH,并绕过检查,所以我不担心阻止自己),但由于发件人地址不是来自我的域,我无法使用发件人拒绝规则或 SPF 来执行此操作 - 这些作用于 aiuw.com,而不是 example.com。
我猜没有办法让 Postfix 将发件人行作为信封信息的一部分来处理。是这样吗,还是我遗漏了什么?
如果不行,那么 Postfix 和 Cyrus-IMAP 之间的过滤器如何,可以捕获发件人和发件人地址并拒绝不匹配的地址?或者,最后,在 Sieve 脚本中检查发件人地址的方法,尽管我认为这很快就会变得很糟糕。
如果这是重复的,请见谅。我找到了几个匹配项,但我看到的所有内容都是基于信封发件人,而不是发件人。
答案1
----- START EDIT (2021-12-04) -----
虽然我之前的回答确实有效,但最好设置 OpenDKIM 和 OpenDMARC,并为您的域提供严格的 DMARC 策略,指示每个人(以及您自己)拒绝所有“欺诈性”邮件。这样,您就可以防止其他人冒充您和通过严格的 DMARC 政策确保受到来自他人的相同保护。
这将阻止欺诈性From:
标头,因为 DKIM 是一种对特定标头值和消息正文进行加密签名的东西,其中公钥位于 DNS 中,确保消息内容确实来自指定的域。
即使没有 DKIM,您也可以设置 DMARC 策略,告诉每个人From:
标头也应遵循 SPF 检查,并使用 OpenDMARC 过滤器自行强制执行。
相关阅读:
https://mxtoolbox.com/dmarc/details/dmarc-tags
https://petermolnar.net/article/howto-spf-dkim-dmarc-postfix/
https://www.cyberpunk.rs/dmarc-postfix-setup
http://www.trusteddomain.org/opendmarc/opendmarc.conf.5.html
http://www.opendkim.org/opendkim.conf.5.html
请注意,如果您的 postfix 在 chroot 模式下运行(在 ubuntu 中显然如此),unix 套接字必须位于 /var/spool/postfix
----- END EDIT (2021-12-04) -----
我自己也对此做了一些研究,并找到了一些从“收件箱前”角度解决这个问题的方法。
如果您的接收 SMTP 服务器与用户提交外发邮件的服务器相同,那么首先,我们需要获得header_checks
postfix 配置。如果我们将其设置为pcre:/etc/postfix/header_checks
,它将根据该文件中的正则表达式检查每个标题行。以下是我在该文件中的内容:
/^(From|Sender|Reply-To)\: .*\@domain1\.com/ REJECT stop impersonating me
/^(From|Sender|Reply-To)\: .*\@domain2\.com/ REJECT stop impersonating me
由于我的 SMTP 服务器接收来自 和 的邮件domain1.com
,domain2.com
因此它将拒绝来自这些域的所有传入邮件。不过,您只想对 SMTP 端口 (25) 执行此操作,而不是提交端口 (587),否则它将阻止您域的合法使用。为此,请编辑您的master.cf
,并-o header_checks=regexp:/etc/postfix/header_checks
在以 开头的行下添加smtp
。您还可以在端口设置下指定不同的header_checks
文件submission
,以对经过身份验证的用户强制执行不同的标头规则。
的主要问题header_checks
是它一次只检查一个报头。另一个解决方案是使用content_filter
,它将消息作为一个整体来查看。我第一次发现这个问题是在尝试减轻针对From:
报头欺诈的攻击时全部收到的邮件,这让我这个简洁的 bash 脚本。虽然您可以用它作为起点来创建您选择的任何过滤器,但能够在传递之前智能地检查整个电子邮件(假设其内容未加密)是非常强大的。
希望我的信息有所帮助,也许我们可以一起创造出完美的拒绝欺诈工具:)
答案2
我想我终于可以回答我自己的问题了。我仍然希望能够捕获信封发件人和邮件发件人,以拒绝 SMTP 事务中的邮件,如果有人能提出更好的解决方案,我将不胜感激。
但是,信封和邮件发件人都可以进行筛选,因此有一种方法可以删除传入的垃圾邮件:
require ["envelope", "fileinto"];
if address :domain "From" "example.org" {
if not envelope :domain "From" "example.org" {
fileinto "Trash";
stop;
}
}
因此,如果电子邮件声称来自我的域,但信封地址不是我的域,则会被丢弃。
我使用的信封上的文件:https://support.tigertech.net/sieve