Filtro de spam autoalojado

Spam Scanner funciona en tu propio servidor y deja el correo allí. El modelo del clasificador viene dentro del paquete, no hay telemetría ni comprobación de actualizaciones y, por defecto, lo único que envía es una consulta DNS por el nombre de host de cada enlace.

Qué sale del servidor#

Por defecto, solo los nombres de host de los enlaces de un mensaje. Se consultan en los resolvedores con filtrado de Cloudflare (1.1.1.2 y 1.1.1.3) como consultas DNS normales, y no se envía ninguna parte del mensaje ni de sus direcciones. --no-cloudflare también lo desactiva.

Cualquier otra comprobación que use la red está desactivada hasta que la actives:

ComprobaciónSe activa conQué envía
SPF, DKIM, DMARC, ARC--authConsultas DNS de los registros del remitente
Listas de bloqueo DNS--dnsbl, --uriblLa dirección IP del cliente y los dominios de los enlaces, como consultas DNS
ClamAV--clamavLos adjuntos, a tu propio clamd
Un modelo de lenguaje--llmUn resumen del mensaje, al servidor que indiques

Los análisis no se registran ni se guardan. Seguridad y privacidad

Instalar en un servidor#

Shell
npm install --global spamscanner

O el binario independiente, con Node.js y el modelo incluidos:

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

El script de instalación comprueba el binario con el archivo SHA256SUMS de la versión antes de instalarlo, y cada binario tiene una atestación de procedencia de compilación firmada que comprueba gh attestation verify. Hay binarios para Linux (x64 y arm64), macOS y Windows. Los binarios de Linux necesitan glibc, así que en Alpine instala con npm. Primeros pasos

No hay comprobación de actualizaciones. Para actualizar, vuelve a ejecutar el comando de instalación: los dos comandos instalan la última versión.

Ejecutarlo como servicio#

Los servidores milterFiltro de correo: un protocolo de Sendmail, que también usa Postfix, que permite que un programa aparte inspeccione cada mensaje durante la sesión SMTP., HTTP, TCP y spamdEl demonio de SpamAssassin. Su protocolo lo hablan spamc, Exim, Haraka y otros clientes de SpamAssassin. escuchan en 127.0.0.1 salvo que --host indique otra cosa. Ejecútalos con un usuario sin privilegios, por ejemplo con 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

La unidad completa y su configuración están en la guía de Postfix. Ninguno de los servidores habla TLS, así que para llegar a uno desde otra máquina usa una red privada, un túnel SSH o un proxy inverso con TLS.

Conectar tu servidor de correo#

Servidor de correoComandoPuerto
Postfix o Sendmailspamscanner milter7831
Postfix, sin rechazar nunca correospamscanner filter, un filtro de contenidoninguno
Exim, Haraka o spamcspamscanner spamd783
Cualquier cosa que hable HTTPspamscanner http7832
Un cliente TCP simplespamscanner server7830
Un servidor de correo escrito en Node.jsimport SpamScanner from 'spamscanner'ninguno

Los servidores pueden añadir al mensaje las cabeceras X-Spam-Flag, X-Spam-Score y X-Spam-Status, y la biblioteca devuelve la puntuación y cada prueba que se activó. Guías: filtro de spam para Postfix, otros servidores de correo y la API HTTP.

Mantener los modelos de lenguaje en local#

Un modelo de lenguaje es opcional y solo lee los casos dudosos: el spam claro y el hamCorreo deseado: lo contrario del spam. claro nunca le llegan. Con OllamaUn programa que descarga y ejecuta modelos de lenguaje abiertos en tu propia máquina, con una API HTTP. se ejecuta en el mismo servidor, así que ningún mensaje sale de él:

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

qwen3.5:4b funciona en una CPU. Si usas un proveedor alojado, los datos personales se eliminan del mensaje antes de enviarlo. Modelos de lenguaje

Entrenarlo con tu propio correo#

El modelo incluido está entrenado con conjuntos de datos públicos. Un modelo entrenado con el correo que recibe tu servidor funciona mejor, y se queda en ese 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

Un archivo de modelo guarda recuentos de características con hash, no palabras ni texto de mensajes. Entrenamiento

Requisitos#

Node.js 18 o posterior en Linux, macOS o Windows, o nada con un binario independiente. ClamAVUn motor antivirus de código abierto. Su demonio, clamd, analiza los archivos que recibe por un socket. y Ollama son opcionales y funcionan como servicios propios.

Editar esta página en GitHub · Markdown ·