Package: rspamd
Version: 3.12.1-1
Severity: important

Dear Maintainer,
since upgrading to Debian 13, rspamd immediately segfaults when postfix hands it an email for scanning: 2026-02-02 14:06:48 #1168822(rspamd_proxy) rspamd_crash_sig_handler: caught fatal signal 11(Segmentation fault), pid: 1168822, trace: 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #0: [0x7fb9ce435b56]: /usr/lib/rspamd/librspamd-server.so in rspamd::log_backtrace() 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #1: [0x7fb9ce4064ba]: /usr/lib/rspamd/librspamd-server.so in 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #2: [0x7fb9cdb14def]: /lib/x86_64-linux-gnu/libc.so.6 in 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #3: [0x7fb9ce472858]: /usr/lib/rspamd/librspamd-server.so in 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #4: [0x7fb9ce818af5]: /lib/x86_64-linux-gnu/libluajit-5.1.so.2 in 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #5: [0x7fb9ce879132]: /lib/x86_64-linux-gnu/libluajit-5.1.so.2 in lua_pcall 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #6: [0x7fb9ce3612f6]: /usr/lib/rspamd/librspamd-server.so in 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #7: [0x7fb9ce53d00b]: /usr/lib/rspamd/librspamd-server.so in redisProcessCallbacks 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #8: [0x7fb9ce0e1c8d]: /usr/lib/rspamd/librspamd-ev.so in ev_invoke_pending 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #9: [0x7fb9ce0e56e3]: /usr/lib/rspamd/librspamd-ev.so in ev_run 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #10: [0x56099f5cac25]: rspamd: rspamd_proxy process  in localhost:11332 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #11: [0x7fb9ce405aeb]: /usr/lib/rspamd/librspamd-server.so in rspamd_fork_worker 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #12: [0x56099f5c33e0]: rspamd: rspamd_proxy process  in localhost:11332 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #13: [0x56099f5c3d6d]: rspamd: rspamd_proxy process  in localhost:11332 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #14: [0x56099f5b48a3]: rspamd: rspamd_proxy process  in localhost:11332 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #15: [0x7fb9cdafeca7]: /lib/x86_64-linux-gnu/libc.so.6 in 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #16: [0x7fb9cdafed64]: /lib/x86_64-linux-gnu/libc.so.6 in __libc_start_main 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #17: [0x56099f5b5030]: rspamd: rspamd_proxy process  in localhost:11332 2026-02-02 14:06:48 #1168822(rspamd_proxy) log_backtrace: #18: [0xffffffffffffffff]: [0xffffffffffffffff] in 2026-02-02 14:06:48 #1168822(rspamd_proxy) rspamd_crash_sig_handler: please see Rspamd FAQ to learn how to dump core files and how to fill a bug report 2026-02-02 14:06:48 #1168819(main) <86f5c4>; main; rspamd_srv_handler: cannot read from worker's srv pipe connection closed; command = notice_hyperscan_cache

Best regards
Richard

-- System Information:
Debian Release: 13.3
  APT prefers stable-security
  APT policy: (500, 'stable-security'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.12.63+deb13-amd64 (SMP w/2 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages rspamd depends on:
ii  adduser                     3.152
ii  ca-certificates             20250419
ii  fonts-glyphicons-halflings  1.009~3.4.1+dfsg-6
ii  init-system-helpers         1.69~deb13u1
ii  libarchive13t64             3.7.4-4
ii  libc6                       2.41-12+deb13u1
ii  libgcc-s1                   14.2.0-19
ii  libglib2.0-0t64             2.84.4-3~deb13u2
ii  libhyperscan5               5.4.2-3
ii  libicu76                    76.1-4
ii  libjs-bootstrap5            5.3.5+dfsg-4
ii  libjs-jquery                3.6.1+dfsg+~3.5.14-1
ii  libjs-requirejs             2.3.7+ds+~2.1.37-1
ii  libluajit-5.1-2             2.1.0+openresty20250117-2
ii  libpcre2-8-0                10.46-1~deb13u1
ii  libsodium23                 1.0.18-1+deb13u1
ii  libsqlite3-0                3.46.1-7
ii  libssl3t64                  3.5.4-1~deb13u1
ii  libstdc++6                  14.2.0-19
ii  libzstd1                    1.5.7+dfsg-1
ii  perl                        5.40.1-6
ii  publicsuffix                20250328.1952-0.1
ii  zlib1g                      1:1.3.dfsg+really1.3.1-1+b1

Versions of packages rspamd recommends:
ii  redis-server  5:8.0.2-3+deb13u1

rspamd suggests no packages.

-- Configuration Files:
/etc/logrotate.d/rspamd changed:
/var/log/rspamd/rspamd.log {
       daily
       rotate 14
       delaycompress
       compress
       notifempty
       missingok
       postrotate
          systemctl kill --signal=SIGUSR1 rspamd >/dev/null 2>&1 \
             || service rspamd reopenlog >/dev/null 2>&1 || true
       endscript
}

/etc/rspamd/actions.conf changed:
actions {
    reject = 15; # Reject when reaching this score
    add_header = 6; # Add header when reaching this score
    greylist = 4; # Apply greylisting when reaching this score (will emit `soft reject action`)     #unknown_weight = 1.0; # Enable if need to set score for all symbols implicitly     # Each new symbol is added multiplied by gf^N, where N is the number of spammy symbols
    #grow_factor = 1.1;
    # Set rewrite subject to this value (%s is replaced by the original subject)
    #subject = "***SPAM*** %s"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/actions.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/actions.conf"
}
/etc/rspamd/common.conf changed:
lua = "$RULESDIR/rspamd.lua"
.include "$CONFDIR/metrics.conf"
.include "$CONFDIR/actions.conf"
.include "$CONFDIR/groups.conf"
.include "$CONFDIR/composites.conf"
.include "$CONFDIR/statistic.conf"
.include "$CONFDIR/modules.conf"
.include "$CONFDIR/settings.conf"
.include(try=true) "$LOCAL_CONFDIR/rspamd.conf.local"
.include(try=true,priority=10) "$LOCAL_CONFDIR/rspamd.conf.local.override"
.include(try=true,priority=10) "$LOCAL_CONFDIR/rspamd.conf.override"
modules {
  path = "${PLUGINSDIR}";
  fallback_path = "${SHAREDIR}/lua"; # Legacy path
  try_path = "${LOCAL_CONFDIR}/plugins.d/"; # User plugins
}

/etc/rspamd/composites.conf changed:
composites {
  FORGED_RECIPIENTS_MAILLIST {
    expression = "FORGED_RECIPIENTS & -MAILLIST";
  }
  FORGED_SENDER_MAILLIST {
    expression = "FORGED_SENDER & -MAILLIST";
  }
  FORGED_SENDER_FORWARDING {
    expression = "FORGED_SENDER & g:forwarding";
    description = "Forged sender, but message is forwarded";
    policy = "remove_weight";
  }
  SPF_FAIL_FORWARDING {
    expression = "g:forwarding & (R_SPF_SOFTFAIL | R_SPF_FAIL)";
    policy = "remove_weight";
  }
  DMARC_POLICY_ALLOW_WITH_FAILURES {
    expression = "DMARC_POLICY_ALLOW & (R_SPF_SOFTFAIL | R_SPF_FAIL | R_DKIM_REJECT)";
    policy = "remove_weight";
  }
  FORGED_RECIPIENTS_FORWARDING {
    expression = "FORGED_RECIPIENTS & g:forwarding";
    policy = "remove_weight";
  }
  FORGED_SENDER_VERP_SRS {
    expression = "FORGED_SENDER & (ENVFROM_PRVS | ENVFROM_VERP)";
  }
  FORGED_MUA_MAILLIST {
    expression = "g:mua & -MAILLIST";
  }
  RBL_SPAMHAUS_XBL_ANY {
    expression = "RBL_SPAMHAUS_XBL & RECEIVED_SPAMHAUS_XBL";
    description = "From and Received address are listed in Spamhaus XBL";
  }
  AUTH_NA {
    expression = "R_DKIM_NA & R_SPF_NA & DMARC_NA & ARC_NA";
    score = 1.0;
    policy = "remove_weight";
    description = "Authenticating message via SPF/DKIM/DMARC/ARC not available";
  }
  AUTH_NA_OR_FAIL {
    expression = "!(R_DKIM_NA & R_SPF_NA & DMARC_NA & ARC_NA) & (R_DKIM_NA | R_DKIM_TEMPFAIL | R_DKIM_PERMFAIL) & (R_SPF_NA | R_SPF_DNSFAIL) & DMARC_NA & (ARC_NA | ARC_DNSFAIL)";
    score = 1.0;
    policy = "remove_weight";
    description = "No authenticating method SPF/DKIM/DMARC/ARC was successful";
  }
  BOUNCE_NO_AUTH {
    expression = "(AUTH_NA | AUTH_NA_OR_FAIL) & (BOUNCE | SUBJ_BOUNCE_WORDS)";
    score = 1.0;
  }
  DKIM_MIXED {
    expression = "-R_DKIM_ALLOW & (R_DKIM_TEMPFAIL | R_DKIM_PERMFAIL | R_DKIM_REJECT)"
    policy = "remove_weight";
  }
  MAIL_RU_MAILER_BASE64 {
    expression = "MAIL_RU_MAILER & (FROM_EXCESS_BASE64 | MIME_BASE64_TEXT | REPLYTO_EXCESS_BASE64 | SUBJ_EXCESS_BASE64 | TO_EXCESS_BASE64)";
  }
  YANDEX_RU_MAILER_CTYPE_MIXED_BOGUS {
    expression = "YANDEX_RU_MAILER & -HAS_ATTACHMENT & CTYPE_MIXED_BOGUS";
  }
  MAILER_1C_8_BASE64 {
    expression = "MAILER_1C_8 & (FROM_EXCESS_BASE64 | MIME_BASE64_TEXT | SUBJ_EXCESS_BASE64 | TO_EXCESS_BASE64)";     description = "Message was sent by '1C:Enterprise 8' and uses base64 encoded data";
  }
  HACKED_WP_PHISHING {
    expression = "(HAS_X_POS | HAS_PHPMAILER_SIG) & HAS_WP_URI & (PHISHING | DBL_PHISH | PHISHED_OPENPHISH | PHISHED_PHISHTANK)";
    description = "Phish message sent by hacked Wordpress instance";
    policy = "leave";
  }
  COMPROMISED_ACCT_BULK {
    expression = "(HAS_XOIP | RCVD_FROM_SMTP_AUTH) & DCC_BULK";
    description = "Likely to be from a compromised account";
    score = 3.0;
    policy = "leave";
  }
  UNDISC_RCPTS_BULK {
    expression = "DCC_BULK & (MISSING_TO | R_UNDISC_RCPT)";
    description = "Missing or undisclosed recipients with a bulk signature";
    score = 3.0;
    policy = "leave";
  }
  RCVD_UNAUTH_PBL {
    expression = "RECEIVED_PBL & !RCVD_VIA_SMTP_AUTH";
    description = "Relayed through ZEN PBL IP without sufficient authentication (possible indicating an open relay)";
    score = 2.0;
    policy = "leave";
  }
  RCVD_DKIM_ARC_DNSWL_MED {
    expression = "(R_DKIM_ALLOW | ARC_ALLOW) & RCVD_IN_DNSWL_MED";
    description = "Sufficiently DKIM/ARC signed and received from IP with medium trust at DNSWL";
    score = -0.5;
    policy = "leave";
  }
  RCVD_DKIM_ARC_DNSWL_HI {
    expression = "(R_DKIM_ALLOW | ARC_ALLOW) & RCVD_IN_DNSWL_HI";
    description = "Sufficiently DKIM/ARC signed and received from IP with high trust at DNSWL";
    score = -1.0;
    policy = "leave";
  }
  AUTOGEN_PHP_SPAMMY {
    expression = "(HAS_X_POS | HAS_PHPMAILER_SIG | HAS_X_PHP_SCRIPT) & (SUBJECT_ENDS_QUESTION | SUBJECT_ENDS_EXCLAIM | MANY_INVISIBLE_PARTS)";     description = "Message was generated by PHP script and contains some spam indicators";
    score = 1.0;
    policy = "leave";
  }
  PHISH_EMOTION {
    expression = "(PHISHING | DBL_PHISH | PHISHED_OPENPHISH | PHISHED_PHISHTANK) & (SUBJECT_ENDS_QUESTION | SUBJECT_ENDS_EXCLAIM)";     description = "Phish message with subject trying to address users emotion";
    score = 1.0;
    policy = "leave";
  }
  HAS_ANON_DOMAIN {
    expression = "HAS_GUC_PROXY_URI | URIBL_RED | DBL_ABUSE_REDIR | HAS_ONION_URI";     description = "Contains one or more domains trying to disguise owner/destination";
    score = 0.1;
    policy = "leave";
  }
  BAD_REP_POLICIES {
    description = "Contains valid policies but are also marked by fuzzy/bayes/surbl/rbl";     expression = "(~g-:policies) & (-g+:fuzzy | -g+:statistics | -g+:surbl | -g+:rbl)";
    score = 0.1;
  }
  VIOLATED_DIRECT_SPF {
    description = "Has no Received (or no trusted received relays) and SPF policy fails or soft fails";     expression = "(R_SPF_FAIL | R_SPF_SOFTFAIL) & (RCVD_COUNT_ZERO | RCVD_NO_TLS_LAST)";
    policy = "leave";
    score = 3.5;
  }
  IP_SCORE_FREEMAIL {
    description = "Negate IP_SCORE when message comes from FreeMail";
    expression = "FREEMAIL_FROM & SENDER_REP_SPAM";
    score = 0.0;
    policy = "remove_weight";
  }
  BROKEN_HEADERS_MAILLIST {
    description = "Negate BROKEN_HEADERS when message comes via some mailing list";
    expression = "BROKEN_HEADERS & -MAILLIST";
    score = 0.0;
    policy = "remove_weight";
  }
  LEAKED_PASSWORD_SCAM {
    description = "Contains BTC wallet address and scam patterns";
    expression = "BITCOIN_ADDR & (LEAKED_PASSWORD_SCAM_RE | R_MIXED_CHARSET | R_EMPTY_IMAGE)";
    policy = "leave";
    score = 7.0;
    group = "scams";
  }

  FREEMAIL_AFF {
      expression = "(FREEMAIL_FROM | FREEMAIL_ENVFROM | FREEMAIL_REPLYTO) & R_UNDISC_RCPT & (INTRODUCTION | FROM_NAME_HAS_TITLE | FREEMAIL_REPLYTO_NEQ_FROM_DOM)";
      score = 4.0;
      policy = "leave";
      description = "Message exhibits strong characteristics of advance fee fraud (AFF a/k/a '419' spam) involving freemail addresses";
  }
  .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/composites.conf"   .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/composites.conf"
}

/etc/rspamd/groups.conf changed:
group "headers" {
    .include "$CONFDIR/scores.d/headers_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/headers_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/headers_group.conf"
}
group "subject" {
    .include "$CONFDIR/scores.d/subject_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/subject_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/subject_group.conf"
}
group "mua" {
    .include "$CONFDIR/scores.d/mua_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/mua_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/mua_group.conf"
}
group "rbl" {
    .include "$CONFDIR/scores.d/rbl_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/rbl_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/rbl_group.conf"
}
group "statistics" {
    .include "$CONFDIR/scores.d/statistics_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/statistics_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/statistics_group.conf"
}
group "fuzzy" {
    .include "$CONFDIR/scores.d/fuzzy_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/fuzzy_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/fuzzy_group.conf"
}
group "policies" {
    .include "$CONFDIR/scores.d/policies_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/policies_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/policies_group.conf"
}
group "whitelist" {
    .include "$CONFDIR/scores.d/whitelist_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/whitelist_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/whitelist_group.conf"
}
group "surbl" {
    .include "$CONFDIR/scores.d/surbl_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/surbl_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/surbl_group.conf"
}
group "phishing" {
    .include "$CONFDIR/scores.d/phishing_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/phishing_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/phishing_group.conf"
}
group "hfilter" {
    .include "$CONFDIR/scores.d/hfilter_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/hfilter_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/hfilter_group.conf"
}
group "mime_types" {
    .include "$CONFDIR/scores.d/mime_types_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/mime_types_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/mime_types_group.conf"
}
group "excessqp" {
    max_score = 2.4;
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/excessqp_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/excessqp_group.conf"
}
group "excessb64" {
    max_score = 3.0;
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/excessb64_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/excessb64_group.conf"
}
group "neural" {
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/neural_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/neural_group.conf"
}
group "antivirus" {
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/antivirus_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/antivirus_group.conf"
}
group "external_services" {
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/external_services_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/external_services_group.conf"
}
group "content" {
    .include "$CONFDIR/scores.d/content_group.conf"
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/content_group.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/content_group.conf"
}
.include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/groups.conf"
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/groups.conf"

/etc/rspamd/metrics.conf changed:
metric {
    name = "default";
    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/metrics.conf"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/metrics.conf"
}

/etc/rspamd/modules.conf changed:
.include(glob=true) "${CONFDIR}/modules.d/*.conf"
/etc/rspamd/modules.d/arc.conf changed:
arc {
  # If false, messages with empty envelope from are not signed
  allow_envfrom_empty = true;
  # If true, envelope/header domain mismatch is ignored
  allow_hdrfrom_mismatch = true;
  # If true, multiple from headers are allowed (but only first is used)
  allow_hdrfrom_multiple = false;
  # If true, username does not need to contain matching domain
  allow_username_mismatch = false;
  # Default path to key, can include '$domain' and '$selector' variables
  #path = "${DBDIR}/arc/$domain.$selector.key";
  # Default selector to use
  selector = "arc";
  # If false, messages from authenticated users are not selected for signing
  sign_authenticated = false;
  # If false, inbound messages are not selected for signing
  sign_inbound = true;
  # If false, messages from local networks are not selected for signing
  sign_local = false;
  # Symbol to add when message is signed
  symbol_sign = "ARC_SIGNED";
  # Whether to fallback to global config
  try_fallback = true;
  # Domain to use for ARC signing: can be "header", "envelope" or "recipient"
  use_domain = "recipient";
  # Whether to normalise domains to eSLD
  use_esld = true;
  # Whether to get keys from Redis
  use_redis = false;
  # Hash for ARC keys in Redis
  key_prefix = "ARC_KEYS";
  # Domain specific settings
  #domain {
  #  example.com {
  #    # Private key path
  #    path = "${DBDIR}/arc/example.key";
  #    # Selector
  #    selector = "ds";
  #  }
  #}
  .include(try=true,priority=5) "${DBDIR}/dynamic/arc.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/arc.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/arc.conf"
}

/etc/rspamd/modules.d/aws_s3.conf changed:
aws_s3 {
  # Required attributes
  #s3_bucket = 'xxx';
  s3_region = 'us-east-1';
  s3_host = 's3.amazonaws.com';
  #s3_secret_key = 'xxx';
  #s3_key_id = 'xxx';
  # Enable in local.d/aws_s3.conf
  enabled = false;
  .include(try=true,priority=5) "${DBDIR}/dynamic/aws_s3.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/aws_s3.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/aws_s3.conf"
}

/etc/rspamd/modules.d/bimi.conf changed:
bimi {
  # Required attributes
  #helper_url = "http://127.0.0.1:3030";,
  helper_timeout = 5s;
  helper_sync = true;
  vmc_only = true;
  redis_prefix = 'rs_bimi';
  redis_min_expiry = 24h;
  # Enable in local.d/bimi.conf
  enabled = false;
  .include(try=true,priority=5) "${DBDIR}/dynamic/bimi.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/bimi.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/bimi.conf"
}
/etc/rspamd/modules.d/clickhouse.conf changed:
clickhouse {
  # Push update when 1000 records are collected (1000 if unset)
  limit = 1000;
  # IP:port of Clickhouse server
  # server = "localhost:8123";
  # Timeout to wait for response (5 seconds if unset)
  timeout = 5;
  # How many bits of sending IP to mask in logs for IPv4 (19 if unset)
  ipmask = 19;
  # How many bits of sending IP to mask in logs for IPv6 (48 if unset)
  ipmask6 = 48;
  # Record URL paths? (default false)
  full_urls = false;
  # This parameter points to a map of domain names
  # If a message has a domain in this map in From: header and DKIM signature,
  # record general metadata in a table named after the domain
  #from_tables = "/etc/rspamd/clickhouse_from.map";
  # These are symbols of other checks in Rspamd
  # Set these if you use non-default symbol names (unlikely)
  #bayes_spam_symbols = ["BAYES_SPAM"];
  #bayes_ham_symbols = ["BAYES_HAM"];
  #fann_symbols = ["FANN_SCORE"];
  #fuzzy_symbols = ["FUZZY_DENIED"];
  #whitelist_symbols = ["WHITELIST_DKIM", "WHITELIST_SPF_DKIM", "WHITELIST_DMARC"];
  #dkim_allow_symbols = ["R_DKIM_ALLOW"];
  #dkim_reject_symbols = ["R_DKIM_REJECT"];
  #dmarc_allow_symbols = ["DMARC_POLICY_ALLOW"];
  #dmarc_reject_symbols = ["DMARC_POLICY_REJECT", "DMARC_POLICY_QUARANTINE"];
  #retention {
  #  # disabled by default
  #  enable = true;
  #  # drop | detach, please refer to ClickHouse docs for details
  #  # http://clickhouse-docs.readthedocs.io/en/latest/query_language/queries.html#manipulations-with-partitions-and-parts
  #  method = "drop";
  #  # how many month the data should be kept in ClickHouse
  #  period_months = 3;
  #  # how often run the cleanup process
  #  run_every = "7d";
  #}
  .include(try=true,priority=5) "${DBDIR}/dynamic/clickhouse.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/clickhouse.conf"   .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/clickhouse.conf"
}

/etc/rspamd/modules.d/elastic.conf changed:
elastic {
  # Push update when 10 records are collected (10 if unset)
  limit = 10;
  # IP:port of Elasticsearch server
  #server = "localhost:9200";
  # Timeout to wait for response (5 seconds if unset)
  timeout = 5;
  # Elasticsearch template file (json format)
  #template_file = "${SHAREDIR}/elastic/rspamd_template.json";
  # Kibana prebuild visualizations and dashboard template (json format)
  #kibana_file = "${SHAREDIR}/elastic/kibana.json";
  # Elasticsearch index name pattern
  index_pattern = "rspamd-%Y.%m.%d";
  # Dump debug information
  debug = false;
  # Import kibana template
  import_kibana = false;
  .include(try=true,priority=5) "${DBDIR}/dynamic/elastic.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/elastic.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/elastic.conf"
}

/etc/rspamd/modules.d/history_redis.conf changed:
history_redis {
  #servers = 127.0.0.1:6379; # Redis server to store history
  key_prefix = "rs_history"; # Default key name
  nrows = 200; # Default rows limit
  compress = true; # Use zstd compression when storing data in redis
  subject_privacy = false; # subject privacy is off
  .include(try=true,priority=5) "${DBDIR}/dynamic/history_redis.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/history_redis.conf"   .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/history_redis.conf"
}

/etc/rspamd/modules.d/multimap.conf changed:
multimap {
  # Freemail Addresses
  freemail_envfrom {
    type = "from";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/free.txt.zst";;
    symbol = "FREEMAIL_ENVFROM";
    description = "Envelope From is a Freemail address";
    score = 0.0;
  }
  freemail_envrcpt {
    type = "rcpt";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/free.txt.zst";;
    symbol = "FREEMAIL_ENVRCPT";
    description = "Envelope Recipient is a Freemail address";
    score = 0.0;
  }
  freemail_from {
    type = "header";
    header = "from";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/free.txt.zst";;
    symbol = "FREEMAIL_FROM";
    description = "From is a Freemail address";
    score = 0.0;
  }
  freemail_to {
    type = "header";
    header = "To";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/free.txt.zst";;
    symbol = "FREEMAIL_TO";
    description = "To is a Freemail address";
    score = 0.0;
  }
  freemail_cc {
    type = "header";
    header = "Cc";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/free.txt.zst";;
    symbol = "FREEMAIL_CC";
    description = "To is a Freemail address";
    score = 0.0;
  }
  freemail_replyto {
    type = "header";
    header = "Reply-To";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/free.txt.zst";;
    symbol = "FREEMAIL_REPLYTO";
    description = "Reply-To is a Freemail address";
    score = 0.0;
  }
  # Disposable Addresses
  disposable_envfrom {
    type = "from";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/disposable.txt.zst";;
    symbol = "DISPOSABLE_ENVFROM";
    description = "Envelope From is a Disposable e-mail address";
    score = 0.0;
  }
  disposable_envrcpt {
    type = "rcpt";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/disposable.txt.zst";;
    symbol = "DISPOSABLE_ENVRCPT";
    description = "Envelope Recipient is a Disposable e-mail address";
    score = 0.0;
  }
  disposable_from {
    type = "header";
    header = "from";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/disposable.txt.zst";;
    symbol = "DISPOSABLE_FROM";
    description = "From a Disposable e-mail address";
    score = 0.0;
  }
  disposable_to {
    type = "header";
    header = "To";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/disposable.txt.zst";;
    symbol = "DISPOSABLE_TO";
    description = "To a disposable e-mail address";
    score = 0.0;
  }
  disposable_cc {
    type = "header";
    header = "Cc";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/disposable.txt.zst";;
    symbol = "DISPOSABLE_CC";
    description = "To a disposable e-mail address";
    score = 0.0;
  }
  disposable_replyto {
    type = "header";
    header = "Reply-To";
    filter = "email:domain";
    map = "https://maps.rspamd.com/freemail/disposable.txt.zst";;
    symbol = "DISPOSABLE_REPLYTO";
    description = "Reply-To a disposable e-mail address";
    score = 0.0;
  }
  .include(try=true,priority=5) "${DBDIR}/dynamic/multimap.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/multimap.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/multimap.conf"
}
/* Example setup
sender_from_whitelist_user {
          type = "from";
          filter = "email:user";
          map = "file:///tmp/from.map";
          symbol = "SENDER_FROM_WHITELIST_USER";
          action = "accept"; # Prefilter mode
}
sender_from_regexp {
          type = "header";
          header = "from";
          filter = 'regexp:/.*@/';
          map = "file:///tmp/from_re.map";
          symbol = "SENDER_FROM_REGEXP";
}
url_map {
          type = "url";
          filter = "tld";
          map = "file:///tmp/url.map";
          symbol = "URL_MAP";
}
url_tld_re {
          type = "url";
          filter = 'tld:regexp:/\.[^.]+$/'; # Extracts the last component of URL
          map = "file:///tmp/url.map";
          symbol = "URL_MAP_RE";
}
*/

/etc/rspamd/modules.d/once_received.conf changed:
once_received {
  good_host = "mail";
  bad_host = "static";
  bad_host = "dynamic";
  symbol_strict = "ONCE_RECEIVED_STRICT";
  symbol = "ONCE_RECEIVED";
  symbol_mx = "DIRECT_TO_MX";
  .include(try=true,priority=5) "${DBDIR}/dynamic/once_received.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/once_received.conf"   .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/once_received.conf"
}

/etc/rspamd/modules.d/phishing.conf changed:
phishing {
  symbol = "PHISHING";
  # Disabled by default
  openphish_enabled = false;
  openphish_premium = false;
  openphish_map = "https://www.openphish.com/feed.txt";;
  # Phishtank is disabled by default in the module, so let's enable it here explicitly
  phishtank_enabled = true;
  # Make exclusions for known redirectors and domains
  exceptions = {
    REDIRECTOR_FALSE = [
      "https://maps.rspamd.com/rspamd/redirectors.inc.zst";,
      "$LOCAL_CONFDIR/local.d/maps.d/redirectors.inc",
      "$LOCAL_CONFDIR/local.d/redirectors.inc",
      "fallback+file://${CONFDIR}/maps.d/redirectors.inc"
    ];
    PHISHED_WHITELISTED = [
"glob;https://maps.rspamd.com/rspamd/phishing_whitelist.inc.zst";,
      "glob;$LOCAL_CONFDIR/local.d/maps.d/phishing_whitelist.inc",
      "glob;$LOCAL_CONFDIR/local.d/phishing_whitelist.inc",
    ];
  };
  .include(try=true,priority=5) "${DBDIR}/dynamic/phishing.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/phishing.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/phishing.conf"
}

/etc/rspamd/modules.d/ratelimit.conf changed:
ratelimit {
  #rates {
    # Predefined ratelimit
    #to = {
    #  bucket = {
    #    burst = 100;
    #    rate = 0.01666666666666666666; # leak 1 message per minute
    #  }
    #}
    # or define it with selector
    #other_limit_alt = {
    #  selector = 'rcpts:addr.take_n(5)';
    #  bucket = {
    #    burst = 100;
    #    rate = "1 / 1m"; # leak 1 message per minute
    #  }
    #}
  #}
  # If symbol is specified, then it is inserted *instead* of setting result to soft reject
  #symbol = "R_RATELIMIT";
  # If info_symbol is specified, then it is inserted next to set the result
  #info_symbol = "R_RATELIMIT_INFO";
  whitelisted_rcpts = "postmaster,mailer-daemon";
  .include(try=true,priority=5) "${DBDIR}/dynamic/ratelimit.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/ratelimit.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/ratelimit.conf"
}

/etc/rspamd/modules.d/rbl.conf changed:
rbl {
  default_exclude_users = true;
  default_unknown = true;
  url_whitelist = [
    "https://maps.rspamd.com/rspamd/surbl-whitelist.inc.zst";,
    "$LOCAL_CONFDIR/local.d/maps.d/surbl-whitelist.inc.local",
    "${DBDIR}/surbl-whitelist.inc.local",
    "fallback+file://${CONFDIR}/maps.d/surbl-whitelist.inc"
  ];
  rbls {
    spamhaus {
      symbol = "SPAMHAUS"; # Augmented by prefixes
      rbl = "zen.spamhaus.org";
      # Check types
      checks = ['received', 'from'];
      symbols_prefixes = {
        received = 'RECEIVED',
        from = 'RBL',
      }
      returncodes {
        SPAMHAUS_SBL = "127.0.0.2";
        SPAMHAUS_CSS = "127.0.0.3";
        SPAMHAUS_XBL = ["127.0.0.4", "127.0.0.5",
            "127.0.0.6", "127.0.0.7"];
        SPAMHAUS_PBL = ["127.0.0.10", "127.0.0.11"];
        SPAMHAUS_DROP = "127.0.0.9";
        SPAMHAUS_BLOCKED_OPENRESOLVER = "127.255.255.254";
        SPAMHAUS_BLOCKED= "127.255.255.255";
      }
    }
    mailspike {
      symbol = "MAILSPIKE";
      rbl = "rep.mailspike.net";
      is_whitelist = true;
      checks = ['from'];
      whitelist_exception = "MAILSPIKE";
      whitelist_exception = "RWL_MAILSPIKE_GOOD";
      whitelist_exception = "RWL_MAILSPIKE_NEUTRAL";
      whitelist_exception = "RWL_MAILSPIKE_POSSIBLE";
      whitelist_exception = "RBL_MAILSPIKE_WORST";
      whitelist_exception = "RBL_MAILSPIKE_VERYBAD";
      whitelist_exception = "RBL_MAILSPIKE_BAD";
      returncodes {
        RBL_MAILSPIKE_WORST = "127.0.0.10";
        RBL_MAILSPIKE_VERYBAD = "127.0.0.11";
        RBL_MAILSPIKE_BAD = "127.0.0.12";
        RWL_MAILSPIKE_NEUTRAL = ["127.0.0.16", "127.0.0.15", "127.0.0.14", "127.0.0.13"];
        RWL_MAILSPIKE_POSSIBLE = "127.0.0.17";
        RWL_MAILSPIKE_GOOD = "127.0.0.18";
        RWL_MAILSPIKE_VERYGOOD = "127.0.0.19";
        RWL_MAILSPIKE_EXCELLENT = "127.0.0.20";
      }
    }
    senderscore {
      symbol = "RBL_SENDERSCORE";
      checks = ['from'];
      rbl = "bl.score.senderscore.com";
    }
    sem {
      symbol = "RBL_SEM";
      rbl = "bl.spameatingmonkey.net";
      ipv6 = false;
      checks = ['from'];
    }
    semIPv6 {
      symbol = "RBL_SEM_IPV6";
      rbl = "bl.ipv6.spameatingmonkey.net";
      ipv4 = false;
      ipv6 = true;
      checks = ['from'];
    }
    dnswl {
      symbol = "RCVD_IN_DNSWL";
      rbl = "list.dnswl.org";
      ipv6 = true;
      checks = ['from', 'received'];
      is_whitelist = true;
      whitelist_exception = "RCVD_IN_DNSWL";
      whitelist_exception = "RCVD_IN_DNSWL_NONE";
      whitelist_exception = "RCVD_IN_DNSWL_LOW";
      whitelist_exception = "DNSWL_BLOCKED";
      returncodes {
        RCVD_IN_DNSWL_NONE = "127.0.%d+.0";
        RCVD_IN_DNSWL_LOW = "127.0.%d+.1";
        RCVD_IN_DNSWL_MED = "127.0.%d+.2";
        RCVD_IN_DNSWL_HI = "127.0.%d+.3";
        DNSWL_BLOCKED = "127.0.0.255";
      }
    }
    # Provided by https://virusfree.cz
    virusfree {
      symbol = "RBL_VIRUSFREE_UNKNOWN";
      rbl = "bip.virusfree.cz";
      ipv6 = true;
      checks = ['from'];
      returncodes {
        RBL_VIRUSFREE_BOTNET = "127.0.0.2";
      }
    }
    nixspam {
      symbol = "RBL_NIXSPAM";
      rbl = "ix.dnsbl.manitu.net";
      ipv6 = true;
      checks = ['from'];
    }
    blocklistde {
      symbols_prefixes = {
        received = 'RECEIVED',
        from = 'RBL',
      }
      symbol = "BLOCKLISTDE";
      rbl = "bl.blocklist.de";
      checks = ['from', 'received'];
    }
    # Dkim whitelist
    dnswl_dwl {
      symbol = "DWL_DNSWL";
      rbl = "dwl.dnswl.org";
      checks = ['dkim'];
      ignore_whitelist = true;
      unknown = false;
      returncodes {
        DWL_DNSWL_NONE = "127.0.%d+.0";
        DWL_DNSWL_LOW = "127.0.%d+.1";
        DWL_DNSWL_MED = "127.0.%d+.2";
        DWL_DNSWL_HI = "127.0.%d+.3";
        DWL_DNSWL_BLOCKED = "127.0.0.255";
      }
    }
    RSPAMD_EMAILBL {
      ignore_whitelist = true;
      ignore_defaults = true;
      exclude_users = false;
      emails_delimiter = ".";
      hash_format = "base32";
      hash_len = 32;
      rbl = "email.rspamd.com";
      checks = ['emails', 'replyto'];
      hash = "blake2";
      returncodes = {
        RSPAMD_EMAILBL = "127.0.0.2";
      }
    }
    MSBL_EBL {
      ignore_whitelist = true;
      ignore_defaults = true;
      exclude_users = false;
      rbl = "ebl.msbl.org";
      checks = ['emails', 'replyto'];
      emails_domainonly = false;
      hash = "sha1";
      returncodes = {
        MSBL_EBL = [
          "127.0.0.2",
          "127.0.0.3"
        ];
        MSBL_EBL_GREY = [
          "127.0.1.2",
          "127.0.1.3"
        ];
      }
    }
    # Old SURBL module
    "SURBL_MULTI" {
      ignore_defaults = true;
      rbl = "multi.surbl.org";
      checks = ['emails', 'dkim', 'helo', 'rdns', 'replyto', 'urls'];
      emails_domainonly = true;
      exclude_users = false;
      returnbits = {
        CRACKED_SURBL = 128; # From February 2016
        ABUSE_SURBL = 64;
        MW_SURBL_MULTI = 16;
        PH_SURBL_MULTI = 8;
        SURBL_BLOCKED = 1;
      }
    }
    "URIBL_MULTI" {
      ignore_defaults = true;
      rbl = "multi.uribl.com";
      checks = ['emails', 'dkim', 'helo', 'rdns', 'replyto', 'urls'];
      emails_domainonly = true;
      exclude_users = false;
      returnbits {
        URIBL_BLOCKED = 1;
        URIBL_BLACK = 2;
        URIBL_GREY = 4;
        URIBL_RED = 8;
      }
    }
    "RSPAMD_URIBL" {
      ignore_defaults = true;
      rbl = "uribl.rspamd.com";
      checks = ['emails', 'dkim', 'urls'];
      emails_domainonly = true;
      hash = 'blake2';
      hash_len = 32;
      hash_format = 'base32';
      exclude_users = false;
      returncodes = {
        RSPAMD_URIBL = [
          "127.0.0.2",
        ];
      }
    }
    "DBL" {
      ignore_defaults = true;
      rbl = "dbl.spamhaus.org";
      no_ip = true;
      checks = ['emails', 'dkim', 'helo', 'rdns', 'replyto', 'urls'];
      emails_domainonly = true;
      exclude_users = false;
      returncodes = {
        # spam domain
        DBL_SPAM = "127.0.1.2";
        # phish domain
        DBL_PHISH = "127.0.1.4";
        # malware domain
        DBL_MALWARE = "127.0.1.5";
        # botnet C&C domain
        DBL_BOTNET = "127.0.1.6";
        # abused legit spam
        DBL_ABUSE = "127.0.1.102";
        # abused spammed redirector domain
        DBL_ABUSE_REDIR = "127.0.1.103";
        # abused legit phish
        DBL_ABUSE_PHISH = "127.0.1.104";
        # abused legit malware
        DBL_ABUSE_MALWARE = "127.0.1.105";
        # abused legit botnet C&C
        DBL_ABUSE_BOTNET = "127.0.1.106";
        # error - IP queries prohibited!
        DBL_PROHIBIT = "127.0.1.255";
        # issue #3074
        DBL_BLOCKED_OPENRESOLVER = "127.255.255.254";
        DBL_BLOCKED = "127.255.255.255";
      }
    }
    # Not enabled by default due to privacy concerns! (see also groups.d/surbl_group.conf)
    "SPAMHAUS_ZEN_URIBL" {
      enabled = false;
      rbl = "zen.spamhaus.org";
      checks = ['emails'];
      resolve_ip = true;
      returncodes = {
        URIBL_SBL = "127.0.0.2";
        URIBL_SBL_CSS = "127.0.0.3";
        URIBL_XBL = ["127.0.0.4", "127.0.0.5", "127.0.0.6", "127.0.0.7"];
        URIBL_PBL = ["127.0.0.10", "127.0.0.11"];
        URIBL_DROP = "127.0.0.9";
      }
    }
    "SEM_URIBL_UNKNOWN" {
      ignore_defaults = true;
      rbl = "uribl.spameatingmonkey.net";
      no_ip = true;
      checks = ['emails', 'dkim', 'urls'];
      emails_domainonly = true;
      returnbits {
        SEM_URIBL = 2;
      }
    }
    "SEM_URIBL_FRESH15_UNKNOWN" {
      ignore_defaults = true;
      rbl = "fresh15.spameatingmonkey.net";
      no_ip = true;
      checks = ['emails', 'dkim', 'urls'];
      emails_domainonly = true;
      returnbits {
        SEM_URIBL_FRESH15 = 2;
      }
    }
    # Proved to be broken
    #"RBL_SARBL_BAD" {
    #  suffix = "public.sarbl.org";
    #  noip   = true;
    #  images = true;
    #}
  }
  .include(try=true,priority=5) "${DBDIR}/dynamic/rbl.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/rbl.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/rbl.conf"
}

/etc/rspamd/modules.d/redis.conf changed:
redis {
  #servers = "127.0.0.1"; # Read servers (unless write_servers are unspecified)
  #servers = "master-slave:127.0.0.1,10.0.1.1";
  #write_servers = "127.0.0.1"; # Servers to write data
  #disabled_modules = ["ratelimit"]; # List of modules that should not use redis from this section
  #timeout = 1s;
  #db = "0";
  #password = "some_password";
  .include(try=true,priority=5) "${DBDIR}/dynamic/redis.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/redis.conf"
  .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/redis.conf"
}
/etc/rspamd/modules.d/spamassassin.conf changed:
spamassassin {
  # This config defines no SA files leaving this module efficiently disabled by default
  #ruleset = "/path/to/file";
  # Limit search size to 100 kilobytes for all regular expressions
  #match_limit = 100k;
  # Those regexp atoms will not be passed through hyperscan:
  #pcre_only = ["RULE1", "__RULE2"];
  .include(try=true,priority=5) "${DBDIR}/dynamic/spamassassin.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/spamassassin.conf"   .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/spamassassin.conf"
}
/etc/rspamd/modules.d/url_redirector.conf changed:
url_redirector {
  expire = 1d; # 1 day by default
  timeout = 10; # 10 seconds by default
  nested_limit = 1; # How many redirects to follow
  #proxy = "http://example.com:3128";; # Send request through proxy
  key_prefix = "rdr:"; # default hash name
  check_ssl = false; # check ssl certificates
  max_size = 10k; # maximum body to process
  .include(try=true,priority=5) "${DBDIR}/dynamic/url_redirector.conf"
  .include(try=true,priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/url_redirector.conf"   .include(try=true,priority=10) "$LOCAL_CONFDIR/override.d/url_redirector.conf"
}

/etc/rspamd/options.inc changed:
filters = "chartable,dkim,regexp,fuzzy_check";
one_shot = false;
cache_file = "$DBDIR/symbols.cache";
map_watch_interval = 5min;
map_file_watch_multiplier = 0.1;
dynamic_conf = "$DBDIR/rspamd_dynamic";
history_file = "$DBDIR/rspamd.history";
check_all_filters = false;
dns_max_requests = 64;
max_lua_urls = 1024;
max_urls = 10240;
max_recipients = 1024;
dns {
    timeout = 1s;
    sockets = 16;
    retransmits = 5;
}
tempdir = "/tmp";
url_tld = "${SHAREDIR}/effective_tld_names.dat";
classify_headers = [
    "User-Agent",
    "X-Mailer",
    "Content-Type",
    "X-MimeOLE",
];
control_socket = "$DBDIR/rspamd.sock mode=0600";
history_rows = 200;
explicit_modules = ["settings", "bayes_expiry"];
allow_raw_input = true;
words_decay = 600;
rrd = "${DBDIR}/rspamd.rrd";
stats_file = "${DBDIR}/stats.ucl";
local_addrs = [192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, fd00::/8, 169.254.0.0/16, fe80::/10];
hs_cache_dir = "${DBDIR}/";
task_timeout = 8s;
soft_reject_on_timeout = false;

/etc/rspamd/rspamd.conf changed:
.include "$CONFDIR/common.conf"
options {
    pidfile = "$RUNDIR/rspamd.pid";
    .include "$CONFDIR/options.inc"
    .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/options.inc"
    .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/options.inc"
}
.include(try=true; duplicate=merge) "$CONFDIR/cgp.inc"
.include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/cgp.inc"
logging {
    type = "file";
    filename = "$LOGDIR/rspamd.log";
    .include "$CONFDIR/logging.inc"
    .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/logging.inc"
    .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/logging.inc"
}
worker "normal" {
    bind_socket = "localhost:11333";
    .include "$CONFDIR/worker-normal.inc"
    .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/worker-normal.inc"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/worker-normal.inc"
}
worker "controller" {
    bind_socket = "localhost:11334";
    .include "$CONFDIR/worker-controller.inc"
    .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/worker-controller.inc"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/worker-controller.inc"
}
worker "rspamd_proxy" {
    bind_socket = "localhost:11332";
    .include "$CONFDIR/worker-proxy.inc"
    .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/worker-proxy.inc"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/worker-proxy.inc"
}
worker "fuzzy" {
    bind_socket = "localhost:11335";
    count = -1; # Disable by default
    .include "$CONFDIR/worker-fuzzy.inc"
    .include(try=true; priority=1,duplicate=merge) "$LOCAL_CONFDIR/local.d/worker-fuzzy.inc"     .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/worker-fuzzy.inc"
}

/etc/rspamd/scores.d/content_group.conf changed:
description = "Content rules";
symbols = {
  "PDF_ENCRYPTED" {
    weight = 0.3;
    description = "There is an encrypted PDF in the message";
    one_shot = true;
  }
  "PDF_JAVASCRIPT" {
    weight = 0.1;
    description = "There is an PDF with JavaScript in the message";
    one_shot = true;
  }
  "PDF_SUSPICIOUS" {
    weight = 4.5;
    description = "There is an PDF with suspicious properties in the message";
    one_shot = true;
  }
  "PDF_LONG_TRAILER" {
    weight = 0.2;
    description = "There is an PDF with a long trailer";
    one_shot = true;
  }
  "PDF_MANY_OBJECTS" {
    weight = 0;
    description = "There is a PDF file with too many objects";
    one_shot = true;
  }
  "PDF_TIMEOUT" {
    weight = 0;
    description = "There is a PDF file that caused timeout in processing";
    one_shot = true;
  }
}

/etc/rspamd/scores.d/fuzzy_group.conf changed:
description = "Fuzzy hashes group";
symbols = {
    "FUZZY_UNKNOWN" {
        weight = 5.0;
        description = "Generic fuzzy hash match, bl.rspamd.com";
    }
    "FUZZY_DENIED" {
        weight = 12.0;
        description = "Denied fuzzy hash, bl.rspamd.com";
    }
    "FUZZY_PROB" {
        weight = 5.0;
        description = "Probable fuzzy hash, bl.rspamd.com";
    }
    "FUZZY_WHITE" {
        weight = -2.1;
        description = "Whitelisted fuzzy hash, bl.rspamd.com";
    }
}
/etc/rspamd/scores.d/headers_group.conf changed:
description = "Various headers checks";
max_score = 8.0;
symbols = {
    "FORGED_SENDER" {
        weight = 0.3;
        description = "Sender is forged (different From: header and smtp MAIL FROM: addresses)";
    }
    "R_MIXED_CHARSET" {
        weight = 5.0;
        description = "Mixed characters in a message";
        one_shot = true;
    }
    "R_MIXED_CHARSET_URL" {
        weight = 7.0;
        description = "Mixed characters in a URL inside message";
        one_shot = true;
    }
    "FORGED_RECIPIENTS" {
        weight = 2.0;
        description = "Recipients are not the same as RCPT TO: mail command";
    }
    "FORGED_RECIPIENTS_MAILLIST" {
        weight = 0.0;
        description = "Recipients are not the same as RCPT TO: mail command, but a message from a maillist";
    }
    "FORGED_SENDER_MAILLIST" {
        weight = 0.0;
        description = "Sender is not the same as MAIL FROM: envelope, but a message is from a maillist";
    }
    "ONCE_RECEIVED" {
        weight = 0.1;
        description = "One received header in a message";
    }
    "RDNS_NONE" {
        weight = 1.0;
        description = "Cannot resolve reverse DNS for sender's IP";
    }
    "RDNS_DNSFAIL" {
        weight = 0.0;
        description = "PTR verification DNS error";
    }
    "ONCE_RECEIVED_STRICT" {
        weight = 4.0;
        description = "One received header with 'bad' patterns inside";
    }
    "DIRECT_TO_MX" {
        weight = 0.0;
        description = "Message has been directly delivered from MUA to local MX";
    }
    "MAILLIST" {
        weight = -0.2;
        description = "Message seems to be from maillist";
    }
    "BOUNCE" {
      weight = -0.1;
      description = "(Non) Delivery Status Notification";
    }
}

/etc/rspamd/scores.d/hfilter_group.conf changed:
description = "SMTP envelope filter";
symbols = {
    "HFILTER_HELO_BAREIP" {
        weight = 3.0;
        description = "Helo host is bare ip";
    }
    "HFILTER_HELO_BADIP" {
        weight = 4.5;
        description = "Helo host is very bad ip";
    }
    "HFILTER_HELO_1" {
        weight = 0.5;
        description = "Helo host checks (very low)";
    }
    "HFILTER_HELO_2" {
        weight = 1.0;
        description = "Helo host checks (low)";
    }
    "HFILTER_HELO_3" {
        weight = 2.0;
        description = "Helo host checks (medium)";
    }
    "HFILTER_HELO_4" {
        weight = 2.5;
        description = "Helo host checks (hard)";
    }
    "HFILTER_HELO_5" {
        weight = 3.0;
        description = "Helo host checks (very hard)";
    }
    "HFILTER_HOSTNAME_1" {
        weight = 0.5;
        description = "Hostname checks (very low)";
    }
    "HFILTER_HOSTNAME_2" {
        weight = 1.0;
        description = "Hostname checks (low)";
    }
    "HFILTER_HOSTNAME_3" {
        weight = 2.0;
        description = "Hostname checks (medium)";
    }
    "HFILTER_HOSTNAME_4" {
        weight = 2.5;
        description = "Hostname checks (hard)";
    }
    "HFILTER_HOSTNAME_5" {
        weight = 3.0;
        description = "Hostname checks (very hard)";
    }
    "HFILTER_HELO_NORESOLVE_MX" {
        weight = 0.2;
        description = "MX found in Helo and no resolve";
    }
    "HFILTER_HELO_NORES_A_OR_MX" {
        weight = 0.3;
        description = "Helo no resolve to A or MX";
    }
    "HFILTER_HELO_IP_A" {
        weight = 1.0;
        description = "Helo A IP != hostname IP";
    }
    "HFILTER_HELO_NOT_FQDN" {
        weight = 2.0;
        description = "Helo not FQDN";
    }
    "HFILTER_FROMHOST_NORESOLVE_MX" {
        weight = 0.5;
        description = "MX found in FROM host and no resolve";
    }
    "HFILTER_FROMHOST_NORES_A_OR_MX" {
        weight = 1.5;
        description = "FROM host no resolve to A or MX";
    }
    "HFILTER_FROMHOST_NOT_FQDN" {
        weight = 3.0;
        description = "FROM host not FQDN";
    }
    "HFILTER_FROM_BOUNCE" {
        weight = 0.0;
        description = "Bounce message";
    }
/*
    # Disabled by default
    "HFILTER_MID_NORESOLVE_MX" {
        weight = 0.5;
        description = "MX found in Message-id host and no resolve";
    }
    "HFILTER_MID_NORES_A_OR_MX" {
        weight = 0.5;
        name = ;
        description = "Message-id host no resolve to A or MX";
    }
    "HFILTER_MID_NOT_FQDN" {
        weight = 0.5;
        description = "Message-id host not FQDN";
    }
*/
    "HFILTER_HOSTNAME_UNKNOWN" {
        weight = 2.5;
        description = "Unknown client hostname (PTR or FCrDNS verification failed)";
    }
    "HFILTER_RCPT_BOUNCEMOREONE" {
        weight = 1.5;
        description = "Message from bounce and over 1 recipient";
    }
    "HFILTER_URL_ONLY" {
        weight = 2.2;
        description = "URL only in body";
    }
    "HFILTER_URL_ONELINE" {
        weight = 2.5;
        description = "One line URL and text in body";
    }
}

/etc/rspamd/scores.d/mime_types_group.conf changed:
description = "Mime attachments rules";
max_score = 10.0;
symbols = {
    "MIME_GOOD" {
        weight = -0.1;
        description = "Known content-type";
        one_shot = true;
    }
    "MIME_BAD" {
        weight = 1.0;
        description = "Known bad content-type";
        one_shot = true;
    }
    "MIME_UNKNOWN" {
        weight = 0.1;
        description = "Missing or unknown content-type";
        one_shot = true;
    }
    "MIME_BAD_ATTACHMENT" {
        weight = 4.0;
        description = "Invalid attachment mime type";
        one_shot = true;
    }
    "MIME_ENCRYPTED_ARCHIVE" {
        weight = 2.0;
        description = "Encrypted archive in a message";
        one_shot = true;
    }
    "MIME_OBFUSCATED_ARCHIVE" {
        weight = 8.0;
        description = "Archive has files with clear obfuscation signs";
        one_shot = true;
    }
    "MIME_EXE_IN_GEN_SPLIT_RAR" {
        weight = 5.0;
        description = "EXE file in RAR archive with generic split extension (e.g. .001)";
        one_shot = true;
    }
    "MIME_ARCHIVE_IN_ARCHIVE" {
        weight = 5.0;
        description = "Archive within another archive";
        one_shot = true;
    }
    "MIME_DOUBLE_BAD_EXTENSION" {
        weight = 3.0; # This rule has dynamic weight up to 4.0
        description = "Bad extension cloaking";
        one_shot = true;
    }
    "MIME_BAD_EXTENSION" {
        weight = 2.0; # This rule has dynamic weight up to 4.0
        description = "Bad extension";
        one_shot = true;
    }
    "MIME_BAD_UNICODE" {
        weight = 8.0;
        description = "Filename with known obscured unicode characters";
        one_shot = true;
    }
}
/etc/rspamd/scores.d/mua_group.conf changed:
description = "MUA forgeries";
symbols = {
    "FORGED_MUA_MAILLIST" {
        weight = 0.0;
        description = "Avoid false positives for FORGED_MUA_* in maillist";
    }
}
/etc/rspamd/scores.d/phishing_group.conf changed:
description = "Phishing in emails";
max_score = 10.0;
symbols = {
    "PHISHING" {
        weight = 4.0;
        description = "Phished URL";
        one_shot = true;
    }
    "PHISHED_OPENPHISH" {
        weight = 7.0;
        description = "Phished URL found in openphish.com";
    }
    "PHISHED_PHISHTANK" {
        weight = 7.0;
        description = "Phished URL found in phishtank.com";
    }
    HACKED_WP_PHISHING {
        weight = 4.5;
        description = "Phishing message from hacked wordpress";
    }
    REDIRECTOR_FALSE {
        weight = 0.0;
        description = "Phishing exclusion symbol for known redirectors";
    }
    PHISHED_WHITELISTED {
        weight = 0.0;
        description = "Phishing exclusion symbol for known exceptions";
    }
}
/etc/rspamd/scores.d/policies_group.conf changed:
description = "SPF, DKIM, DMARC, ARC";
symbols = {
    # SPF
    "R_SPF_FAIL" {
        weight = 1.0;
        description = "SPF verification failed";
        groups = ["spf"];
    }
    "R_SPF_SOFTFAIL" {
        weight = 0.0;
        description = "SPF verification soft-failed";
        groups = ["spf"];
    }
    "R_SPF_NEUTRAL" {
        weight = 0.0;
        description = "SPF policy is neutral";
        groups = ["spf"];
    }
    "R_SPF_ALLOW" {
        weight = -0.2;
        description = "SPF verification allows sending";
        groups = ["spf"];
    }
    "R_SPF_DNSFAIL" {
        weight = 0.0;
        description = "SPF DNS failure";
        groups = ["spf"];
    }
    "R_SPF_NA" {
        weight = 0.0;
        description = "Missing SPF record";
        one_shot = true;
        groups = ["spf"];
    }
    "R_SPF_PERMFAIL" {
        weight = 0.0;
        description = "SPF record is malformed or persistent DNS error";
        groups = ["spf"];
    }
    # DKIM
    "R_DKIM_REJECT" {
        weight = 1.0;
        description = "DKIM verification failed";
        one_shot = true;
        groups = ["dkim"];
    }
    "R_DKIM_TEMPFAIL" {
        weight = 0.0;
        description = "DKIM verification soft-failed";
        groups = ["dkim"];
    }
    "R_DKIM_PERMFAIL" {
        weight = 0.0;
        description = "DKIM verification hard-failed (invalid)";
        groups = ["dkim"];
    }
    "R_DKIM_ALLOW" {
        weight = -0.2;
        description = "DKIM verification succeed";
        one_shot = true;
        groups = ["dkim"];
    }
    "R_DKIM_NA" {
        weight = 0.0;
        description = "Missing DKIM signature";
        one_shot = true;
        groups = ["dkim"];
    }
    # DMARC
    "DMARC_POLICY_ALLOW" {
        weight = -0.5;
        description = "DMARC permit policy";
        groups = ["dmarc"];
    }
    "DMARC_POLICY_ALLOW_WITH_FAILURES" {
        weight = -0.5;
        description = "DMARC permit policy with DKIM/SPF failure";
        groups = ["dmarc"];
    }
    "DMARC_POLICY_REJECT" {
        weight = 2.0;
        description = "DMARC reject policy";
        groups = ["dmarc"];
    }
    "DMARC_POLICY_QUARANTINE" {
        weight = 1.5;
        description = "DMARC quarantine policy";
        groups = ["dmarc"];
    }
    "DMARC_POLICY_SOFTFAIL" {
        weight = 0.1;
        description = "DMARC failed";
        groups = ["dmarc"];
    }
    "DMARC_NA" {
        weight = 0.0;
        description = "No DMARC record";
        groups = ["dmarc"];
     }
    # ARC
    "ARC_ALLOW" {
        weight = -1.0;
        description = "ARC checks success";
        groups = ["arc"];
    }
    "ARC_REJECT" {
        weight = 1.0;
        description = "ARC checks failed";
        groups = ["arc"];
    }
    "ARC_INVALID" {
        weight = 0.5;
        description = "ARC structure invalid";
        groups = ["arc"];
    }
    "ARC_DNSFAIL" {
        weight = 0.0;
        description = "ARC DNS error";
        groups = ["arc"];
    }
    "ARC_NA" {
        weight = 0.0;
        description = "ARC signature absent";
        groups = ["arc"];
    }
}

/etc/rspamd/scores.d/rbl_group.conf changed:
description = "IP DNS lists";
symbols = {
    "DNSWL_BLOCKED" {
        weight = 0.0;
        description = "Resolver blocked due to excessive queries";
        groups = ["dnswl", "blocked"];
    }
    "RCVD_IN_DNSWL" {
        weight = 0.0;
        description = "Unrecognised result from https://www.dnswl.org";;
        groups = ["dnswl"];
    }
    "RCVD_IN_DNSWL_NONE" {
        weight = 0.0;
        description = "Sender listed at https://www.dnswl.org, no trust";
        groups = ["dnswl"];
    }
    "RCVD_IN_DNSWL_LOW" {
        weight = -0.1;
        description = "Sender listed at https://www.dnswl.org, low trust";
        groups = ["dnswl"];
    }
    "RCVD_IN_DNSWL_MED" {
        weight = -0.2;
        description = "Sender listed at https://www.dnswl.org, medium trust";
        groups = ["dnswl"];
    }
    "RCVD_IN_DNSWL_HI" {
        weight = -0.5;
        description = "Sender listed at https://www.dnswl.org, high trust";
        groups = ["dnswl"];
    }
    "DWL_DNSWL_BLOCKED" {
        weight = 0.0;
        description = "Resolver blocked due to excessive queries (dwl)";
        groups = ["dnswl", "blocked"];
    }
    "DWL_DNSWL" {
        weight = 0.0;
        description = "Unrecognised result from https://www.dnswl.org (dwl)";
        groups = ["dnswl"];
    }
    "DWL_DNSWL_NONE" {
        weight = 0.0;
        description = "Message has a valid dkim signature originated from domain listed at https://www.dnswl.org, no trust";
        groups = ["dnswl"];
    }
    "DWL_DNSWL_LOW" {
        weight = -1.0;
        description = "Message has a valid dkim signature originated from domain listed at https://www.dnswl.org, low trust";
        groups = ["dnswl"];
    }
    "DWL_DNSWL_MED" {
        weight = -2.0;
        description = "Message has a valid dkim signature originated from domain listed at https://www.dnswl.org, medium trust";
        groups = ["dnswl"];
    }
    "DWL_DNSWL_HI" {
        weight = -3.5;
        description = "Message has a valid dkim signature originated from domain listed at https://www.dnswl.org, high trust";
        groups = ["dnswl"];
    }
    "RBL_SPAMHAUS" {
        weight = 0.0;
        description = "Unrecognised result from Spamhaus ZEN";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_SBL" {
        weight = 4.0;
        description = "From address is listed in ZEN SBL";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_CSS" {
        weight = 2.0;
        description = "From address is listed in ZEN CSS";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_XBL" {
        weight = 4.0;
        description = "From address is listed in ZEN XBL";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_XBL_ANY" {
        weight = 4.0;
        description = "From or received address is listed in ZEN XBL (any list)";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_PBL" {
        weight = 2.0;
        description = "From address is listed in ZEN PBL (ISP list)";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_DROP" {
        weight = 7.0;
        description = "From address is listed in ZEN DROP BL";
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_BLOCKED_OPENRESOLVER" {
        weight = 0.0;
        description = "You are querying Spamhaus from an open resolver, please see https://www.spamhaus.org/returnc/pub/";;
        groups = ["spamhaus"];
    }
    "RBL_SPAMHAUS_BLOCKED" {
        weight = 0.0;
        description = "You are exceeding the query limit, please see https://www.spamhaus.org/returnc/vol/";;
        groups = ["spamhaus"];
    }
    "RECEIVED_SPAMHAUS_SBL" {
        weight = 3.0;
        description = "Received address is listed in ZEN SBL";
        groups = ["spamhaus"];
        one_shot = true;
    }
    "RECEIVED_SPAMHAUS_CSS" {
        weight = 1.0;
        description = "Received address is listed in ZEN CSS";
        groups = ["spamhaus"];
        one_shot = true;
    }
    "RECEIVED_SPAMHAUS_XBL" {
        weight = 3.0;
        description = "Received address is listed in ZEN XBL";
        groups = ["spamhaus"];
        one_shot = true;
    }
    "RECEIVED_SPAMHAUS_PBL" {
        weight = 0.0;
        description = "Received address is listed in ZEN PBL (ISP list)";
        groups = ["spamhaus"];
        one_shot = true;
    }
    "RECEIVED_SPAMHAUS_DROP" {
        weight = 6.0;
        description = "Received address is listed in ZEN DROP BL";
        groups = ["spamhaus"];
        one_shot = true;
    }
    "RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER" {
        weight = 0.0;
        description = "You are querying Spamhaus from an open resolver, please see https://www.spamhaus.org/returnc/pub/";;
        groups = ["spamhaus"];
    }
    "RECEIVED_SPAMHAUS_BLOCKED" {
        weight = 0.0;
        description = "You are exceeding the query limit, please see https://www.spamhaus.org/returnc/vol/";;
        groups = ["spamhaus"];
    }
    "RBL_SENDERSCORE" {
        weight = 2.0;
        description = "From address is listed in senderscore.com BL";
    }
    "MAILSPIKE" {
        weight = 0.0;
        description = "Unrecognised result from Mailspike";
        groups = ["mailspike"];
    }
    "RWL_MAILSPIKE_NEUTRAL" {
        weight = 0.0;
        description = "Neutral result from Mailspike";
        groups = ["mailspike"];
    }
    "RBL_MAILSPIKE_WORST" {
        weight = 2.0;
        description = "From address is listed in RBL - worst possible reputation";
        groups = ["mailspike"];
    }
    "RBL_MAILSPIKE_VERYBAD" {
        weight = 1.5;
        description = "From address is listed in RBL - very bad reputation";
        groups = ["mailspike"];
    }
    "RBL_MAILSPIKE_BAD" {
        weight = 1.0;
        description = "From address is listed in RBL - bad reputation";
        groups = ["mailspike"];
    }
    "RWL_MAILSPIKE_POSSIBLE" {
        weight = 0.0;
        description = "From address is listed in RWL - possibly legit";
        groups = ["mailspike"];
    }
    "RWL_MAILSPIKE_GOOD" {
        weight = -0.1;
        description = "From address is listed in RWL - good reputation";
        groups = ["mailspike"];
    }
    "RWL_MAILSPIKE_VERYGOOD" {
        weight = -0.2;
        description = "From address is listed in RWL - very good reputation";
        groups = ["mailspike"];
    }
    "RWL_MAILSPIKE_EXCELLENT" {
        weight = -0.4;
        description = "From address is listed in RWL - excellent reputation";
        groups = ["mailspike"];
    }
    "RBL_SEM" {
        weight = 1.0;
        description = "From address is listed in Spameatingmonkey RBL";
        groups = ["sem"];
    }
    "RBL_SEM_IPV6" {
        weight = 1.0;
        description = "From address is listed in Spameatingmonkey RBL (IPv6)";
        groups = ["sem"];
    }
    "RBL_VIRUSFREE_BOTNET" {
        weight = 2.0;
        description = "From address is listed in virusfree.cz BL";
    }
    "RBL_NIXSPAM" {
        weight = 4.0;
        description = "From address is listed in NiX Spam (http://www.dnsbl.manitu.net/)";
    }
    "RBL_BLOCKLISTDE" {
        weight = 4.0;
        description = "From address is listed in Blocklist (https://www.blocklist.de/)";
        groups = ["blocklistde"];
    }
    "RECEIVED_BLOCKLISTDE" {
        weight = 3.0;
        description = "Received address is listed in Blocklist (https://www.blocklist.de/)";
        groups = ["blocklistde"];
        one_shot = true;
    }
}

/etc/rspamd/scores.d/statistics_group.conf changed:
description = "Statistical symbols";
symbols = {
    "BAYES_SPAM" {
        weight = 5.1;
        description = "Message probably spam, probability: ";
    }
    "BAYES_HAM" {
        weight = -3.0;
        description = "Message probably ham, probability: ";
    }
}
/etc/rspamd/scores.d/subject_group.conf changed:
description = "Subject filters";
symbols = {
}
max_score = 6.0;
/etc/rspamd/scores.d/surbl_group.conf changed:
description = "URL DNS lists";
max_score = 12.5;
symbols = {
    "SURBL_BLOCKED" {
        weight = 0.0;
        description = "SURBL: blocked by policy/overusage";
        one_shot = true;
        groups = ["surblorg", "blocked"];
    }
    "PH_SURBL_MULTI" {
        weight = 5.5;
        description = "SURBL: Phishing sites";
        one_shot = true;
        groups = ["surblorg", "phishing"];
    }
    "MW_SURBL_MULTI" {
        weight = 5.5;
        description = "SURBL: Malware sites";
        one_shot = true;
        groups = ["surblorg"];
    }
    "ABUSE_SURBL" {
        weight = 5.5;
        description = "SURBL: ABUSE";
        one_shot = true;
        groups = ["surblorg"];
    }
    "CRACKED_SURBL" {
        weight = 4.0;
        description = "SURBL: cracked site";
        one_shot = true;
        groups = ["surblorg"];
    }
    "RSPAMD_URIBL" {
        weight = 4.5;
        description = "Rspamd uribl, bl.rspamd.com";
        one_shot = true;
        groups = ["rspamdbl"];
    }
    "RSPAMD_EMAILBL" {
        weight = 2.5;
        description = "Rspamd emailbl, bl.rspamd.com";
        one_shot = true;
        groups = ["rspamdbl"];
    }
    "MSBL_EBL" {
        weight = 7.5;
        description = "MSBL emailbl";
        one_shot = true;
        groups = ["ebl"];
    }
    "MSBL_EBL_GREY" {
        weight = 0.5; # TODO: test it
        description = "MSBL emailbl grey list";
        one_shot = true;
        groups = ["ebl"];
    }
    "SEM_URIBL_UNKNOWN" {
        weight = 0.0;
        description = "Spameatingmonkey uribl: unknown result";
        one_shot = true;
        groups = ["sem"];
    }
    "SEM_URIBL" {
        weight = 3.5;
        description = "Spameatingmonkey uribl";
        one_shot = true;
        groups = ["sem"];
    }
    "SEM_URIBL_FRESH15_UNKNOWN" {
        weight = 0.0;
        description = "Spameatingmonkey Fresh15 uribl: unknown result";
        one_shot = true;
        groups = ["sem"];
    }
    "SEM_URIBL_FRESH15" {
        weight = 3.0;
        description = "Spameatingmonkey uribl. Domains registered in the last 15 days (.AERO,.BIZ,.COM,.INFO,.NAME,.NET,.PRO,.SK,.TEL,.US)";
        one_shot = true;
        groups = ["sem"];
    }
    "DBL" {
        weight = 0.0;
        description = "DBL unknown result";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_SPAM" {
        weight = 6.5;
        description = "DBL uribl spam";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_PHISH" {
        weight = 6.5;
        description = "DBL uribl phishing";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_MALWARE" {
        weight = 6.5;
        description = "DBL uribl malware";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_BOTNET" {
        weight = 5.5;
        description = "DBL uribl botnet C&C domain";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_ABUSE" {
        weight = 6.5;
        description = "DBL uribl abused legit spam";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_ABUSE_REDIR" {
        weight = 1.5;
        description = "DBL uribl abused spammed redirector domain";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_ABUSE_PHISH" {
        weight = 7.5;
        description = "DBL uribl abused legit phish";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_ABUSE_MALWARE" {
        weight = 7.5;
        description = "DBL uribl abused legit malware";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_ABUSE_BOTNET" {
        weight = 5.5;
        description = "DBL uribl abused legit botnet C&C";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_PROHIBIT" {
        weight = 0.0;
        description = "DBL uribl IP queries prohibited!";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_BLOCKED_OPENRESOLVER" {
        weight = 0.0;
        description = "You are querying Spamhaus from an open resolver, please see https://www.spamhaus.org/returnc/pub/";;
        one_shot = true;
        groups = ["spamhaus"];
    }
    "DBL_BLOCKED" {
        weight = 0.0;
        description = "You are exceeding the query limit, please see https://www.spamhaus.org/returnc/vol/";;
        one_shot = true;
        groups = ["spamhaus"];
    }
    "URIBL_MULTI" {
        weight = 0.0;
        description = "uribl.com: unrecognised result";
        one_shot = true;
        groups = ["uribl"];
    }
    "URIBL_BLOCKED" {
        weight = 0.0;
        description = "uribl.com: query refused";
        one_shot = true;
        groups = ["uribl", "blocked"];
    }
    "URIBL_BLACK" {
        weight = 7.5;
        description = "uribl.com black url";
        one_shot = true;
        groups = ["uribl"];
    }
    "URIBL_RED" {
        weight = 3.5;
        description = "uribl.com red url";
        one_shot = true;
        groups = ["uribl"];
    }
    "URIBL_GREY" {
        weight = 1.5;
        description = "uribl.com grey url";
        one_shot = true;
        groups = ["uribl"];
    }
    "SPAMHAUS_ZEN_URIBL" {
        ignore = true;
        weight = 0.0;
        description = "Spamhaus ZEN URIBL: Filtered result";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "URIBL_SBL" {
        ignore = true;
        weight = 6.5;
        description = "A domain in the message body resolves to an IP listed in Spamhaus SBL";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "URIBL_SBL_CSS" {
        ignore = true;
        weight = 6.5;
        description = "A domain in the message body resolves to an IP listed in Spamhaus SBL CSS";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "URIBL_XBL" {
        ignore = true;
        weight = 1.5;
        description = "A domain in the message body resolves to an IP listed in Spamhaus XBL";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "URIBL_PBL" {
        ignore = true;
        weight = 0.01;
        description = "A domain in the message body resolves to an IP listed in Spamhaus PBL";
        one_shot = true;
        groups = ["spamhaus"];
    }
    "URIBL_DROP" {
        ignore = true;
        weight = 5.0;
        description = "A domain in the message body resolves to an IP listed in Spamhaus DROP";
        one_shot = true;
        groups = ["spamhaus"];
    }
    #"RBL_SARBL_BAD" {
    #    weight = 2.5;
    #    description = "A domain in the message body is blacklisted in SARBL";
    #    one_shot = true;
    #}
}

/etc/rspamd/scores.d/whitelist_group.conf changed:
description = "White lists group";
max_score = 10.0;
symbols = {
    "WHITELIST_SPF" {
        weight = -1.0;
        description = "Mail comes from the whitelisted domain and has a valid SPF policy";
        groups = ["spf"];
    }
    "BLACKLIST_SPF" {
        weight = 1.0;
        description = "Mail comes from the whitelisted domain and has no valid SPF policy";
        groups = ["spf"];
    }
    "WHITELIST_DKIM" {
        weight = -1.0;
        description = "Mail comes from the whitelisted domain and has a valid DKIM signature";
        groups = ["dkim"];
    }
    "BLACKLIST_DKIM" {
        weight = 2.0;
        description = "Mail comes from the whitelisted domain and has non-valid DKIM signature";
        groups = ["dkim"];
    }
    "WHITELIST_SPF_DKIM" {
        weight = -3.0;
        description = "Mail comes from the whitelisted domain and has valid SPF and DKIM policies";
        groups = ["spf", "dkim"];
    }
    "BLACKLIST_SPF_DKIM" {
        weight = 3.0;
        description = "Mail comes from the whitelisted domain and has no valid SPF policy or a bad DKIM signature";
        groups = ["spf", "dkim"];
    }
    "WHITELIST_DMARC" {
        weight = -7.0;
        description = "Mail comes from the whitelisted domain and has valid DMARC and DKIM policies";
        groups = ["dmarc", "spf", "dkim"];
    }
    "BLACKLIST_DMARC" {
        weight = 6.0;
        description = "Mail comes from the whitelisted domain and has failed DMARC and DKIM policies";
        groups = ["dmarc", "spf", "dkim"];
    }
}

/etc/rspamd/statistic.conf changed:
classifier "bayes" {
  # name = "custom";  # 'name' parameter must be set if multiple classifiers are defined
  tokenizer {
    name = "osb";
  }
  cache {
  }
  new_schema = true; # Always use new schema
  store_tokens = false; # Redefine if storing of tokens is desired
  signatures = false; # Store learn signatures
  #per_user = true; # Enable per user classifier
  min_tokens = 11;
  backend = "redis";
  min_learns = 200;
  statfile {
    #symbol = "BAYES_HAM";
    #spam = false;
  }
  statfile {
    symbol = "BAYES_SPAM";
    spam = true;
  }
  learn_condition = 'return require("lua_bayes_learn").can_learn';
  # Autolearn sample
  # autolearn {
  #  spam_threshold = 6.0; # When to learn spam (score >= threshold and action is reject)   #  junk_threshold = 4.0; # When to learn spam (score >= threshold and action is rewrite subject or add header, and has two or more positive results)   #  ham_threshold = -0.5; # When to learn ham (score <= threshold and action is no action, and score is negative or has three or more negative results)
  #  check_balance = true; # Check spam and ham balance
  #  min_balance = 0.9; # Keep diff for spam/ham learns for at least this value
  #}
  .include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/classifier-bayes.conf"   .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/classifier-bayes.conf"
}
.include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/statistic.conf"
.include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/statistic.conf"

/etc/rspamd/worker-proxy.inc changed:
milter = yes; # Enable milter mode
timeout = 120s; # Needed for Milter usually
upstream "local" {
  default = yes;
  hosts = "localhost";
}
count = 1; # Do not spawn too many processes of this type
max_retries = 5; # How many times master is queried in case of failure
discard_on_reject = false; # Discard message instead of rejection
quarantine_on_reject = false; # Tell MTA to quarantine rejected messages
spam_header = "X-Spam"; # Use the specific spam header
reject_message = "Spam message rejected"; # Use custom rejection message


-- no debconf information


Reply via email to