rspamd 过滤前每个域名的白名单/黑名单

rspamd 过滤前每个域名的白名单/黑名单

由于我遗憾地没有在 rspamd 的 GitHub 讨论板上收到任何回复,也许这里有人有使用 rspamd 预过滤模式的经验。

我正在尝试让 rspamd 接受来自给定域列表的任何邮件,无论它认为这些邮件有多么像垃圾邮件。遗憾的是,这很有必要,因为太多人认为操纵发件人或做其他见不得人的事是个好主意,通常被那些想隐藏什么的人使用。使用预过滤模式应该最容易实现这一点,因为这些模式应该在评估邮件是否为垃圾邮件之前运行。作为额外的好处,如果某些臭名昭著的垃圾邮件根本无法被识别,这也可以用于阻止列表。当然,可以教会 rspamd 哪些应该是垃圾邮件,哪些不是,但这似乎不够有效。此外,在日志中,我不明白为什么它拒绝对大多数域应用预过滤器,所以也许你们中有人有一个建议。

现在我正在使用多映射配置来设置接受和阻止列表的预过滤器。因此在 local.d/multimap.conf 中我有:

ACCEPTLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/acceptlist.sender.domain.map";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      score = 10.0;
      action = "add_header"; # Prefilter mode
  }

每个块顶部的两个注释来自我尝试过滤 header 和 from header 时,但由于您可以直接过滤,所以我尝试了这个,但它没有帮助。此外,我尝试在 map 中添加文件,只使用路径和 file:///path/to/file,但仍然没有成功。rspamd.log 也没有显示任何有用的信息(唯一不断显示的错误是关于无法加载 dkim 密钥,因为我无法禁用该模块)。将此配置复制到 overwrite.d 也无济于事。有什么想法吗?

我在 Debian 11 上直接运行来自 rspamd repo 的 rspamd 3.4-1~bullseye。

答案1

我的最后一个答案确实有很大帮助,但总的来说,我发现一些问题仍未解决:

出于某种原因,它仍然会添加ACCEPTLIST_SENDER_DOMAIN我之前从地图文件中删除的域。我甚至多次重新启动 rspamd,但它拒绝忘记该域。而且我找不到任何可以删除的缓存来提供帮助。

除此之外,无论如何,多映射都应该接受来自指定域的邮件。但只有当域在标题中时才如此From:,其他任何情况都不行。我之前错误地添加到白名单的域是我们邮件列表的域。所以根据多映射,rspamd 根本就不应该接受这些邮件,因为我们的邮件列表不会From:用自己的地址替换标题。但是,许多垃圾邮件仍然被标记为垃圾邮件,即使理论上它们应该被 false 排除ACCEPTLIST_SENDER_DOMAIN。现在,我已经将prefilter=true; 重新添加到多映射配置,也许这​​会有所帮助。但总而言之,rspamd 仍然没有按预期运行。

编辑:为了解决第一个问题,我切换回来明确检查标题From:,因为 type:from 会在检查这个之前检查信封的发件人,所以这应该更可靠(当然,修改发件人标题非常简单,但我可以用一只手数出过去几年发生的这种事件,这些事件没有被我们的主要垃圾邮件过滤器捕获):

ACCEPTLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

但由于某种原因,一旦触发这些符号,邮件标题中就会出现以下内容:

X-Rspamd-Pre-Result: action=no action;
    module=multimap;
    Matched map: ACCEPTLIST_SENDER_DOMAIN

在这种情况下,操作显然应该是“接受”,如配置中所述。配置转储中的情况如下:

multimap {
    ACCEPTLIST_SENDER_DOMAIN {
        action = "accept";
        map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
        description = "Sender domain is on allowed";
        symbol = "ACCEPTLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    BLOCKLIST_SENDER_DOMAIN {
        action = "add_header";
        map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
        description = "Sender domain is on blocked";
        symbol = "BLOCKLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    [...]
}

答案2

我认为预过滤器值周围不应该有任何引号:

prefilter = true;

此外,由于操作已经强制执行,因此在预过滤器映射中配置分数可能毫无用处。

我希望它有帮助!

答案3

这应该可行。我设法实现了你想要的。我的 local.d/multimap.conf 包含:

用于接受来自特定域的邮件

WHITELIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/whitelist.sender.domain.map";
      symbol ="WHITELIST_SENDER_DOMAIN";
      description = "WHITELIST map for SENDERS Domain - Action accept";
      action = "accept";
  }
# For rejecting domains
BLACKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/blacklist.sender.domain.map";
      symbol ="BLACKLISTED_DOMAIN";
      description = "Blacklist map for Senders Domain - Action reject";
      action = "reject";
  } 

您需要在 local.d 中以完全相同的名称创建上述映射文件,并在其中填充要过滤的域名。每行只能有一个域名!这些文件应具有读取权限。

另请注意,如果对消息设置了操作,则应该跳过大多数进一步的检查。

答案4

@cz.steve 我现在已经重新构建了所有内容以使用 rspamd,因为 SpamAssassin 也没有按照我想要的方式运行。现在更改确实启用了白名单和黑名单,尽管不是我所期望的工作方式。我想要的是它只将给定的域与标头中的内容匹配From:,而不是与所有其他标头中的内容匹配。有可能实现吗?

现在我的配置是这样的:

ACCEPTLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

相关内容