NobGit
public nobgit read

NobMail

Based on mailcow: dockerized

Languages

Repository composition by tracked source files.

PHP
PHP 49% JavaScript 35% HTML 9% CSS 4% Shell 2% Python 1% Lua 0% Perl 0% Ruby 0% SCSS 0%
Create file Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git

Commit

[Rspamd] Handle Postmaster in and outbound as trusted

7bcb9414
andryyy <[email protected]> 6 years ago
data/conf/rspamd/lua/rspamd.local.lua    | 63 ++++++++++++++++++++++++++++----
 data/conf/rspamd/override.d/logging.inc  |  2 +-
 data/web/inc/presets/rspamd/preset_2.yml | 10 -----
 3 files changed, 56 insertions(+), 19 deletions(-)
 delete mode 100644 data/web/inc/presets/rspamd/preset_2.yml

Diff

diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua
index 1725d02c..74fee6a6 100644
--- a/data/conf/rspamd/lua/rspamd.local.lua
+++ b/data/conf/rspamd/lua/rspamd.local.lua
@@ -87,6 +87,45 @@ rspamd_config:register_symbol({
   priority = 10
 })
 
+rspamd_config:register_symbol({
+  name = 'POSTMASTER_HANDLER',
+  type = 'prefilter',
+  callback = function(task)
+  local rcpts = task:get_recipients('smtp')
+  local rspamd_logger = require "rspamd_logger"
+  local lua_util = require "lua_util"
+  local from = task:get_from(1)
+
+  -- not applying to mails with more than one rcpt to avoid bypassing filters by addressing postmaster
+  if rcpts and #rcpts == 1 then
+    for _,rcpt in ipairs(rcpts) do
+      local rcpt_split = rspamd_str_split(rcpt['addr'], '@')
+      if #rcpt_split == 2 then
+        if rcpt_split[1] == 'postmaster' then
+          task:set_pre_result('accept', 'whitelisting postmaster smtp rcpt')
+          return
+        end
+      end
+    end
+  end
+
+  if from then
+    for _,fr in ipairs(from) do
+      local fr_split = rspamd_str_split(fr['addr'], '@')
+      if #fr_split == 2 then
+        if fr_split[1] == 'postmaster' then
+          -- no whitelist, keep signatures
+          task:insert_result(true, 'POSTMASTER_FROM', -2500.0, from_ip_string)
+          return
+        end
+      end
+    end
+  end
+
+  end,
+  priority = 19
+})
+
 rspamd_config:register_symbol({
   name = 'DIRECT_ALIAS_EXPANDER',
   type = 'prefilter',
@@ -94,6 +133,7 @@ rspamd_config:register_symbol({
   local rspamd_http = require "rspamd_http"
   local rcpts = task:get_recipients('smtp')
   local rspamd_logger = require "rspamd_logger"
+  local lua_util = require "lua_util"
 
   local function http_callback(err_message, code, body, headers)
     if body ~= nil and body ~= "" then
@@ -108,18 +148,25 @@ rspamd_config:register_symbol({
 
   if rcpts and #rcpts == 1 then
   for _,rcpt in ipairs(rcpts) do
-    rspamd_http.request({
-      task=task,
-      url='http://nginx:8081/aliasexp.php',
-      body='',
-      callback=http_callback,
-      headers={Rcpt=rcpt['addr']},
-    })
+    local rcpt_split = rspamd_str_split(rcpt['addr'], '@')
+    if #rcpt_split == 2 then
+      if rcpt_split[1] == 'postmaster' then
+        rspamd_logger.infox(rspamd_config, "not expanding postmaster alias")
+      end
+    else
+      rspamd_http.request({
+        task=task,
+        url='http://nginx:8081/aliasexp.php',
+        body='',
+        callback=http_callback,
+        headers={Rcpt=rcpt['addr']},
+      })
+    end
   end
   end
 
   end,
-  priority = 19
+  priority = 18
 })
 
 rspamd_config:register_symbol({
diff --git a/data/conf/rspamd/override.d/logging.inc b/data/conf/rspamd/override.d/logging.inc
index 64d4064d..750b25cd 100644
--- a/data/conf/rspamd/override.d/logging.inc
+++ b/data/conf/rspamd/override.d/logging.inc
@@ -1,4 +1,4 @@
-level = "silent";
+level = "info";
 type = "console";
 systemd = false;
 .include "$CONFDIR/logging.inc"
diff --git a/data/web/inc/presets/rspamd/preset_2.yml b/data/web/inc/presets/rspamd/preset_2.yml
deleted file mode 100644
index bc0b0f03..00000000
--- a/data/web/inc/presets/rspamd/preset_2.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-headline: lang.rsettings_preset_2
-content: |
-  priority = 10;
-  rcpt = "/postmaster@.*/";
-  apply {
-    symbols_enabled = ["DKIM_SIGNED", "HISTORY_SAVE", "MILTER_HEADERS", "ARC_SIGNED"];
-  actions {
-      greylist = null;
-    }
-  }