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ção | Ative com | O que envia |
|---|---|---|
| SPF, DKIM, DMARC, ARC | --auth | Consultas DNS dos registros do remetente |
| Listas de bloqueio DNS | --dnsbl, --uribl | O endereço IP do cliente e os domínios dos links, como consultas DNS |
| ClamAV | --clamav | Os anexos, para o seu próprio clamd |
| Um modelo de linguagem | --llm | Um 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#
npm install --global spamscannerOu o binário independente, com o Node.js e o modelo embutidos:
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bashO 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:
[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=yesA 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-mail | Comando | Porta |
|---|---|---|
| Postfix ou Sendmail | spamscanner milter | 7831 |
| Postfix, sem nunca recusar e-mail | spamscanner filter, um filtro de conteúdo | nenhuma |
| Exim, Haraka ou spamc | spamscanner spamd | 783 |
| Qualquer coisa que fale HTTP | spamscanner http | 7832 |
| Um cliente TCP simples | spamscanner server | 7830 |
| Um servidor de e-mail escrito em Node.js | import 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:
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bqwen3.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:
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milterUm 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.