使用 Exim 4 的虚拟用户偏好设置进行 SpamAssassin 过滤

使用 Exim 4 的虚拟用户偏好设置进行 SpamAssassin 过滤

我想在 acl_check_data 配置部分中使用 exim 的内置垃圾邮件过滤器支持来配置垃圾邮件过滤。

管道、exim 标头修改(用于存储结果)运行良好。以及通过 dovecot-lda 将邮件传输到垃圾邮件文件夹。

我唯一的问题是我无法将收件人的虚拟用户传递给 spamassassin,以让 spamd 从 sql 加载用户的偏好设置。

我知道,exim 的“垃圾邮件”关键字左侧就是为此而设的,但它不会为我传递任何变量。只有静态值:只是忽略我设置的所有变量。

这是我的配置部分:

acl_check_data:

  # Deny if the message contains a virus. Before enabling this check, you
  # must install a virus scanner and set the av_scanner option above.
  #
  deny    malware    = *
          message    = This message contains a virus ($malware_name).

  # Add headers to a message if it is judged to be spam. Before enabling this,
  # you must install SpamAssassin. You may also need to set the spamd_address
  # option above.
  # {def:h_Envelope-to:}

        # Accept when mail size is over 500k
  accept  condition = ${if >={$message_size}{500k}{yes}{no}}

  # put headers in all messages (no matter if spam or not)
  warn    spam       = ${local_part}@${domain}:true
          add_header = X-Spam-Score: $spam_score\n\
                       X-Spam-Score-Int: $spam_score_int\n\
                       X-Spam-Level: $spam_bar\n\
                       X-Spam-Report: $spam_report

  # add second subject line with *SPAM* marker when message
  # is over threshold
  warn    message    = Classified as spam.
          spam       = ${local_part}@${domain}
          add_header = X-Spam-Flag: YES\n\
                       Subject: [SPAM] $h_Subject:

  # reject spam at high scores (> 12)
  deny    message    = This message scored $spam_score spam points.
          spam       = ${local_part}@${domain}:true
          condition  = ${if >{$spam_score_int}{120}{true}{false}}

  # Accept the message.

  accept

当前格式为“${local_part}@${domain}”,但我尝试了更多:${local_part@$domain},带引号,不带括号等。只有 at 符号 (@) 传递,而变量在其他关键字(例如条件)下起作用。

我知道,我可以制作一个(耗资源的)传输钩子,甚至通过 dovecot 进行过滤,但是如果可能的话,我还是想使用这个功能。所以请不要建议其他解决方案,我知道它们。

答案1

您想要做的事情根本不可能实现。在 SMTP 时检查垃圾邮件会禁止这样做,因为您最终会扫描一封包含多个收件人的邮件(因此只需扫描一次)...那么您会加载哪些用户偏好设置?为了做到这一点,您需要在交付时使用管道传输(到 spamc),而不是在 SMTP 时。无论如何,在 SMTP 时使用重度垃圾邮件检测(如 spamassassin)是个坏主意,因为它会使您的服务器容易受到 DoS 攻击。在 SMTP 时使用较轻的垃圾邮件检测,在交付时使用重度垃圾邮件检测(使用适合每个用户的规则)。

相关内容