![rspamd 过滤前每个域名的白名单/黑名单](https://linux22.com/image/784254/rspamd%20%E8%BF%87%E6%BB%A4%E5%89%8D%E6%AF%8F%E4%B8%AA%E5%9F%9F%E5%90%8D%E7%9A%84%E7%99%BD%E5%90%8D%E5%8D%95%2F%E9%BB%91%E5%90%8D%E5%8D%95.png)
由于我遗憾地没有在 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
}