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

[Postfix/Rspamd] Do not reject unauthenticated sender mismatches but rewrite their subject and assign symbol SPOOFED_SENDER with score 1.0

073c6c6e
andryyy <[email protected]> 9 years ago
data/conf/postfix/main.cf                   |  2 +-
 data/conf/rspamd/local.d/force_actions.conf |  7 ++++++-
 data/conf/rspamd/local.d/metrics.conf       |  4 ++++
 data/conf/rspamd/local.d/multimap.conf      | 17 ++++++++++++-----
 data/conf/rspamd/lua/rspamd.local.lua       |  3 +++
 5 files changed, 26 insertions(+), 7 deletions(-)

Diff

diff --git a/data/conf/postfix/main.cf b/data/conf/postfix/main.cf
index 3ee6e59c..edf5c6d5 100644
--- a/data/conf/postfix/main.cf
+++ b/data/conf/postfix/main.cf
@@ -62,7 +62,7 @@ smtpd_sasl_authenticated_header = yes
 smtpd_sasl_path = inet:dovecot:10001
 smtpd_sasl_type = dovecot
 smtpd_sender_login_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_sender_acl.cf
-smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, permit_mynetworks, reject_sender_login_mismatch, permit_sasl_authenticated, reject_unlisted_sender, reject_unknown_sender_domain
+smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch, permit_mynetworks, permit_sasl_authenticated, reject_unlisted_sender, reject_unknown_sender_domain
 smtpd_soft_error_limit = 3
 smtpd_tls_auth_only = yes
 smtpd_tls_dh1024_param_file = /etc/ssl/mail/dhparams.pem
diff --git a/data/conf/rspamd/local.d/force_actions.conf b/data/conf/rspamd/local.d/force_actions.conf
index 3373ce15..956402f5 100644
--- a/data/conf/rspamd/local.d/force_actions.conf
+++ b/data/conf/rspamd/local.d/force_actions.conf
@@ -2,7 +2,7 @@ rules {
   DKIM_FAIL {
     action = "add header";
     expression = "R_DKIM_REJECT & !MAILLIST & !MAILCOW_WHITE & !MAILCOW_BLACK";
-    require_action = ["no action", "greylist"];
+    require_action = ["no action", "greylist", "soft reject"];
   }
   VIRUS_FOUND {
     action = "reject";
@@ -19,4 +19,9 @@ rules {
     expression = "WHITELISTED_FWD_HOST";
     require_action = ["greylist", "soft reject"];
   }
+  ADD_UNAUTH_SUBJ {
+    action = "rewrite subject";
+    subject = "[Unauth] %s";
+    expression = "SPOOFED_SENDER";
+  }
 }
diff --git a/data/conf/rspamd/local.d/metrics.conf b/data/conf/rspamd/local.d/metrics.conf
index b3afa78c..d3eb2657 100644
--- a/data/conf/rspamd/local.d/metrics.conf
+++ b/data/conf/rspamd/local.d/metrics.conf
@@ -34,3 +34,7 @@ group "MX" {
 	  one_shot = "true";
 	}
 }
+symbol "SPOOFED_SENDER" {
+	description = "Sender is not authenticated but part of mailcow managed domains";
+	score = 1.0;
+}
diff --git a/data/conf/rspamd/local.d/multimap.conf b/data/conf/rspamd/local.d/multimap.conf
index d524264e..d9dd88ce 100644
--- a/data/conf/rspamd/local.d/multimap.conf
+++ b/data/conf/rspamd/local.d/multimap.conf
@@ -1,22 +1,29 @@
 RCPT_MAILCOW_DOMAIN {
   type = "rcpt";
-  filter = "email:domain"
-  map = "redis://DOMAIN_MAP"
+  filter = "email:domain";
+  map = "redis://DOMAIN_MAP";
 }
 
 RCPT_WANTS_SUBJECT_TAG {
   type = "rcpt";
   filter = "email:addr"
-  map = "redis://RCPT_WANTS_SUBJECT_TAG"
+  map = "redis://RCPT_WANTS_SUBJECT_TAG";
 }
 
 WHITELISTED_FWD_HOST {
   type = "ip";
-  map = "redis://WHITELISTED_FWD_HOST"
+  map = "redis://WHITELISTED_FWD_HOST";
 }
 
 KEEP_SPAM {
   type = "ip";
-  map = "redis://KEEP_SPAM"
+  map = "redis://KEEP_SPAM";
   action = "accept";
 }
+
+SPOOFED_SENDER {
+  type = "rcpt";
+  filter = "email:domain";
+  map = "redis://DOMAIN_MAP";
+  require_symbols = "AUTH_NA | !RCVD_VIA_SMTP_AUTH";
+}
diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua
index c1a8f48f..3d515bf0 100644
--- a/data/conf/rspamd/lua/rspamd.local.lua
+++ b/data/conf/rspamd/lua/rspamd.local.lua
@@ -58,6 +58,9 @@ rspamd_config:register_symbol({
     local redis_params = rspamd_parse_redis_server('dyn_rl')
     local rspamd_logger = require "rspamd_logger"
     local envfrom = task:get_from(1)
+    if not envfrom then
+      return false
+    end
     local env_from_domain = envfrom[1].domain:lower() -- get smtp from domain in lower case
     local env_from_addr = envfrom[1].addr:lower() -- get smtp from addr in lower case