如何让 clamassassin 在前面添加 X-Virus-* 标题而不是在后面添加它们?

如何让 clamassassin 在前面添加 X-Virus-* 标题而不是在后面添加它们?

ClamAV 的电子邮件病毒过滤包装器clamassassin将其标头附加到邮件标头。

X-Virus-Status: No
X-Virus-Checker-Version: clamassassin 1.2.4 with clamscan / ClamAV 1.0.3/27134/Mon Dec 25 11:40:06 2023

最好是任何 MTA 只传递消息添加到标题,如RFC 5322, 3.6建议:

但是,出于本规范的目的,在传输或转换消息时,不应重新排序标头字段。更重要的是,跟踪标头字段和重新发送标头字段不得重新排序,并且应保留在消息前面的块中。请参阅章节3.6.63.6.7了解更多信息。

例如,spamassassin将其X-Spam-*标题添加到现有标题之上。为什么clamassassin不这样做,以及如何改变此行为?例如,如果.procmailrc具有以下内容,我希望这些标题出现在同一个位置。

:0 fw
| clamassassin

:0 fw
| spamassassin

答案1

原因

clamassassin是一个在 2003 年至 2007 年间开发的旧 Shell 脚本,而RFC 5322是较新的,可以追溯到 2008 年。因此,的作者clamassassin詹姆斯·利克可能没有意识到这样的要求。

此外,clamassassin利用 Procmail 的formail(1) 邮件(重新)格式化程序用于添加标题。由于formail只有-a-A-i&-I都附加到标题中,因此如果不对脚本进行重大重写,就无法改变此行为。

解决方法

作为一个解决方法,我写了一个小脚本,mail-prepender.sh,可用于替换formail的用例clamassassin。它只是将所有给定的标头添加为任何这些标志,并保持其他所有内容不变。标志-x&-X也被实现为clamassassin用于从原始标头中-c -x提取标头。Subject

在基于 Debian 的系统上,该脚本是可配置的,/etc/default/clamassassin您可以通过其中添加此脚本的路径作为路径至formail例如,添加

FORMAIL=/usr/local/bin/mail-prepender.sh

结果

在 Debian 12 上进行了测试,其中标题的开头现在在干净的结果上看起来像这样:

Return-Path: <[email protected]>
X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on mail.example.net
X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,
        DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,SPF_PASS,USER_IN_DEF_DKIM_WL
        autolearn=ham autolearn_force=no version=4.0.0
X-Virus-Status: No
X-Virus-Checker-Version: clamassassin 1.2.4 with clamscan / ClamAV 1.0.3/27134/Mon Dec 25 11:40:06 2023

当 ClamAV 检测到某些内容时,标头如下所示:

Return-Path: <[email protected]>
X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on mail.example.net
X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,
        DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_PASS autolearn=ham
        autolearn_force=no version=4.0.0
X-Virus-Status: Yes
X-Virus-Report: Win.Test.EICAR_HDB-1 FOUND
X-Virus-Checker-Version: clamassassin 1.2.4 with clamscan / ClamAV 1.0.3/27132/Sat Dec 23 11:40:46 2023

相关内容