commit 5e84a82: [Enhancement] Implement Message-ID RHS checks against DNSBLs

twesterhever 40121680+twesterhever at users.noreply.github.com
Mon Jul 29 17:56:17 UTC 2024


Author: twesterhever
Date: 2024-03-24 16:29:22 +0000
URL: https://github.com/rspamd/rspamd/commit/5e84a82f8742ed2bcef65859759c0dd14aa9c4ca

[Enhancement] Implement Message-ID RHS checks against DNSBLs

---
 lualib/plugins/rbl.lua  |  2 ++
 src/plugins/lua/rbl.lua | 26 ++++++++++++++++++++++++--
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/lualib/plugins/rbl.lua b/lualib/plugins/rbl.lua
index af5d6bd91..9dacbaa42 100644
--- a/lualib/plugins/rbl.lua
+++ b/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)
diff --git a/src/plugins/lua/rbl.lua b/src/plugins/lua/rbl.lua
index b2ccf8699..065a58fda 100644
--- a/src/plugins/lua/rbl.lua
+++ b/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,


More information about the Commits mailing list