git subrepo clone https://github.com/mailcow/mailcow-dockerized.git mailcow/src/mailcow-dockerized
subrepo: subdir: "mailcow/src/mailcow-dockerized"
merged: "a832becb"
upstream: origin: "https://github.com/mailcow/mailcow-dockerized.git"
branch: "master"
commit: "a832becb"
git-subrepo: version: "0.4.3"
origin: "???"
commit: "???"
Change-Id: If5be2d621a211e164c9b6577adaa7884449f16b5
diff --git a/mailcow/src/mailcow-dockerized/data/conf/rspamd/lua/ivm-sg.lua b/mailcow/src/mailcow-dockerized/data/conf/rspamd/lua/ivm-sg.lua
new file mode 100644
index 0000000..6642fe4
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/conf/rspamd/lua/ivm-sg.lua
@@ -0,0 +1,61 @@
+-- Thanks to https://raw.githubusercontent.com/fatalbanana
+
+local lua_maps = require 'lua_maps'
+local rspamd_regexp = require 'rspamd_regexp'
+local rspamd_util = require 'rspamd_util'
+
+local ivm_sendgrid_ids = lua_maps.map_add_from_ucl(
+ 'https://www.invaluement.com/spdata/sendgrid-id-dnsbl.txt',
+ 'set',
+ 'Invaluement Service Provider DNSBL: Sendgrid IDs'
+)
+
+local ivm_sendgrid_envfromdomains = lua_maps.map_add_from_ucl(
+ 'https://www.invaluement.com/spdata/sendgrid-envelopefromdomain-dnsbl.txt',
+ 'set',
+ 'Invaluement Service Provider DNSBL: Sendgrid envelope domains'
+)
+
+local cb_id = rspamd_config:register_symbol({
+ name = 'IVM_SENDGRID',
+ callback = function(task)
+ -- Is it Sendgrid?
+ local sg_hdr = task:get_header('X-SG-EID')
+ if not sg_hdr then return end
+
+ -- Get original envelope from
+ local env_from = task:get_from{'smtp', 'orig'}
+ if not env_from then return end
+
+ -- Check normalised domain in domains list
+ if ivm_sendgrid_envfromdomains and ivm_sendgrid_envfromdomains:get_key(rspamd_util.get_tld(env_from[1].domain)) then
+ task:insert_result('IVM_SENDGRID_DOMAIN', 1.0)
+ end
+
+ -- Check ID in ID list
+ local lp_re = rspamd_regexp.create_cached([[^bounces\+(\d+)-]])
+ local res = lp_re:search(env_from[1].user, true, true)
+ if not res then return end
+ if ivm_sendgrid_ids and ivm_sendgrid_ids:get_key(res[1][2]) then
+ task:insert_result('IVM_SENDGRID_ID', 1.0)
+ end
+ end,
+ description = 'Invaluement Service Provider DNSBL: Sendgrid',
+ type = 'callback',
+})
+
+rspamd_config:register_symbol({
+ name = 'IVM_SENDGRID_DOMAIN',
+ parent = cb_id,
+ group = 'ivmspdnsbl',
+ score = 8.0,
+ type = 'virtual',
+})
+
+rspamd_config:register_symbol({
+ name = 'IVM_SENDGRID_ID',
+ parent = cb_id,
+ group = 'ivmspdnsbl',
+ score = 8.0,
+ type = 'virtual',
+})