diff options
author | Steve Freegard <steve@stevefreegard.com> | 2016-11-25 14:21:02 +0000 |
---|---|---|
committer | Steve Freegard <steve@stevefreegard.com> | 2016-11-25 14:21:02 +0000 |
commit | 170aa65a0414ebd83b0df05f547403f5a9051b3f (patch) | |
tree | f2e05dbfc66e9bf2fac61f831aaac4d4b867bef3 /src/plugins/lua/mid.lua | |
parent | a9f42ec21101c4f96224744aa04ba3eb46f802ae (diff) | |
download | rspamd-170aa65a0414ebd83b0df05f547403f5a9051b3f.tar.gz rspamd-170aa65a0414ebd83b0df05f547403f5a9051b3f.zip |
Update commit as per comments
Diffstat (limited to 'src/plugins/lua/mid.lua')
-rw-r--r-- | src/plugins/lua/mid.lua | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/plugins/lua/mid.lua b/src/plugins/lua/mid.lua index 5c29f5ab4..5e36a683c 100644 --- a/src/plugins/lua/mid.lua +++ b/src/plugins/lua/mid.lua @@ -60,6 +60,55 @@ local function known_mid_cb(task) end end +local check_mid_id = rspamd_config:register_callback_symbol('CHECK_MID', 1.0, + function (task) + local mid = task:get_header('Message-ID') + if not mid then return false end + -- Check for 'bare' IP addresses in RHS + if mid:find("@%d+%.%d+%.%d+%.%d+>$") then + task:insert_result('MID_BARE_IP', 1.0) + end + -- Check for non-FQDN RHS + if mid:find("@[^%.]+>?$") then + task:insert_result('MID_RHS_NOT_FQDN', 1.0) + end + -- Check for missing <>'s + if not mid:find('^<[^>]+>$') then + task:insert_result('MID_MISSING_BRACKETS', 1.0) + end + -- Check for IP literal in RHS + if mid:find("@%[%d+%.%d+%.%d+%.%d+%]") then + task:insert_result('MID_RHS_IP_LITERAL', 1.0) + end + -- Check From address atrributes against MID + local from = task:get_from(2) + if (from and from[1] and from[1].domain) then + local fd = from[1].domain:lower() + local _,_,md = mid:find("@([^>]+)>?$") + -- See if all or part of the From address + -- can be found in the Message-ID + if (mid:lower():find(from[1].addr:lower(),1,true)) then + task:insert_result('MID_CONTAINS_FROM', 1.0) + elseif (md and fd == md:lower()) then + task:insert_result('MID_RHS_MATCH_FROM', 1.0) + end + end + end +) + +rspamd_config:register_virtual_symbol('MID_BARE_IP', 1.0, check_mid_id) +rspamd_config:set_metric_symbol('MID_BARE_IP', 2.0, 'Message-ID RHS is a bare IP address') +rspamd_config:register_virtual_symbol('MID_RHS_NOT_FQDN', 1.0, check_mid_id) +rspamd_config:set_metric_symbol('MID_RHS_NOT_FQDN', 0.5, 'Message-ID RHS is not a fully-qualified domain name') +rspamd_config:register_virtual_symbol('MID_MISSING_BRACKETS', 1.0, check_mid_id) +rspamd_config:set_metric_symbol('MID_MISSING_BRACKETS', 0.5, 'Message-ID is missing <>\'s') +rspamd_config:register_virtual_symbol('MID_RHS_IP_LITERAL', 1.0, check_mid_id) +rspamd_config:set_metric_symbol('MID_RHS_IP_LITERAL', 0.5, 'Message-ID RHS is an IP-literal') +rspamd_config:register_virtual_symbol('MID_CONTAINS_FROM', 1.0, check_mid_id) +rspamd_config:set_metric_symbol('MID_CONTAINS_FROM', 1.0, 'Message-ID contains From address') +rspamd_config:register_virtual_symbol('MID_RHS_MATCH_FROM', 1.0, check_mid_id) +rspamd_config:set_metric_symbol('MID_RHS_MATCH_FROM', 1.0, 'Message-ID RHS matches From domain') + local opts = rspamd_config:get_all_opt('mid') if opts then for k,v in pairs(opts) do |