Własny filtr antyspamowy
Spam Scanner działa na Twoim serwerze i trzyma tam pocztę. Model klasyfikatora jest w pakiecie, nie ma telemetrii ani sprawdzania aktualizacji, a domyślnie jedyne, co wysyła, to zapytanie DNS o nazwę hosta każdego linku.
Co opuszcza serwer#
Domyślnie tylko nazwy hostów z linków w wiadomości. Są sprawdzane w filtrujących resolverach Cloudflare (1.1.1.2 i 1.1.1.3) zwykłymi zapytaniami DNS i żadna część wiadomości ani jej adresów nie jest wysyłana. --no-cloudflare wyłącza także to.
Każdy inny test korzystający z sieci jest wyłączony, dopóki go nie włączysz:
| Test | Włącz przez | Co wysyła |
|---|---|---|
| SPF, DKIM, DMARC, ARC | --auth | Zapytania DNS o rekordy nadawcy |
| Listy blokowanych DNS | --dnsbl, --uribl | Adres IP klienta i domeny linków, jako zapytania DNS |
| ClamAV | --clamav | Załączniki, do Twojego clamd |
| Model językowy | --llm | Streszczenie wiadomości, do wskazanego przez Ciebie serwera |
Skany nie są logowane ani zapisywane. Bezpieczeństwo i prywatność
Instalacja na serwerze#
npm install --global spamscannerAlbo samodzielny plik binarny z wbudowanym Node.js i modelem:
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bashSkrypt instalacyjny sprawdza plik binarny z plikiem SHA256SUMS wydania przed instalacją, a każdy plik binarny ma podpisane poświadczenie pochodzenia kompilacji, które sprawdza gh attestation verify. Pliki binarne są dla Linuksa (x64 i arm64), macOS i Windows. Pliki dla Linuksa wymagają glibc, więc na Alpine instaluj przez npm. Pierwsze kroki
Nie ma sprawdzania aktualizacji. Aby zaktualizować, uruchom polecenie instalacji ponownie: oba polecenia instalują najnowsze wydanie.
Uruchamianie jako usługa#
Serwery milterMail filter: protokół z Sendmail, używany też przez Postfix, który pozwala osobnemu programowi sprawdzić każdą wiadomość w trakcie sesji SMTP., HTTP, TCP i spamdDemon SpamAssassin. Jego protokołem posługują się spamc, Exim, Haraka i inni klienci SpamAssassin. nasłuchują na 127.0.0.1, chyba że --host wskazuje inaczej. Uruchamiaj je jako użytkownik bez uprawnień, na przykład pod systemd:
[Service]
ExecStart=/usr/local/bin/spamscanner milter --port 7831 --auth --subject-tag [SPAM]
User=spamscanner
Group=spamscanner
Restart=on-failure
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yesPełna jednostka i jej konfiguracja są w przewodniku po Postfixie. Żaden z serwerów nie obsługuje TLS, więc aby połączyć się z innej maszyny, użyj sieci prywatnej, tunelu SSH lub odwrotnego proxy z TLS.
Podłączenie serwera pocztowego#
| Serwer pocztowy | Polecenie | Port |
|---|---|---|
| Postfix lub Sendmail | spamscanner milter | 7831 |
| Postfix, bez odrzucania poczty | spamscanner filter, filtr treści | brak |
| Exim, Haraka lub spamc | spamscanner spamd | 783 |
| Wszystko, co obsługuje HTTP | spamscanner http | 7832 |
| Prosty klient TCP | spamscanner server | 7830 |
| Serwer pocztowy napisany w Node.js | import SpamScanner from 'spamscanner' | brak |
Serwery mogą dodać do wiadomości nagłówki X-Spam-Flag, X-Spam-Score i X-Spam-Status, a biblioteka zwraca wynik i każdy test, który zadziałał. Przewodniki: filtr antyspamowy dla Postfixa, inne serwery pocztowe i API HTTP.
Lokalne modele językowe#
Model językowy jest opcjonalny i czyta tylko przypadki graniczne: oczywisty spam i oczywisty hamPożądana poczta: przeciwieństwo spamu. nigdy do niego nie trafiają. Z Ollamą działa na tym samym serwerze, więc żadna wiadomość go nie opuszcza:
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bqwen3.5:4b działa na CPU. Przy dostawcy hostowanym dane osobowe są usuwane z wiadomości przed wysłaniem. Modele językowe
Trenowanie na własnej poczcie#
Dołączony model jest wytrenowany na publicznych zbiorach danych. Model wytrenowany na poczcie, którą odbiera Twój serwer, działa lepiej i zostaje na tym serwerze:
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milterPlik modelu zawiera zahaszowane liczniki cech, a nie słowa ani tekst wiadomości. Trenowanie
Wymagania#
Node.js 18 lub nowszy na Linuksie, macOS albo Windows, a z samodzielnym plikiem binarnym nic. ClamAVOtwartoźródłowy silnik antywirusowy. Jego demon, clamd, skanuje pliki przesłane przez gniazdo. i OllamaProgram, który pobiera i uruchamia otwarte modele językowe na twoim własnym komputerze, z HTTP API. są opcjonalne i działają jako osobne usługi.