Seguridad y privacidad

Spam Scanner lee correo, que es privado, de remitentes, que pueden ser hostiles. Esta página enumera qué envía a cualquier sitio y cómo trata lo que lee.

Qué sale de la máquina#

De forma predeterminada, una sola cosa: los nombres de host de los enlaces de un mensaje se consultan en los resolutores de filtrado de Cloudflare, 1.1.1.2 y 1.0.0.2 (malware y phishing) y 1.1.1.3 y 1.0.0.3 (también contenido para adultos). Son consultas DNS normales de nombres como example.com; no se envía ninguna parte del mensaje ni de sus direcciones. Desactívalas con phishing: {cloudflare: false} o --no-cloudflare, o solo la comprobación de contenido para adultos con phishing: {adult: false}.

Todo lo demás está desactivado hasta que se configura:

ComprobaciónEnvíaA
authenticationConsultas DNS de los registros SPF, DKIM, DMARC y ARC del remitenteTu resolutor, o dnsServers
dnsblLa dirección IP del cliente, invertida, y los dominios de los enlaces, como consultas DNSLos servidores de nombres de las listas de bloqueo, a través de tu resolutor o de dns.servers
llmUn resumen del mensaje, sin los datos personales en el caso de los proveedores remotosEl servidor de modelo de lenguaje que indiques (privacidad)
reputation.apiUrlLa dirección IP, el dominio y la dirección del remitenteEl servicio que indiques
clamavLos adjuntosTu clamd, a través de su socket

No hay telemetría, ni comprobación de actualizaciones, ni descargas durante la ejecución. El modelo viene dentro del paquete.

Qué guarda#

Nada, salvo que se le pida. Los análisis no se registran ni se almacenan. learn() cambia el clasificador en memoria; solo se escribe en disco con saveModel(), spamscanner learn o la opción --out de los servidores. Un archivo de modelo contiene recuentos de características convertidos con hash, no palabras ni texto de los mensajes.

Las respuestas del modelo de lenguaje se guardan en caché en memoria, con un hash de lo que se envió como clave, así que sobre las copias repetidas del mismo mensaje se consulta una sola vez. Las respuestas DNS se guardan en caché en memoria durante diez minutos.

Entrada hostil#

  • Los adjuntos se identifican por sus bytes; nunca se ejecutan ni los abre otro programa. Los archivos ZIP se leen desde su directorio central, con un límite en el número de entradas; los archivos anidados no se descomprimen.
  • El texto del cuerpo se lee hasta maxLength (100 000 caracteres) y los servidores aceptan mensajes de hasta 25 MB.
  • Cada comprobación de red tiene un tiempo límite (timeout, 10 segundos de forma predeterminada). Una comprobación que falla o agota su tiempo se omite y el análisis termina sin ella.
  • El 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., el filtro de contenido y --headers eliminan los encabezados X-Spam-* que ya traiga un mensaje, así que los remitentes no pueden marcar su propio correo como limpio.
  • En los encabezados de veredicto de spam de Microsoft solo se confía cuando el mensaje llegó directamente de los servidores de Microsoft, y los encabezados Received nunca se usan para decidir de dónde vino un mensaje.
  • El texto dirigido a filtros de IA se puntúa como spam, y al modelo de lenguaje se le indica que el mensaje son datos, no instrucciones. Inyección de instrucciones

Servidores#

Los servidores milter, 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. La API HTTP compara su token en tiempo constante y rechaza /learn si no hay uno. Ninguno habla TLS: para acceder a ellos a través de una red, usa una red privada, un túnel SSH o un proxy inverso con TLS.

Ejecútalos con un usuario sin privilegios. La unidad de systemd de la guía de Postfix añade el refuerzo de seguridad habitual.

Informar de una vulnerabilidad#

Informa de los problemas de seguridad de forma privada a través del sistema de informe de vulnerabilidades de GitHub, no en issues públicas.

Editar esta página en GitHub · Markdown ·