Seguridad: SpamAssasin y el correo no deseado

 

 

Hace poco instale spamassasin para entender su funcionamiento y me sorprende lo poco que necesita de atención humana, pero eso sí, hay cosillas que es mejor echarle un ojo para entender como funciona.

Lo que vamos a analizar a continuación, usualmente está resuelto de manera transparente al usuario o incluso al administrador de sistemas, especialmente si usan paneles de control, pero como siempre, aquí jugamos por los Loles.

Este Post pertenece a la categoría SEGURIDAD

Puedes encontrar todos los artículos en orden cronológico en la etiqueta POSTFIX

Introducción

Voy a ser sincero. Subestimaba muy duro a SpamAssassin. Probablemente por las experiencias ya muy antiguas que tuve con mi primer hosting o tal vez por asumir que el hecho de que haya correos de spam muy tontos fingiendo ser paneles de administración de hosting, me hizo pensar que si existen, seguro es porque pasan. Pero tras las primeras pruebas, ha logrado neutralizar todo el spam sin tener que configurar nada. Es muy bueno y parece que puede ser mejor.

Hoy me llegó un correo que, por otro lado, es Spam, pero no fue detectado. SpamAssasin lo analizo, pero le puso una calificación de 3.0 de 5. Insuficiente para ser movido a la bandeja de spam, pero suficiente para ser sospechoso. Aquí los elementos de alarma detectados por la herramienta:

  1. Fallo de DKIM (Suplantación de identidad): La cabecera muestra dkim=fail reason=»key not found en DNS». El remitente afirma ser de Asia-cargo.com.cn, pero el servidor de correo descubrió que la firma digital de ese dominio no existe o está mal configurada. Esto es un indicador clásico de que alguien está intentando falsificar la identidad (Sporting) de esa empresa de carga.
  2. Inconsistencia de dominios: El correo dice venir de un rebote de ai-freight.com (en el campo Return-Path), pero la firma digital que falla intenta validar a Asia-cargo.com.cn. Que usen múltiples dominios extraños en un solo envío es una táctica típica para evadir filtros.
  3. Tácticas de ocultamiento (Pruebas de SpamAssassin):HTML_OBFUSCATE_10_20: El correo usa código HTML diseñado específicamente para esconder texto o enlaces a los filtros automáticos.
  4. MPART_ALT_DIFF: La versión de texto plano del correo y la versión HTML son muy diferentes. Los spammers hacen esto para mostrarle una cosa amigable al usuario (HTML) y un texto aleatorio al filtro para confundirlo.
  5. URIBL_BLOCKED: Tu servidor no pudo consultar las listas negras de enlaces porque superó la cuota de consultas gratuitas, lo que significa que SpamAssassin no pudo verificar si los enlaces internos del correo eran peligrosos.

Por cierto, tengo esta novedad; URIBL_BLOCKED

Esto sucede porque mi servidor, al pertenecer al rango de IP de Digital Ocean, fue bloqueado por qué… pues porque al ser un proveedor barato de vps, lo usan hartísimo para spam. No puedo cambiar eso, así que no puedo contar con ese tipo de filtros.

Haciendo algunos ajustes

Cuando instalas SpamAssassin, el sistema viene con reglas estáticas (matemáticas y de formato). Sin embargo, para atrapar el spam más escurridizo, como los correos de logística asiática que parecen limpios, el servidor necesita usar su Filtro Bayesiano (un motor estadístico que aprende de tus propios correos).

¿Cómo funciona el aprendizaje en SpamAssassin?

SpamAssassin no analiza los correos con un simple «pasa o no pasa». Utiliza dos pilares:

  1. Reglas de red y formato: Verifica si el remitente tiene DKIM/SPF válido, si el HTML está oculto, etc.
  2. Filtro Bayesiano (SA-lean): Analiza la frecuencia de las palabras. Si en 100 correos de spam se repite la palabra «LCL Cargo», el sistema aprende estadísticamente que esa combinación de palabras es altamente sospechosa.

Si ejecutaste el comando en una carpeta con 3 correos y el sistema reportó que solo examinó uno, se debe a dos razones:

  1. Toques duplicados: SpamAssassin calcula un identificador único (huella digital o Message-ID) para cada correo. Si ya había procesado esos correos antes, los ignora para no duplicar la estadística.
  2. Falta de información: Si un correo es extremadamente corto o idéntico a uno ya aprendido, el contador no se incrementa.

Para ver qué ha aprendido en específico, no puedes ver una lista de «palabras exactas», pero sí puedes ver las estadísticas globales de su cerebro con este comando:

sa-learn --dump magic

Esto te mostrará cuántos correos buenos (Ham) y malos (Spam) ha memorizado, junto con el número de «toques» (palabras/patrones) que tiene guardados.

Una observación importante:

El filtro Bayesiano no se activará de forma automática hasta que haya aprendido de al menos 200 correos de spam y 200 correos de ham (legítimos).

El comando para aprendizaje bayesiano

Dado que estamos explorando un ambiente muy manual, sin panel de control ni nada, necesitamos hacer algunos procesos para ejecutar y activar el aprendizaje bayesiano.

En un entorno manual con formato Maildir (donde cada correo es un archivo físico dentro del servidor), la carpeta Junk se divide en dos sub carpetas: new (correos nuevos sin leer) y cur (correos ya vistos).

Para forzar a SpamAssassin a aprender de todo lo que tú o tus usuarios hayan movido a la carpeta de correo no deseado, usa el siguiente comando:

sa-learn --spam /home/usuario/Maildir/.Junk/{cur,new}

Automatización con Tareas Cron (Por Usuario)

No queremos ejecutar este comando a mano todos los días. Lo ideal es que el propio usuario del sistema (o el usuario que corre el servicio de correo, por ejemplo vmail si usas usuarios virtuales) ejecute la tarea por las noches.

Abre el crontab del usuario específico (reemplaza usuario por el nombre real en tu sistema):

crontab -u usuario -e

Añade la siguiente línea para que se ejecute todas las noches a las 12:00 AM:

0 0 * * * sa-learn --spam /home/usuario/Maildir/.Junk/{cur,new} > /dev/null 2>&1

(El redireccionamiento > /dev/null 2>&1 evita que el servidor te envíe un correo interno cada vez que se ejecute la tarea cron).

Moviendo el Spam automáticamente con Reglas Sieve

SpamAssassin solo se encarga de «marcar» el correo (usualmente añade X-Spam-Flag: YES o X-Spam-Status: Yes en las cabeceras). No lo mueve de carpeta.

Para moverlo automáticamente a la carpeta Junk, usamos Sieve (a través de Dovelo). (no haré un tutorial de como instalarlo, pues hay mucha información al respecto, pero tal vez analice como activarlo)

Crear el archivo de reglas del usuario

Crea un archivo llamado.dovelo.sieve en el directorio home del usuario:

nano /home/usuario/.dovecot.sieve

Pegar la regla de filtrado

Pega el siguiente código estándar de Sieve. Este script lee las cabeceras que inyectó SpamAssassin; si ve que está marcado como spam, lo mueve a la carpeta correspondiente:

require ["fileinto", "mailbox"];

# Si SpamAssassin marcó el correo con la cabecera X-Spam-Flag en YES
if header :contains "X-Spam-Flag" "YES" {
# Crea la carpeta Junk si no existe y mueve el correo ahí
fileinto :create "Junk";
stop;
}

Permisos correctos

Es vital que el archivo pertenezca al usuario del correo y no a robot, de lo contrario Dovelo no podrá leerlo:

chown usuario:usuario /home/usuario/.dovecot.sieve

chmod 600 /home/usuario/.dovecot.sieve

Unas cuantas curiosidades

Hay un comportamiento por default que tiene spamassassin que me gusto mucho y es que si bien conserva el asunto del correo, en el cuerpo te entrega un resumen de por qué cree que es spam y claro, su calificación, mientras que en el adjunto puedes encontrarte con el correo de spam en sí, en formato .eml, el cual puedes descargar y abrir sin ningún problema (no des clic a enlaces, ni cargues contenidos remotos ni abras adjuntos eso sí)

Esto lo hace por pura seguridad, para evitar que tu cliente de correo ejecute código HTML malicioso o cargue imágenes espía automáticamente.

Si prefieres que el correo te llegue completo a la bandeja Junk (manteniendo su formato original, pero con las cabeceras modificadas de SpamAssassin para que Sieve lo mueva), debes cambiar la configuración global.

Abre el archivo de configuración global:

nano /etc/mail/spamassassin/local.cf

Busca la línea reportaje (o agrégala si no existe) y cámbiala a 0:

Reportaje 0

  • 0: Desactivado. El correo llega íntegro, solo se modifican las cabeceras (ideal para entornos modernos).
  • 1: Activado (por defecto). Empaqueta el correo en un adjunto de texto.

Reinicia el servicio para aplicar el cambio:

systemctl restart spamassassin

El filtro puede aprender que es lo bueno

El filtro bayesiano no puede solo aprender de lo malo; necesita un punto de comparación. Si SpamAssassin comete un falso positivo (marcar como spam un correo que sí querías), debes rescatarlo. Una vez que muevas manualmente ese correo de la carpeta Junk de vuelta a la Inbox (Bandeja de entrada), debes decirle a SpamAssassin que se equivocó usando –ham:

sa-learn --ham /home/usuario/Maildir/{cur,new}

Conclusiones

Los spammers son cada vez más ingeniosos para mandar spam, pero la verdad es que la mayor parte del tráfico es obsoleto. Mensajes enviados desde bots que han sido abandonados y que no se han actualizado por años, así que basta con herramientas sencillas. Aun así, SpamAssasin no es una herramienta sencilla, sino una muy poderosa que puede facilitar mucho el trabajo administrativo y de seguridad. Por supuesto, complementado con directivas de seguridad ampliamente aceptadas, como rechazar correos que no tengan DKIM válido o dominios comprobables.

Notas adicionales:

Este artículo fue corregido utilizando LanguageTools mediante un plug-in para wordpress. Estaré probándolo en adelante para ver que tal le va, pero si alguien ve algún error o incoherencia, agradecería que me lo comuniquen. Es interesante usar este sistema, pero me costó un montón que trabaje de manera no destructiva.

 

Únete a mi red poniendo la URL de tu blog. Aprender más

 
Interlan
Interlan
@interlan.ec@interlan.ec

Este es mi sitio personal y profesional, donde publico mis actividades, experimentos y servicios que he ido desarrollando durante mi crecimiento profesional.

154 publicaciones
0 seguidores

Descubre más desde Interlan

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Fecha de publicación


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.