Spamassassin - 按发送时间计分

Spamassassin - score by time of day sent

有没有办法为特定时间段内发送的邮件分配分数。我发现很多垃圾邮件是在半夜发送的,所以想给凌晨 2 点到 5 点之间的任何内容打 2 分或 3 分。

您可以使用 SpamAssassin 来惩罚在特定时间内收到的邮件,但它很乱。

在我们开始之前,请验证 SA 的主要防御是否已正确设置:

如果这还不够,那么您可以解决您要解决的问题。尝试:

如果所有这些都不能提供足够的帮助,那么(并且只有到那时)您可以考虑您的提议。继续阅读。


不要忘记时区。因此,您不能使用 Date header。 这种类型的规则对于具有跨越太多时区的对话的部署是不安全的,并且您必须确保 MX 记录服务器全部一致且位于同一时区。请注意,daylight savings(又名“夏令时”)在这里可能很烦人。

确定您的接收基础设施添加但添加在之前 SpamAssassin 运行s 的中继(以便 SA 可以看到它)。这将显示为电子邮件顶部附近的 Received header。再次确保它对 SpamAssassin 确实可见;您的 IMAP 服务器添加的 Received header 将不可见。

您可能已将 SpamAssassin 配置为 运行 将任何内部中继标记到邮件中之前。 如果是这种情况,请不要继续,因为您无法可靠地确定当地时间

好的,抛开所有注意事项,这是一个已收到的示例 header:

Received: from external-host.example.com
        (external-host.example.com [198.51.100.25])
        by mx.mydomain with ESMTPS id ABC123DEF456;
        Fri, 13 Mar 2020 12:34:56 -0400 (EDT)

这必须是header您的系统添加的header之一,否则它可能有不同的时区、时钟歪斜,甚至是伪造的时间戳。

在明确表明您是作者的规则中匹配(按照惯例,以您的姓名首字母开头):

header   CL_RCVD_WEE_HOURS Received =~ /\sby\smx\.mydomain\swith\s[^:]{9,64}+:(?<=[0 ][2-4]:)[0-9:]{5}\s-0[45]00\s/
describe CL_RCVD_WEE_HOURS Received by our mx.mydomain relay between 2a and 5a EST/EDT
score    CL_RCVD_WEE_HOURS 0.500

遍历该正则表达式(另见 interactive explanation at Regex101):

  • 首先,您需要验证它是您的中继,匹配名称:by mx.mydomain with
  • 然后,向前跳过 9-64 non-colon 个字符(快速,没有回溯,因此是 + 符号)。您需要验证您的服务器此处没有任何冒号
  • 真正的内容在 look-behind 中(因为为了速度我们实际上跳过了小时),它寻找前导零(或者 space)然后是 2、3 , 或 4(不是 5,因为我们不想匹配像 05:59:59)
  • 这样的时间
  • 最后,进行完整性检查以确保我们查看的是正确的时区。我假设你在美国东海岸,即 -0400 或 -0500,具体取决于夏令时是否有效

因此您需要更改服务器名称,检查冒号技巧是否适用于您的中继,并可能调整时区正则表达式。

我给这个的分数也比你想要的低。从低处开始,然后根据需要慢慢升高。 3.000 是一个非常高的价值。