From e4a3878532f3efdbad08f9b057b0049da1ae5013 Mon Sep 17 00:00:00 2001 From: John Coffey Date: Wed, 28 Oct 2026 14:46:40 -0700 Subject: [PATCH] Keep the spam rules on v3.0.2 and maintain them here spam-filter v3.0.3 follows upstream's 1.0 server: it renames the AI classifier's LLM_* tags to AI_* and the lookups' refresh setting to refreshInterval, neither of which this server uses. Taken in, it would score the classifier's verdicts at 0 on new installs and quietly reset every lookup's refresh interval. The rules stay on v3.0.2 and are maintained here from now on, versioned 3.0.2-inbuxa.N. The first change adds scores for the DKIM2 result tags the server already emits, with v3.0.3's values: DKIM2_ALLOW -0.2, DKIM2_REJECT 1.0, the others 0. spam-rules-watch only watched spam-filter, so it goes too. --- .gitea/workflows/spam-rules-watch.yml | 83 ------------------ THIRD-PARTY.md | 2 +- crates/common/src/manager/spam_rules.rs | 16 ++-- resources/spam-filter/README.md | 44 ++++++---- .../spam-filter/spam-filter-rules.json.gz | Bin 21488 -> 20942 bytes 5 files changed, 40 insertions(+), 105 deletions(-) delete mode 100644 .gitea/workflows/spam-rules-watch.yml diff --git a/.gitea/workflows/spam-rules-watch.yml b/.gitea/workflows/spam-rules-watch.yml deleted file mode 100644 index eb9ecdf6..00000000 --- a/.gitea/workflows/spam-rules-watch.yml +++ /dev/null @@ -1,83 +0,0 @@ -# Watch spam-filter, whose rules the server bundles (resources/spam-filter/), -# and open an issue when it publishes a newer release than the one -# BUNDLED_SPAM_RULES_VERSION names on main, so it waits in the tracker until -# someone takes it in as resources/spam-filter/README.md describes. -# -# Reads metadata only: the releases list from GitHub's API and spam_rules.rs -# from Gitea's. Drafts and pre-releases are ignored. An issue is opened once -# per release: an existing one with the same title, open or closed, stops a -# second. -# -# This was upstream-watch, which also opened an issue for each new release of -# the server the fork was built on. 0.16.27 was the last import (2026-10-27), -# so that half is gone. -# -# Daily 06:17 UTC; run it by hand with workflow_dispatch. -name: spam-rules-watch - -on: - schedule: - - cron: '17 6 * * *' - workflow_dispatch: - -concurrency: - group: spam-rules-watch - cancel-in-progress: false - -jobs: - spam-rules-watch: - runs-on: light - container: - image: python:3.13-slim@sha256:8d9d0b8bcf6506481eae4907c18f5e3e7902e629f5f6d684f9e7c32e85e3ddf0 # 3.13-slim - env: - TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPO: ${{ github.repository }} - steps: - - shell: bash - run: | - python3 - <<'PY' - import base64, json, os, re, sys, urllib.request - - api = f"{os.environ['CI_SERVER_INTERNAL']}/api/v1/repos/{os.environ['REPO']}" - def call(method, url, body=None, token=os.environ["TOKEN"]): - headers = {"Content-Type": "application/json", "User-Agent": "inbuxa-spam-rules-watch"} - if token: - headers["Authorization"] = f"token {token}" - req = urllib.request.Request(url, method=method, headers=headers, - data=json.dumps(body).encode() if body is not None else None) - with urllib.request.urlopen(req, timeout=30) as r: - return json.load(r) - SEMVER = re.compile(r"^v(\d+)\.(\d+)\.(\d+)$") - def key(tag): - return tuple(int(x) for x in SEMVER.match(tag).groups()) - - # The spam filter rules bundled with the server (resources/spam-filter/): - # an issue when spam-filter publishes a newer release than the one - # BUNDLED_SPAM_RULES_VERSION names on main. - src = call("GET", f"{api}/contents/crates/common/src/manager/spam_rules.rs?ref=main") - text = base64.b64decode(src["content"]).decode() - m = re.search(r'BUNDLED_SPAM_RULES_VERSION: &str = "(\d+\.\d+\.\d+)"', text) - if not m: - print("Can't read BUNDLED_SPAM_RULES_VERSION from spam_rules.rs", file=sys.stderr); sys.exit(1) - bundled = "v" + m.group(1) - rels = call("GET", "https://api.github.com/repos/stalwartlabs/spam-filter/releases?per_page=30", token=None) - newer = sorted((r for r in rels - if not r["draft"] and not r["prerelease"] and SEMVER.match(r["tag_name"]) - and key(r["tag_name"]) > key(bundled)), - key=lambda r: key(r["tag_name"])) - if not newer: - print(f"Up to date: the bundled spam rules are {bundled}, the newest release."); sys.exit(0) - latest = newer[-1] - tag = latest["tag_name"] - title = f"Update the bundled spam rules to {tag}" - existing = {i["title"] for i in call("GET", f"{api}/issues?state=all&type=issues&q=bundled+spam+rules&limit=50")} - if title in existing: - print(f"spam rules {tag}: issue already exists."); sys.exit(0) - body = (f"spam-filter published {tag} on {latest['published_at'][:10]}. " - f"The server bundles {bundled}.\n\n" - "Update it as resources/spam-filter/README.md describes: take the rules file " - f"from the {tag} release (by tag, not `latest`), set BUNDLED_SPAM_RULES_VERSION, " - "and run the antispam test.") - issue = call("POST", f"{api}/issues", {"title": title, "body": body}) - print(f"spam rules {tag}: opened #{issue['number']}.") - PY diff --git a/THIRD-PARTY.md b/THIRD-PARTY.md index 8ca017a7..ac299df7 100644 --- a/THIRD-PARTY.md +++ b/THIRD-PARTY.md @@ -24,7 +24,7 @@ carry their own license files. | `crates/common/src/network/acme/directory.rs`, `crates/common/src/network/acme/jose.rs`, `crates/common/src/network/acme/order.rs` | [rustls-acme](https://github.com/FlorianUekermann/rustls-acme) (MIT or Apache-2.0) | Copyright (c) Florian Uekermann | | `crates/types/src/id.rs` | [crockford](https://github.com/archer884/crockford) (MIT or Apache-2.0) | Copyright (c) 2017 J/A | | `crates/nlp/src/tokenizers/types.rs` | test cases from [linkify](https://github.com/robinst/linkify) (MIT or Apache-2.0) | Copyright (c) 2017 Robin Stocker | -| `resources/spam-filter/spam-filter-rules.json.gz` | the published rules of [spam-filter](https://github.com/stalwartlabs/spam-filter) v3.0.2, unmodified, built into the server as its default spam rules (MIT or Apache-2.0) | Copyright (C) 2024, Stalwart Labs LLC | +| `resources/spam-filter/spam-filter-rules.json.gz` | the published rules of [spam-filter](https://github.com/stalwartlabs/spam-filter) v3.0.2, with the fork's changes listed in `resources/spam-filter/README.md`, built into the server as its default spam rules (MIT or Apache-2.0) | Copyright (C) 2024, Stalwart Labs LLC | Each notice above applies with this permission notice: diff --git a/crates/common/src/manager/spam_rules.rs b/crates/common/src/manager/spam_rules.rs index 32f9a1e5..289021af 100644 --- a/crates/common/src/manager/spam_rules.rs +++ b/crates/common/src/manager/spam_rules.rs @@ -29,13 +29,14 @@ use store::{ }; use trc::AddContext; -/// The version of spam-filter the embedded rules come from. -pub const BUNDLED_SPAM_RULES_VERSION: &str = "3.0.2"; +/// The version of the embedded rules: the spam-filter release they started +/// from, then the fork's own revision of them (resources/spam-filter/README.md). +pub const BUNDLED_SPAM_RULES_VERSION: &str = "3.0.2-inbuxa.1"; /// What's recorded once the bundled rules are loaded: their version, then the /// fork's own generation of the update, so a change to how an update applies /// runs it once more. Generation 2 fingerprints (upstream v0.16.24). -pub const BUNDLED_SPAM_RULES_APPLIED: &str = "3.0.2+2"; +pub const BUNDLED_SPAM_RULES_APPLIED: &str = "3.0.2-inbuxa.1+2"; static BUNDLED_SPAM_RULES: &[u8] = include_bytes!("../../../../resources/spam-filter/spam-filter-rules.json.gz"); @@ -217,10 +218,15 @@ mod tests { } #[test] - fn bundled_rules_parse_and_score_the_ai_tags() { + fn bundled_rules_parse_and_score_the_ai_and_dkim2_tags() { let rules: serde_json::Value = serde_json::from_slice(&bundled_rules().unwrap()).unwrap(); let tags = rules["SpamTag"].as_array().unwrap(); - for (tag, score) in [("LLM_UNSOLICITED_HIGH", 3.0), ("LLM_LEGITIMATE_HIGH", -3.0)] { + for (tag, score) in [ + ("LLM_UNSOLICITED_HIGH", 3.0), + ("LLM_LEGITIMATE_HIGH", -3.0), + ("DKIM2_ALLOW", -0.2), + ("DKIM2_REJECT", 1.0), + ] { let found = tags.iter().find(|t| t["tag"] == tag).unwrap(); assert_eq!(found["score"].as_f64(), Some(score), "{tag}"); } diff --git a/resources/spam-filter/README.md b/resources/spam-filter/README.md index 08b471ad..fb7c644b 100644 --- a/resources/spam-filter/README.md +++ b/resources/spam-filter/README.md @@ -1,31 +1,43 @@ # Bundled spam filter rules -`spam-filter-rules.json.gz` is the published rules file of -[spam-filter](https://github.com/stalwartlabs/spam-filter) **v3.0.2**, -unmodified. The server embeds it (`crates/common/src/manager/spam_rules.rs`) -and loads it whenever no other rules source is configured, so a release -scores mail with the rules it was tested with, offline and with nothing to -fetch. The rules URL setting stays an operator override. +`spam-filter-rules.json.gz` holds the server's default spam rules. The server +embeds it (`crates/common/src/manager/spam_rules.rs`) and loads it whenever no +other rules source is configured, so a release scores mail with the rules it +was tested with, offline and with nothing to fetch. The rules URL setting +stays an operator override. -The rules are dual-licensed MIT or Apache-2.0, Copyright (C) 2024, Stalwart -Labs LLC; the fork takes them under MIT, with the notice in `THIRD-PARTY.md`. +The file started as the published rules of +[spam-filter](https://github.com/stalwartlabs/spam-filter) **v3.0.2**. Since +2026-10-28 the fork maintains it here: spam-filter's later releases follow +upstream's 1.0 server (its `AI_*` tag names, its lookup settings), which this +server doesn't use, so they aren't taken in. `BUNDLED_SPAM_RULES_VERSION` +names the release the rules started from and the fork's revision of them, +for example `3.0.2-inbuxa.1`. + +The v3.0.2 rules are dual-licensed MIT or Apache-2.0, Copyright (C) 2024, +Stalwart Labs LLC; the fork takes them under MIT, with the notice in +`THIRD-PARTY.md`. They include the scores for the AI classifier's tags (`LLM_*`, 3.0 for the high-confidence spam categories, −3.0 for legitimate), which match `docs/spec/features/ai-spam-classification.md`. -## Updating +## Changes since v3.0.2 -The `spam-rules-watch` workflow opens an issue when spam-filter publishes a -newer release. To take it: +| Revision | Change | +|---|---| +| `inbuxa.1` | Scores for the DKIM2 result tags the server already emits (`crates/spam-filter/src/analysis/dmarc.rs`): `DKIM2_ALLOW` −0.2, `DKIM2_REJECT` 1.0, and `DKIM2_NA`, `DKIM2_PERMFAIL`, `DKIM2_TEMPFAIL` 0.0. The values are spam-filter v3.0.3's. | -1. Download `spam-filter-rules.json.gz` from that release, pinned by tag - (`releases/download/vX.Y.Z/…`, not `latest`), over this file. -2. Set `BUNDLED_SPAM_RULES_VERSION` in `spam_rules.rs` and the version in - this README and in `THIRD-PARTY.md`. +## Changing the rules + +1. Edit the JSON (`gunzip -c` it; it's one line, keys in their original + order) and write it back compact, then compress it without a name or + timestamp so the file is reproducible: `gzip -n -9`. +2. Bump the revision in `BUNDLED_SPAM_RULES_VERSION` and + `BUNDLED_SPAM_RULES_APPLIED` (`spam_rules.rs`), and add a row above. 3. Run the antispam test (`STORE=RocksDb RUST_MIN_STACK=16777216 cargo test -p tests --lib -- smtp::inbound::antispam::antispam --exact`) and fix - expectations the new rules change, knowingly. + expectations the change affects, knowingly. On the next start each server loads the new version once. Loading only adds rules and tags that are missing; it never changes an existing one, so an diff --git a/resources/spam-filter/spam-filter-rules.json.gz b/resources/spam-filter/spam-filter-rules.json.gz index 6deb9d2be3bf21945e22c69f7dd16f62a6002708..6ebc658bf3a0279013dcf1db8e59d66b66bdae9b 100644 GIT binary patch literal 20942 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
{d|DS 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 BGM)ec literal 21488 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