Postfix - 被发件人而不是发件人阻止

Iai*_*own 5 postfix sieve cyrus

我有大量传入的垃圾邮件伪装成由我发送,但在某个任意垃圾邮件发送者域中有一个发件人。例如

Return-Path: <admin@aiuw.com>
... (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: admin@aiuw.com)
    by Server22.lejj.com (Postfix) with ESMTPSA id B527943151
...
To: iain@example.com
From: <iain@example.com>
Run Code Online (Sandbox Code Playgroud)

postfix 的发件人是 admin@aiuw.com,但是当它交给 Cyrus-IMAP 时,它似乎是由我发送的,这意味着它已存入我认可的发件人收件箱。

我想阻止来自我的域的所有传入邮件(传出使用 TLS + SMTP AUTH,并绕过检查,所以我不担心阻止自己),但由于发件人地址不是来自我的域,我不能不要使用发件人拒绝规则或 SPF 来做到这一点 - 这些作用在 aiuw.com,而不是 example.com。

我猜没有办法让 Postfix 将 From 行作为信封信息的一部分来处理。是这样,还是我错过了什么?

如果不是,那么 Postfix 和 Cyrus-IMAP 之间的过滤器可以同时捕获发件人和发件人地址并拒绝不匹配吗?或者,最后,一种在 Sieve 脚本中检查发件人地址的方法,尽管我认为这会很快变得丑陋。

如果这是重复的,请道歉。我找到了几个点击,但我看到的一切都是基于信封发件人,而不是发件人。

ARi*_*ker 6

----- START EDIT (2021-12-04) -----

虽然我之前的答案确实有效,但如果您设置 OpenDKIM 和 OpenDMARC,并为您的域提供严格的 DMARC 策略,指示每个人(以及您自己)拒绝所有“欺诈”邮件,那就更好了。这样,您就可以防止其他人冒充您,并通过严格的 DMARC 政策确保其他人获得同样的保护。

这将阻止欺诈性From:标头,因为 DKIM 是一种以加密方式对特定标头值和消息正文进行签名的东西,公钥位于 DNS 中,确保消息内容确实来自指定域。

即使没有 DKIM,您也可以设置 DMARC 策略,告诉每个人From:标头也应该遵循 SPF 检查,并使用 OpenDMARC milter 自行强制执行。

相关阅读:

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_checkspostfix 配置。如果我们将其设置为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
Run Code Online (Sandbox Code Playgroud)

由于我的 SMTP 服务器接收domain1.com和 的邮件domain2.com,因此它将拒绝所有带有这些域的传入邮件。尽管您只想对 SMTP 端口 (25) 执行此操作,而不是对提交端口 (587) 执行此操作,否则会阻止您的域的合法使用。为此,请编辑您的master.cf,并添加-o header_checks=regexp:/etc/postfix/header_checks到以 开头的行下smtpheader_checks您还可以在端口设置下指定不同的文件submission,以为经过身份验证的用户强制执行不同的标头规则。

主要问题header_checks是它一次只检查一个标头。另一种解决方案是使用content_filter,它将消息视为一个整体。我第一次发现这一点是在尝试减轻所有From:传入邮件的标头欺诈行为时,这使我找到了这个简洁的 bash 脚本。尽管您可以以此为起点来创建您选择的任何过滤器,但能够在发送之前智能地检查整个电子邮件(假设其内容未加密)是一件非常强大的事情。

希望我的信息有所帮助,也许我们可以一起创建完美的欺诈拒绝工具:)


Iai*_*own 1

我想我终于可以回答我自己的问题了。我仍然希望能够捕获信封发件人和邮件发件人以拒绝 SMTP 事务中的邮件,如果有人能提出更好的解决方案,我将不胜感激。

但是,信封和邮件发件人都可以进行筛选,因此有一种方法可以删除传入的垃圾邮件:

require ["envelope", "fileinto"];

if address :domain "From" "example.org" {
   if not envelope :domain "From" "example.org" {
      fileinto "Trash";
      stop;
   }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果电子邮件声称来自我的域,但信封地址不是我的域,则会被丢弃。

我使用的信封文档: https: //support.tigertech.net/sieve