Línea de comandos

Text
spamscanner <command> [options]
ComandoQué hace
scan [file|-]Analiza un mensaje de un archivo o de la entrada estándar
filter -f <sender> -- <recipients...>Filtro de contenido de Postfix: analiza la entrada estándar, añade encabezados y lo reenvía
milterMilter para Postfix y Sendmail, puerto 7831
httpAPI HTTP, puerto 7832
serverServidor TCP simple, puerto 7830
spamdServidor spamd compatible con SpamAssassin, puerto 783
trainEntrena un modelo con archivos mbox, Maildirs, carpetas o conjuntos de datos
evalMide un modelo con correo etiquetado
learn spam|ham [file|-] --model <file>Enseña un mensaje a un modelo
llm-testComprueba la configuración del modelo de lenguaje con tres mensajes de ejemplo
modelsMuestra los modelos abiertos recomendados
version, help

scan#

Shell
spamscanner scan message.eml
spamscanner scan - < message.eml
spamscanner scan message.eml --json
spamscanner scan message.eml --headers > tagged.eml
spamscanner scan message.eml --subject-tag "[SPAM]" > tagged.eml
OpciónSignificado
--jsonImprime el resultado completo en JSON
--headersImprime el mensaje con los encabezados X-Spam-* añadidos
--subject-tag <tag>Añade además un prefijo al asunto del spam
--verboseMuestra todas las pruebas y los indicios más fuertes del clasificador
--threshold <n>Puntuación a partir de la cual el correo es spam (predeterminado 5)
--reject-threshold <n>Puntuación a partir de la cual el correo se rechaza (predeterminado 15)
--model <file>Un archivo de modelo en lugar del incluido
--no-classifierNo usa el clasificador
--config <file>Un archivo JSON con opciones de la biblioteca
--allow-language <codes>Idiomas aceptados, por ejemplo en,de,fr

Códigos de salida: 0 hamCorreo deseado: lo contrario del spam., 1 spam, 2 error.

Sesión SMTP#

OpciónSignificado
--ip <address>Dirección IP del cliente que envió el mensaje
--hostname <name>El nombre DNS inverso verificado del cliente
--helo <name>El nombre que dio en HELO o EHLO
--from <address>Remitente del sobre (MAIL FROM)
--to <address>Destinatario del sobre; repítelo para indicar varios

Comprobaciones#

OpciónSignificado
--authComprueba SPF, DKIM, DMARC y ARC (necesita --ip)
--dnsbl <zone>Lista de bloqueo de IP, por ejemplo zen.spamhaus.org; se puede repetir
--uribl <zone>Lista de bloqueo de dominios para enlaces, por ejemplo dbl.spamhaus.org; se puede repetir
--dns-server <ip>Servidor de nombres para las comprobaciones DNS; se puede repetir
--no-cloudflareNo consulta a los resolutores de filtrado de Cloudflare por los enlaces
--clamav [socket]Analiza los adjuntos con clamd, en su socket predeterminado o en el indicado
--allowlist <value>Acepta siempre esta dirección IP, dominio o dirección; se puede repetir
--denylist <value>Rechaza siempre esta dirección IP, dominio o dirección; se puede repetir

Modelo de lenguaje#

OpciónSignificado
--llm <provider>ollama, clef-flash, jev, openai, anthropic y otros (lista)
--llm-model <name>Modelo, por ejemplo qwen3.5:4b o claude-haiku-4-5
--llm-method <method>decision (una probabilidad para cada veredicto, en un solo paso; el valor predeterminado donde está disponible) o generate (métodos)
--llm-account <id>ID de cuenta de Cloudflare, para clef y clef-flash
--llm-url <url>URL base, por ejemplo http://10.0.0.5:11434
--llm-host, --llm-port, --llm-path, --llm-protocolCambia una parte de la URL del proveedor
--llm-api-key <key>Clave de API; consulta también las variables de entorno más abajo
--llm-auth <type>bearer, x-api-key, api-key, basic, header o none
--llm-auth-header <name>Encabezado para la clave, con --llm-auth header
--llm-username, --llm-passwordPara --llm-auth basic
--llm-header "Name: value"Encabezado adicional de la petición; se puede repetir
--llm-mode <mode>auto (solo casos dudosos, el valor predeterminado) o always
--llm-timeout <ms>Predeterminado 30000
--llm-policy <text>Reglas adicionales para el modelo, por ejemplo «Nunca enviamos facturas»
--llm-redact, --no-llm-redactElimina antes los datos personales; activado de forma predeterminada para los proveedores remotos

filter#

Un filtro de contenido de Postfix. Lee un mensaje de la entrada estándar, añade los encabezados X-Spam-* y lo pasa a sendmail con el mismo sobre.

Shell
spamscanner filter -f "$sender" -- "$recipient"
OpciónSignificado
--sendmail <path>Predeterminado /usr/sbin/sendmail
--subject-tag <tag>Añade un prefijo al asunto del spam
--rejectDevuelve el correo que llega al umbral de rechazo en lugar de reenviarlo
--discardDescarta el correo que llega al umbral de rechazo en lugar de reenviarlo

Los códigos de salida siguen las convenciones de sendmail, que Postfix interpreta: 0 entregado (o descartado), 64 no se indicaron destinatarios, 69 rechazado como spam (Postfix lo devuelve), 75 cualquier fallo, así que Postfix conserva el mensaje y vuelve a intentarlo más tarde.

milter, http, server y spamd#

Shell
spamscanner milter --port 7831 --reject --subject-tag "[SPAM]"
spamscanner http --port 7832 --token "$SPAMSCANNER_TOKEN"
spamscanner server --port 7830
spamscanner spamd --port 783

El puerto 783 es el que usan de forma predeterminada los clientes de SpamAssassin. Los puertos por debajo de 1024 necesitan root o la capacidad CAP_NET_BIND_SERVICE; usa otro puerto, como --port 7833, e indícaselo al cliente.

OpciónSignificado
--port <n>Puerto TCP
--host <ip>Dirección en la que escuchar (predeterminado 127.0.0.1)
--socket <path>Escucha en un socket Unix en su lugar
--rejectMilter: rechaza el correo que llega al umbral de rechazo
--reject-code <n>Milter: 451, reintentar más tarde (el predeterminado), o 550
--quarantineMilter: retiene el spam en la cuarentena del servidor de correo
--name <hostname>Milter: el nombre de este servidor en Authentication-Results
--token <secret>HTTP: exige Authorization: Bearer <secret>; necesario para /learn
--allow-tellspamd: acepta peticiones TELL (spamc -L spam) para aprender
--out <file>HTTP y spamd: guarda lo aprendido en este archivo de modelo
--subject-tag <tag>Milter y spamd: añade un prefijo al asunto del spam
--verboseMilter: registra cada análisis. Servidor TCP: responde con una línea de texto

Las opciones de análisis anteriores también se aplican a los servidores. El milter, la API HTTP, el servidor TCP y spamd.

train, eval y learn#

Shell
spamscanner train --spam ~/Mail/Junk --ham ~/Mail/Archive --out my-model.json
spamscanner eval --model my-model.json --spam test/spam.mbox --ham test/ham.mbox
spamscanner learn spam message.eml --model my-model.json
OpciónSignificado
--spam <path>Spam: un archivo mbox, un Maildir o una carpeta de archivos .eml; se puede repetir
--ham <path>Ham, de la misma forma; se puede repetir
--dataset <file>Un archivo CSV o JSON Lines con columnas de texto y de etiqueta; se puede repetir
--text-column <name>, --label-column <name>Nombres de las columnas, cuando no se detectan
--out <file>Dónde escribir el modelo (predeterminado spamscanner-model.json)
--mergeParte del modelo incluido (o de --model) en lugar de uno vacío

learn actualiza el archivo de modelo en el mismo lugar y, la primera vez, lo crea a partir del modelo incluido. Entrenamiento

llm-test y models#

Shell
spamscanner models
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b

llm-test envía al modelo un mensaje normal y dos estafas, en inglés y en italiano, imprime sus veredictos, el tiempo que tardó cada uno, el método usado y el hardware, y termina con 0 solo si acierta los tres.

Archivo de configuración#

--config file.json (o la variable de entorno SPAMSCANNER_CONFIG) carga opciones de la biblioteca. Las opciones de la línea de comandos tienen prioridad sobre el archivo.

JSON
{
  "threshold": 6,
  "authentication": true,
  "dnsbl": {"ip": ["zen.spamhaus.org"], "domain": ["dbl.spamhaus.org"]},
  "dns": {"servers": ["127.0.0.1"]},
  "clamav": {"socket": "/var/run/clamav/clamd.ctl"},
  "llm": {"provider": "ollama", "model": "qwen3.5:4b"},
  "scores": {"deceptiveLink": 4, "FROM_NAME_BRAND": 3}
}

Variables de entorno#

VariableSignificado
SPAMSCANNER_CONFIGArchivo de configuración
SPAMSCANNER_MODELArchivo de modelo usado en lugar del incluido
SPAMSCANNER_TOKENToken para la API HTTP
SPAMSCANNER_LLM_API_KEYClave de API para cualquier proveedor de modelos de lenguaje
CLOUDFLARE_API_TOKEN y CLOUDFLARE_ACCOUNT_ID, TYPESAFE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, OPENROUTER_API_KEY, DEEPSEEK_API_KEY, XAI_API_KEY, TOGETHER_API_KEY, FIREWORKS_API_KEY, CEREBRAS_API_KEY, HF_TOKEN, AZURE_OPENAI_API_KEYLa clave propia de cada proveedor
NODE_DEBUG=spamscanner*Registro de depuración

Editar esta página en GitHub · Markdown ·