Browse Source

[Enhancement] Implement Message-ID RHS checks against DNSBLs

pull/4888/head
twesterhever 2 years ago
parent
commit
5e84a82f87
  1. 2
      lualib/plugins/rbl.lua
  2. 26
      src/plugins/lua/rbl.lua

2
lualib/plugins/rbl.lua

@ -33,6 +33,7 @@ local check_types = {
numeric_urls = {},
emails = {},
replyto = {},
mid = {},
dkim = {},
rdns = {
connfilter = true,
@ -118,6 +119,7 @@ local rule_schema_tbl = {
received_min_pos = ts.number:is_optional(),
received_nflags = ts.array_of(ts.string):is_optional(),
replyto = ts.boolean:is_optional(),
mid = ts.boolean:is_optional(),
requests_limit = (ts.integer + ts.string / tonumber):is_optional(),
require_symbols = (
ts.array_of(ts.string) + (ts.string / function(s)

26
src/plugins/lua/rbl.lua

@ -829,6 +829,24 @@ local function gen_rbl_callback(rule)
return true
end
local function check_mid(task, requests_table, whitelist)
local function get_raw_header(name)
return ((task:get_header_full(name) or {})[1] or {})['value']
end
local mid = get_raw_header('Message-ID')
if mid then
local md = rspamd_util.parse_mail_address(mid, task:get_mempool())
lua_util.debugm(N, task, 'check message-id %s', md[1])
if md and md[1] and (md[1].addr and #md[1].addr > 0) then
check_email_table(task, md[1], requests_table, whitelist, 'mid')
end
end
return true
end
-- Create function pipeline depending on rbl settings
local pipeline = {
is_alive, -- check monitored status
@ -866,6 +884,10 @@ local function gen_rbl_callback(rule)
pipeline[#pipeline + 1] = check_replyto
description[#description + 1] = 'replyto'
end
if rule.mid then
pipeline[#pipeline + 1] = check_mid
description[#description + 1] = 'mid'
end
if rule.urls or rule.content_urls or rule.images or rule.numeric_urls then
pipeline[#pipeline + 1] = check_urls
@ -1028,7 +1050,7 @@ local function add_rbl(key, rbl, global_opts)
end
-- Check if rbl is available for empty tasks
if not (rbl.emails or rbl.urls or rbl.dkim or rbl.received or rbl.selector or rbl.replyto) or
if not (rbl.emails or rbl.urls or rbl.dkim or rbl.received or rbl.selector or rbl.replyto or rbl.mid) or
rbl.is_empty then
flags_tbl[#flags_tbl + 1] = 'empty'
end
@ -1118,7 +1140,7 @@ local function add_rbl(key, rbl, global_opts)
end
if not rbl.whitelist and not rbl.ignore_url_whitelist and (global_opts.url_whitelist or rbl.url_whitelist) and
(rbl.urls or rbl.emails or rbl.dkim or rbl.replyto) and
(rbl.urls or rbl.emails or rbl.dkim or rbl.replyto or rbl.mid) and
not (rbl.from or rbl.received) then
local def_type = 'set'
rbl.whitelist = lua_maps.map_add_from_ucl(rbl.url_whitelist or global_opts.url_whitelist, def_type,

Loading…
Cancel
Save