body_checks:如何过滤base64编码的内容?

body_checks:如何过滤base64编码的内容?

惯用的答案可能是“不要——先使用解码消息的过滤器”但正如我们在这个问题的第二个答案中看到的那样,应该也是可能的,body_checks这也是BUILTIN_FILTER_README@postfix.org说——这就是我想做的。

有一个问题困扰了我好久:

--===============6489786132958404869==
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SmFnIGhhciByZWRhbiBza3Jpdml0IHRpbGwgZGlnLCBtZW4gZHUgc3ZhcmFyIG1pZyBpbnRlLiBM
w6V0IG1pZyB2ZXRhLCBqYWcgaGFyIG7DpWdyYSBzYWtlciBhdHQgYmVyw6R0dGEuIEtvbnRha3Rh
IG1pZyBpIG1pbiBwcml2YXRhIGUtcG9zdDogaXJlbmUub3NiZXJnNzNAZ21haWwuY29tCg==

--===============6489786132958404869==--

为此,我添加了body_checks规则:

/SmFnIGhhciByZWRhbiBza3Jpdml0IHRpbGwgZGlnLCBtZW4gZHUgc3ZhcmFyIG1pZyBpbnRl/ REJECT Spam

但当它处于这样的一个阻塞状态时,它就无法捕捉到它。它捕捉到了当相同的字符串嵌入到body: <div dir="ltr"><pre class="gmail-moz-quote-pre"><pre>SmFnIHZpbGwgcHJhdGEgbWVkIGRpZywgbWVuIGRldCBmaW5ucyBmw7ZyIG3DpW5nYSBtZWRkZWxh</pre>但这是规则成功捕获此问题的唯一一次。我添加了不少此类base64编码规则,但当像上面一样嵌入时,它们都没有捕获任何内容。

在这个特殊情况下,编码base64总是完全相同的,所以我不需要做三次 base64来捕捉变体,就像我在其他情况下所做的那样:

/aHR0cHM6Ly9jbGNrLnJ1|dHRwczovL2NsY2sucnUv|dHBzOi8vY2xjay5y/ REJECT Please remove the link to clck.ru

当嵌入到像上面这样的块中时,上面的内容也不会捕获任何东西。

我尝试添加 main.cf环境

disable_mime_input_processing = yes

这似乎有所改善。它现在可以捕获其中一些,但不是全部,因此我可以手动验证应该捕捉漏掉的消息。

知道为什么这不起作用以及我该怎么办吗?我正在使用 3.6.4-1.fc35

答案1

有一个用于诊断后缀映射查找的内置功能,特别是对于body_checks。将您为 smtpd 清理服务配置的相同映射配置传递给实用postmap程序,并添加一个或多个-v以获取详细输出:

# postconf body_checks
body_checks=pcre:/etc/postfix/body.pcre
# cat known_bad.eml | postmap -v -b -q - pcre:/etc/postfix/body.pcre
...
postmap: dict_pcre_lookup: body.pcre: test line 1
postmap: dict_pcre_lookup: body.pcre: test line 2
postmap: dict_pcre_lookup: body.pcre: test line 3
test line 3 DUNNO

这将告诉您,对于每一行身体部位,地图中的哪个条目(如果有)与您的身体部位相匹配。

你的地图可能无法按照你预期的方式运行的一个可能原因是匹配范围太广,DUNNO结果先于你的预期REJECT spam结果,指示清理服务器继续处理下一行,而不是尝试进一步的表达式。

答案2

曾经陷入过同样的陷阱,阻止了所有以“<!DOCTYPE html”开头的电子邮件:)

如果是动态内容,您将很难在电子邮件中找到后续内容,但如果是静态内容,则对此类消息进行测试解码并重新编码重要部分可能有助于找到良好的匹配字符串。这样做的主要对手是换行符,换行符可能出现在任何地方,具体取决于匹配文本的位置。

我通常只在标题中进行 base64 匹配(主要是主题,UTF-8 标题倾向于以 base64 编码其主题),因为将标题分成多行是相当不寻常的(但仍然可能)。

您可能会在启用贝叶斯的情况下在 amavis 或 dspam(它们都使用 spamassassin)等外部实用程序中找到更好的帮助。这也将有助于解码部分,因为解码器内置于这些产品中。

相关内容