Filter spam self-hosted

Spam Scanner berjalan di server Anda sendiri dan menyimpan email di sana. Model pengklasifikasinya ada di dalam paket, tidak ada telemetri atau pemeriksaan pembaruan, dan secara default satu-satunya yang dikirim adalah kueri DNS untuk nama host setiap tautan.

Apa yang keluar dari server#

Secara default, hanya nama host tautan dalam pesan. Nama itu dicari di resolver penyaring milik Cloudflare (1.1.1.2 dan 1.1.1.3) sebagai kueri DNS biasa, dan tidak ada bagian pesan atau alamatnya yang dikirim. --no-cloudflare juga mematikan ini.

Setiap pemeriksaan lain yang memakai jaringan mati sampai Anda menyalakannya:

PemeriksaanNyalakan denganYang dikirim
SPF, DKIM, DMARC, ARC--authKueri DNS untuk catatan pengirim
Daftar blokir DNS--dnsbl, --uriblAlamat IP klien dan domain tautan, sebagai kueri DNS
ClamAV--clamavLampiran, ke clamd Anda sendiri
Model bahasa--llmRingkasan pesan, ke server yang Anda tentukan

Pemindaian tidak dicatat atau disimpan. Keamanan dan privasi

Pasang di server#

Shell
npm install --global spamscanner

Atau biner mandiri, dengan Node.js dan model di dalamnya:

Shell
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bash

Skrip pemasangan memeriksa biner terhadap file SHA256SUMS dari rilis sebelum memasangnya, dan setiap biner memiliki atestasi asal build bertanda tangan yang diperiksa oleh gh attestation verify. Biner tersedia untuk Linux (x64 dan arm64), macOS, dan Windows. Biner Linux membutuhkan glibc, jadi di Alpine pasang dengan npm. Memulai

Tidak ada pemeriksaan pembaruan. Untuk memperbarui, jalankan lagi perintah pemasangan: kedua perintah memasang rilis terbaru.

Jalankan sebagai layanan#

Server milterMail filter: protokol dari Sendmail, juga dipakai Postfix, yang memungkinkan program terpisah memeriksa setiap pesan selama sesi SMTP., HTTP, TCP, dan spamdDaemon SpamAssassin. Protokolnya digunakan oleh spamc, Exim, Haraka, dan klien SpamAssassin lainnya. mendengarkan di 127.0.0.1 kecuali --host menyatakan lain. Jalankan sebagai pengguna tanpa hak istimewa, misalnya di bawah systemd:

INI
[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=yes

Unit lengkap dan penyiapannya ada di panduan Postfix. Tidak ada server yang memakai TLS, jadi untuk menjangkaunya dari mesin lain, gunakan jaringan privat, terowongan SSH, atau reverse proxy dengan TLS.

Hubungkan server email Anda#

Server emailPerintahPort
Postfix atau Sendmailspamscanner milter7831
Postfix, tanpa pernah menolak emailspamscanner filter, filter kontentidak ada
Exim, Haraka, atau spamcspamscanner spamd783
Apa pun yang memakai HTTPspamscanner http7832
Klien TCP sederhanaspamscanner server7830
Server email yang ditulis dengan Node.jsimport SpamScanner from 'spamscanner'tidak ada

Server dapat menambahkan header X-Spam-Flag, X-Spam-Score, dan X-Spam-Status ke pesan, dan pustaka mengembalikan skor serta setiap uji yang terpicu. Panduan: filter spam Postfix, server email lain, dan API HTTP.

Jaga model bahasa tetap lokal#

Model bahasa bersifat opsional dan hanya membaca kasus yang meragukan: spam yang jelas dan hamEmail yang diinginkan: kebalikan dari spam. yang jelas tidak pernah sampai kepadanya. Dengan OllamaProgram yang mengunduh dan menjalankan model bahasa terbuka di mesin Anda sendiri, dengan HTTP API., model berjalan di server yang sama, jadi tidak ada pesan yang keluar:

Shell
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4b

qwen3.5:4b berjalan di CPU. Dengan penyedia ter-hosting, data pribadi dihapus dari pesan sebelum dikirim. Model bahasa

Latih dengan email Anda sendiri#

Model bawaan dilatih dengan dataset publik. Model yang dilatih dengan email yang diterima server Anda bekerja lebih baik, dan tetap berada di server itu:

Shell
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milter

File model menyimpan hitungan fitur yang di-hash, bukan kata atau teks pesan. Pelatihan

Persyaratan#

Node.js 18 atau lebih baru di Linux, macOS, atau Windows, atau tidak ada apa pun dengan biner mandiri. ClamAVMesin antivirus sumber terbuka. Daemonnya, clamd, memindai file yang dikirim melalui soket. dan Ollama bersifat opsional dan berjalan sebagai layanan sendiri.

Sunting halaman ini di GitHub · Markdown ·