PRODUCT HUNT

Klar startet am 7. Oktober auf Product Hunt.

Folgen

Klar für Stalwart

Ein Transformer-Spamfilter, der auf Ihrem Stalwart-Server läuft. Nichts verlässt die Maschine.

curl -fsSL https://raw.githubusercontent.com/klar-im/engine/main/install.sh | sudo KLAR_ACCEPT_MODEL_LICENSE=1 sh

Linux mit systemd, auf x86_64 oder arm64. Ältere Systeme nutzen den Container.

So greift es in Stalwart ein

Stalwart übergibt jede eingehende Nachricht in der DATA-Phase an den Klar-Milter. Die Engine liest Header und Text auf Ihrem Server. Ihr Urteil schreibt sie als X-Klar-Header zurück.

Ein Sieve-Skript sortiert jede Nachricht dann nach diesem Urteil. Spam landet im Junk-Ordner, Marketing-Mails in einem eigenen Ordner, alles andere bleibt im Posteingang.

Ein weiterer Befehl verbindet Stalwart mit dem Milter. Er trägt den Milter für eingehende Mail ein, setzt striktes DMARC auf Port 25 und installiert das Sieve-Skript. Mit --shadow bewertet der eingebaute Filter weiter, sortiert aber nichts ein:

export STALWART_URL=http://127.0.0.1:8080 STALWART_USER=admin STALWART_PASSWORD=...
python3 /opt/klar/share/stalwart/scripts/apply.py --shadow --milter-host 127.0.0.1 --milter-port 8891

Der eingebaute Filter darf nicht mehr entscheiden. Er läuft vor jedem Milter, und was er als Spam markiert, landet im Junk-Ordner, ganz gleich, wie Klar urteilt.

Schalten Sie danach das Einsortieren für jedes Postfach ein, das tatsächlich gelesen wird, jeweils mit dem Passwort des Kontos. Lassen Sie Spamfallen und abuse@ außen vor: Dort bleiben die Header erhalten, und nichts wird verschoben.

STALWART_PASSWORD='alice-pw' python3 /opt/klar/share/stalwart/scripts/sieve_activate.py --url https://mail.example.com --user alice@example.com
Die Betreiberanleitung

Erst vergleichen, dann umstellen

Im Schattenmodus läuft der Filter von Stalwart weiter. Er bewertet jede Nachricht und schreibt das Ergebnis in die Header, sortiert aber nie etwas ein. Wohin die Mail geht, entscheidet Klar.

Jede Nachricht trägt so zwei Urteile. Zählen Sie die Abweichungen an Ihrer eigenen Post, so lange Sie möchten. Wenn Sie so weit sind, führen Sie den Befehl ohne --shadow erneut aus. Damit schalten Sie den eingebauten Filter ab:

python3 /opt/klar/share/stalwart/scripts/apply.py --milter-host 127.0.0.1 --milter-port 8891

Sie können ihn auch dauerhaft aktiv lassen. Eine zweite Meinung zu jeder Nachricht kostet wenige Millisekunden.

Internet SMTP :25
Stalwart DATA-Phase
eingebauter Filter, im Schattenmodus bewertet jede Nachricht, sortiert nichts X-Spam-Result: KLAR_SHADOW (-100), …
Postfach das Sieve-Skript des Kontos sortiert nach dem Urteil
regulär → Posteingang Marketing → Marketing Spam → Junk
klar-milterd die Klar-Engine, auf derselben Maschine
liest Header und Text, klassifiziert lokal ein mehrsprachiger Transformer, kein Netzwerk, keine Nachricht gespeichert
was der Milter hinzufügt X-Klar-Label: spamX-Klar-Class: spamX-Klar-Score-Spam: 0.98X-Klar-Model-Version: …
Klar entscheidet. Im Schattenmodus wird Stalwarts eigenes Urteil in jede Nachricht geschrieben, aber nie umgesetzt.

Voraussetzungen

x86_64
Debian 12, Ubuntu 22.04 oder neuer, mit systemd.
arm64
Debian 13, Ubuntu 24.04 oder neuer, mit systemd.
Ältere Systeme
Der Container ghcr.io/klar-im/klar-milterd, für amd64 und arm64.
Arbeitsspeicher
Etwa 700 MB RSS mit geladenem Modell. Eine Nachricht nach der anderen.
Geschwindigkeit
Im Median 6 s pro Nachricht auf einem VPS mit 2 vCPU, allein auf der CPU. Stalwart wartet 60 s und stellt dann unklassifiziert zu.
Stalwart
Version 0.16, mit Admin-Zugang über stalwart-cli.

Lizenzen

Der Code ist Open Source unter der AGPLv3. Das Modell hat eine eigene Lizenz, CC-BY-NC-4.0: frei für nicht-kommerzielle Nutzung, mit Namensnennung. Der Installer lädt es erst, wenn KLAR_ACCEPT_MODEL_LICENSE=1 bestätigt, dass Sie diese gelesen haben.

Nicht-kommerziell heißt: ein privater oder familiärer Heimserver, ein Hobbyprojekt oder akademische Forschung. Wer die Mail eines Unternehmens (auch die der eigenen Belegschaft, auch zur Erprobung) oder eines bezahlten Dienstes filtert, braucht eine kommerzielle Lizenz, und das ist Klar Pro. Im Zweifel fragen Sie uns vor dem Einsatz unter hello@klar.im.

Was Betreiber fragen

Verlässt meine Mail den Server?

Nein. Das Modell läuft neben dem Milter auf derselben Maschine, und die Klassifizierung einer Nachricht kommt ohne Netzwerkzugriff aus. Heruntergeladen wird nur bei der Installation: erst das Release von GitHub, dann das Modell.

Was passiert, wenn der Milter ausfällt?

Stalwart stellt die Nachricht unklassifiziert zu, ohne X-Klar-Header. Der Milter ist auf Fail-open eingestellt, ein Ausfall stellt also nie eine Mail zurück und weist keine ab. Postfix verhält sich mit unserer Konfiguration genauso.

Wie aktualisiere ich?

Führen Sie den Installationsbefehl erneut aus. Er behält Ihre Konfiguration und überspringt Modelldateien, die bereits übereinstimmen. Für eine feste Version setzen Sie KLAR_VERSION=v0.2.0 hinter sudo, neben KLAR_ACCEPT_MODEL_LICENSE=1.

Wie deinstalliere ich es?

Machen Sie zuerst die Änderungen in Stalwart rückgängig. Führen Sie sieve_activate.py --deactivate für jedes Postfach aus. Löschen Sie den Klar-Milter und das globale Sieve-Skript klar, und schalten Sie dann den Spamfilter wieder ein. Haben Sie den Schattenmodus genutzt, löschen Sie auch das KLAR_SHADOW-Tag und die zugehörige Regel. Wenn Sie die alte Richtlinie zurückhaben möchten, setzen Sie dmarcVerify auf den früheren Wert. Stoppen und deaktivieren Sie danach klar-milterd und löschen Sie die Unit-Datei. Entfernen Sie zum Schluss /opt/klar, /etc/klar, /var/lib/klar sowie den Benutzer klarmilter.

Läuft es auch in Docker?

Ja. Das Image ghcr.io/klar-im/klar-milterd läuft auf amd64 und arm64 und lädt beim ersten Start dasselbe Modell. Binden Sie seine Ports an 127.0.0.1, oder hängen Sie es in das Docker-Netz von Stalwart und übergeben Sie --milter-host klar-milterd. Das Image enthält kein apply.py: Führen Sie die Skripte aus einem Klon des Engine-Repos aus. Geben Sie Port 8891 nie ins Internet frei.

Sie betreiben Mail für ein Unternehmen?

Klar Pro ist die kommerzielle Lizenz für dieselbe Engine, auf Ihren eigenen Servern. Erzählen Sie uns von Ihrem Setup.