Un filtro de spam que lee todos los idiomas y explica cada decisión.
Spam Scanner detecta spam, phishing, estafas y malware para Node.js, la línea de comandos y servidores de correo como Postfix, Exim y Haraka. Cada resultado enumera las pruebas que se activaron y por qué.
npm install -g spamscanner
- Node.js 18+
- Milter, spamd, HTTP
- Ollama, Claude, ChatGPT
- Sin telemetría
$ spamscanner scan message.eml SPAM score 16.3 (spam at 5.0, reject at 15.0) action: reject language: en +6.3 BAYES_999 Classifier spam probability 99.9% +5.0 PHISHING_LOOKALIKE_DOMAIN "paypa1-secure.top" imitates paypal by swapping characters +3.0 DECEPTIVE_LINK A link shows "https://www.paypal.com/signin" but goes to paypa1-secure.top +2.0 FROM_NAME_BRAND Display name says "paypal" but the message is from paypa1-secure.top $ echo $? 1
Cómo se evalúa un mensaje
Cada comprobación suma o resta puntos, y el total decide. Los umbrales y los puntos se pueden cambiar, y nada es una caja negra: el resultado nombra cada prueba.
Leer
El mensaje se analiza y su texto se normaliza: se deshacen las letras estilizadas, los caracteres invisibles y los alfabetos parecidos.
Comprobar
Las comprobaciones del clasificador, de enlaces, adjuntos, autenticación, listas de bloqueo y reglas se ejecutan a la vez, cada una con un tiempo límite.
Puntuación
Cada prueba suma o resta puntos. Con 5, un mensaje es spam; con 15, un servidor de correo debería rechazarlo.
Consultar
Los casos dudosos pueden pasar a un modelo de lenguaje, que suma hasta 6 puntos o resta hasta 3.
- menos de 5aceptar
- de 5 a 15marcar como spam
- 15 o másrechazar
Qué comprueba
Las palabras son una señal. Los enlaces, los remitentes, los adjuntos y la autenticación dicen tanto como ellas, y ninguno depende del idioma del mensaje.
Un clasificador para cualquier escritura
Palabras, pares de palabras, enlaces, remitentes, HTML y adjuntos, contados y combinados como lo hace SpamBayes, con un «dudoso» honesto cuando los indicios no coinciden.
Cómo decideTodos los idiomas, con cuidado
Segmentación de palabras de Unicode para chino, japonés y tailandés, disfraces deshechos y ninguna penalización para un idioma del que el modelo vio poco ham.
IdiomasPhishing
Dominios parecidos con letras cirílicas o cambiadas, enlaces cuyo texto muestra otra dirección, marcas en los nombres visibles y el resolutor de malware de Cloudflare.
Comprobaciones de phishingAdjuntos
Ejecutables detectados por sus bytes, también si se renombran a .pdf; extensiones dobles; programas dentro de archivos ZIP; macros de Office; PDF activos; ClamAV.
Comprobaciones de adjuntosAutenticación
SPF, DKIM, DMARC y ARC, listas de bloqueo DNS, listas de permitidos y bloqueados, y una regla para el correo que suplanta tu propio dominio.
AutenticaciónModelos de lenguaje
Los casos dudosos pasan a un modelo: Ollama en tu propia máquina, o Claude, ChatGPT, Gemini y cualquier servidor compatible con OpenAI.
Modelos de lenguaje
Todos los idiomas, sin adivinar
Las palabras se encuentran con las reglas de Unicode, así que funcionan los idiomas que se escriben sin espacios, y los disfraces se deshacen antes de contar. Estas son las palabras que cuenta el clasificador, calculadas al generar esta página.
Un idioma del que el modelo incluido vio poco ham recibe «dudoso» en lugar de «spam», así que el correo normal en árabe o coreano nunca se marca por su escritura. Idiomas
Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄
- claim
- your
- free
- prize
- viagra
- free
Un espacio de ancho cero, una і cirílica, un dígito en lugar de una letra y letras matemáticas en negrita
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
Segmentado con un diccionario
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
Segmentado con un diccionario
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
En minúsculas según las reglas de Unicode
Se conecta a tu servidor de correo
Un milter para Postfix y Sendmail, un servidor spamd compatible con SpamAssassin para spamc, Exim y Haraka, un filtro de contenido, una API HTTP, un servidor TCP y la biblioteca.
Todos añaden encabezados X-Spam-Flag, X-Spam-Score, X-Spam-Status y eliminan los que haya falsificado un remitente.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptUn milter revisa el correo durante la sesión SMTP, así que el spam que llega al umbral de rechazo se rechaza antes de aceptarlo. Guía de Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1Un servidor spamd compatible con SpamAssassin: detén spamd, inicia Spam Scanner en el mismo puerto y los clientes de SpamAssassin siguen funcionando. Guía de spamd
import SpamScanner from 'spamscanner';
const scanner = new SpamScanner({authentication: true});
const result = await scanner.scan(stream, {session});
if (result.action === 'reject') {
// refuse with a 4xx or 5xx reply
}La biblioteca, para smtp-server, complementos de Haraka o cualquier servicio que gestione correo. Referencia de la API
spamscanner http --port 7832 --token "$TOKEN"
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
--data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5"Para cualquier lenguaje y cualquier servidor que pueda hacer una petición HTTP. Guía de la API HTTP
Un modelo de lenguaje para los casos dudosos
El spam claro y el ham claro nunca llegan a él. Cuando la puntuación está cerca del umbral o el clasificador tiene dudas, un modelo lee el mensaje y responde spam, phishing, estafa, malware o ham. Ejecuta uno en tu propia máquina o usa uno alojado, con cualquier URL, puerto y autenticación.
Las instrucciones ocultas en un mensaje para los filtros de IA se puntúan como spam, y al modelo se le indica que el mensaje son datos. Las pruebas de extremo a extremo lo comprueban con un modelo real a través de Ollama.
- Ollama
- LM Studio
- llama.cpp server
- vLLM
- LocalAI
- Jan
- OpenAI
- Anthropic (Claude)
- Google Gemini
- Mistral AI
- Groq
- OpenRouter
- DeepSeek
- xAI
- Together AI
- Fireworks AI
- Cerebras
- Hugging Face Inference Providers
- Azure OpenAI
- Cloudflare Clef
- Cloudflare Clef Flash
- TypeSafe Jev
- TypeSafe Jev on OpenRouter
- Any decision model server
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bCon contorno: se ejecuta en tu propia máquina. Los datos personales se eliminan antes de que un mensaje vaya a un proveedor alojado.
| Ollama | Licencia | Tamaño |
|---|---|---|
qwen3.5:0.8b | Apache-2.0 | 1.3 GB |
gemma4:e2b | Apache-2.0 | 4.6 GB |
qwen3.5:4b | Apache-2.0 | 3.3 GB |
qwen3.5:9b | Apache-2.0 | 6.6 GB |
gpt-oss-safeguard:20b | Apache-2.0 | 14 GB |
Modelos abiertos recomendados. Todas las recomendaciones
Medido y entrenable
El modelo incluido está entrenado con conjuntos de datos públicos y probado con mensajes que no vio. Un modelo entrenado con tu propio correo funciona mejor: entrénalo con archivos mbox, Maildirs o conjuntos de datos, mídelo y enséñale con los botones de «denunciar spam».
| Mensajes reservados | Mensajes | Precisión | Exhaustividad | Falsos positivos |
|---|---|---|---|---|
| inglés | 6564 | 100,0 % | 97,1 % | 0,0 % |
| ruso | 1682 | 100,0 % | 97,4 % | 0,0 % |
| italiano | 1389 | 98,1 % | 85,3 % | 1,8 % |
| alemán | 1309 | 97,7 % | 76,1 % | 2,2 % |
| español | 1281 | 97,5 % | 82,6 % | 2,6 % |
| Todos | 13.840 | 99,2 % | 85,1 % | 0,6 % |
Solo el clasificador, con uno de cada diez mensajes de sus datos de entrenamiento públicos, reservados. Los mensajes dudosos cuentan como no detectados. El alemán, el italiano y el español provienen de conjuntos de datos sintéticos con etiquetas imprecisas. Sobre el modelo incluido
Hecho para Forward Email
Forward Email no guarda registros del contenido de los mensajes, así que no podía enviar el correo a un servicio de filtrado externo. Spam Scanner se ejecuta en tus propios servidores, no envía nada a ningún sitio salvo que se configure para hacerlo y explica cada decisión sin que una persona lea el correo. Forward Email y actualización
Un proyecto de Forward Email, el servicio de correo electrónico centrado en la privacidad.
