后缀中的 Regexp header_checks 匹配多行

后缀中的 Regexp header_checks 匹配多行

这是我的 /etc/postfix/main.cf header_checks 行:

header_checks = regexp:/etc/postfix/maps/header_checks

以下是 header_checks:

/From:.*email@my\.com.(\n|.)*?To:.*email@my\.com./     DISCARD

以下是我尝试匹配的电子邮件标题的一部分:

Received: from localhost (localhost [127.0.0.1])
    by mail.server.com (Postfix) with ESMTP id 690649204C0
    for <[email protected]>; Mon,  7 Nov 2022 13:27:00 -0600 (CST)
From: "White Carb Tricks" <[email protected]>
To: "email" <[email protected]>
Subject: Clear artery-blocking plaque overnight
Date: Mon, 7 Nov 2022 09:42:42 -0600

正如您所看到的,我正在尝试匹配垃圾邮件发送者伪造的“发件人”和“收件人”以使其看起来像是用户发送的。

如果我通过在线正则表达式工具测试 header_checks 中的正则表达式,它会匹配我想要的“发件人”和“收件人”行。

正则表达式在应用于完整电子邮件标头时产生一个匹配项

当我做:

postmap -q $'From: "White Carb Tricks" <[email protected]>\r\nTo: "email" <[email protected]>' regexp:/etc/postfix/maps/header_checks

它按预期返回“DISCARD”。

当我将标题文本粘贴到测试文件中并像这样测试时:

postmap -q - regexp:/etc/postfix/maps/header_checks < /etc/postfix/maps/regex-test 

...它返回空白。

我应该注意,Postfix 也不会丢弃它们。用户会继续收到电子邮件。

我也在 master.cf 中更改了这一点:

-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings

-o receive_override_options=no_unknown_recipient_checks,no_address_mappings

...基于我读过的另一个帖子。

你知道我做错了什么吗?是我的 header_checks 中的正则表达式吗?

答案1

它不是那样工作的,正如记录所言man 5 header_checks(重点是我的):

注意:检查邮件标题一次一个逻辑头,即使邮件头跨越多行。正文行始终一次检查一行。

您可以通过调用 postmap 来测试这一点,其目的是:

# does not mimic header_checks, trues the whole lookup key.
postmap -q $'HA: value\r\nHB: value2' regexp:header_checks.pcre
# does mimic header_checks, one header (including continuation) at a time:
postmap -h -q $'HA: value\r\nHB: value2' regexp:header_checks.pcre

如果您想一次匹配多个标头,请插入适合此目的的工具。针对垃圾邮件反击用例的热门选择包括 SpamAssassin(已过时,但仍有效)和 Rspamd。

如果你想让人们停止使用你的域名,查看DMARC

相关内容