Filtro de spam auto-hospedado

O Spam Scanner roda no seu próprio servidor e mantém o e-mail lá. O modelo do classificador vem dentro do pacote, não há telemetria nem verificação de atualizações e, por padrão, a única coisa que ele envia é uma consulta DNS pelo nome de host de cada link.

O que sai do servidor#

Por padrão, só os nomes de host dos links de uma mensagem. Eles são consultados nos resolvedores com filtragem da Cloudflare (1.1.1.2 e 1.1.1.3) como consultas DNS comuns, e nenhuma parte da mensagem ou dos endereços é enviada. --no-cloudflare desliga isso também.

Qualquer outra verificação que usa a rede fica desligada até você ativá-la:

VerificaçãoAtive comO que envia
SPF, DKIM, DMARC, ARC--authConsultas DNS dos registros do remetente
Listas de bloqueio DNS--dnsbl, --uriblO endereço IP do cliente e os domínios dos links, como consultas DNS
ClamAV--clamavOs anexos, para o seu próprio clamd
Um modelo de linguagem--llmUm resumo da mensagem, para o servidor que você indicar

As análises não são registradas nem guardadas. Segurança e privacidade

Instalar em um servidor#

Shell
npm install --global spamscanner

Ou o binário independente, com o Node.js e o modelo embutidos:

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

O script de instalação confere o binário com o arquivo SHA256SUMS da versão antes de instalá-lo, e cada binário tem uma atestação de procedência de build assinada que o gh attestation verify confere. Há binários para Linux (x64 e arm64), macOS e Windows. Os binários Linux precisam de glibc, então no Alpine instale com npm. Primeiros passos

Não há verificação de atualizações. Para atualizar, rode o comando de instalação de novo: os dois comandos instalam a versão mais recente.

Rodar como serviço#

Os servidores milterMail filter: um protocolo do Sendmail, também usado pelo Postfix, que permite que um programa separado inspecione cada mensagem durante a sessão SMTP., HTTP, TCP e spamdO daemon do SpamAssassin. Seu protocolo é usado pelo spamc, Exim, Haraka e outros clientes do SpamAssassin. escutam em 127.0.0.1, a menos que --host diga outra coisa. Rode-os com um usuário sem privilégios, por exemplo com 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

A unidade completa e a configuração estão no guia do Postfix. Nenhum dos servidores fala TLS; para acessar um de outra máquina, use uma rede privada, um túnel SSH ou um proxy reverso com TLS.

Conectar o seu servidor de e-mail#

Servidor de e-mailComandoPorta
Postfix ou Sendmailspamscanner milter7831
Postfix, sem nunca recusar e-mailspamscanner filter, um filtro de conteúdonenhuma
Exim, Haraka ou spamcspamscanner spamd783
Qualquer coisa que fale HTTPspamscanner http7832
Um cliente TCP simplesspamscanner server7830
Um servidor de e-mail escrito em Node.jsimport SpamScanner from 'spamscanner'nenhuma

Os servidores podem adicionar à mensagem os cabeçalhos X-Spam-Flag, X-Spam-Score e X-Spam-Status, e a biblioteca devolve a pontuação e cada teste acionado. Guias: filtro de spam para Postfix, outros servidores de e-mail e a API HTTP.

Manter os modelos de linguagem locais#

Um modelo de linguagem é opcional e só lê os casos duvidosos: spam claro e hamE-mail desejado: o oposto de spam. claro nunca chegam a ele. Com o OllamaUm programa que baixa e executa modelos de linguagem abertos na sua própria máquina, com uma API HTTP. ele roda no mesmo servidor, então nenhuma mensagem sai dele:

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

qwen3.5:4b roda em uma CPU. Com um provedor hospedado, os dados pessoais são removidos da mensagem antes do envio. Modelos de linguagem

Treinar com o seu próprio e-mail#

O modelo incluído é treinado com conjuntos de dados públicos. Um modelo treinado com o e-mail que o seu servidor recebe se sai melhor, e fica nesse servidor:

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

Um arquivo de modelo guarda contagens de características com hash, não palavras nem texto de mensagens. Treinamento

Requisitos#

Node.js 18 ou posterior em Linux, macOS ou Windows, ou nada com um binário independente. ClamAVUm mecanismo antivírus de código aberto. Seu daemon, o clamd, analisa arquivos enviados por um socket. e Ollama são opcionais e rodam como serviços próprios.

Editar esta página no GitHub · Markdown ·