SpamAssassin con Exim4 en Debian

Esta página describe cómo configurar Exim4 para que use SpamAssassin, el filtro de correo electrónico no solicitado (spam). Esta configuración sirve solo a quienes tienen un servidor con FQDN que recibe correo electrónico, o que usa un "smarthost".

Bloquear spam con listas negras DNSBL es otro método complementario a éste.


Introducción

SpamAssassin lee el encabezado y cuerpo de un correo electrónico entrante o saliente y determina, mediante una serie de pruebas, si es spam o no. Cada prueba tiene asignado una puntación (score). El encabezado del correo electrónico es reescrito, agregando lineas indicando las pruebas positivas, la suma total de las puntaciones y una bandera, que indica spam o no, si la suma total sobrepasa un limite predeterminado.

La herramienta sa-learn sirve para clasificar spam local, usando el teorema de Bayes para calcular la probabilidad de que un mensaje sea spam basado en la ocurrencia de ciertas palabras. Esto sirve para filtrar spam que las pruebas básicas de SpamAssassin no reconocen, particularmente spam en Castellano ideado para un público chileno.

Instalación

Instala los paquetes spamassassin y spamc,

# apt-get install spamassassin spamc

Edita /etc/default/spamassassin y modifica la variable ENABLED a,

ENABLED=1

Modifica también la variable CRON a,

CRON=1

para realizar actualizaciones a la tabla de reglas una vez al día.

Inicia spamd con,

# /etc/init.d/spamassassin start

Instala el paquete sa-exim,

# apt-get install sa-exim

Edita /etc/exim4/sa-exim.conf y comenta la línea,

SAEximRunCond: 0

para que lea,

#----------------------------------------------------------------------
# Remove or comment out the following line to enable sa-exim
#SAEximRunCond: 0
#----------------------------------------------------------------------

Actualiza la configuración de Exim,

# update-exim4.conf

y reinicia exim4,

# /etc/init.d/exim4 restart

Usando SpamAssassin

El servidor spamc corre cada vez que Exim4 recibe un correo electrónico y efectúa las pruebas predeterminadas. En el encabezado del mensaje puedes ver el estado y las pruebas que fueron positivas. Por ejemplo,

  X-SA-Exim-Connect-IP: 220.168.166.39
  X-SA-Exim-Mail-From: extronix@gnosticweb.com
  Subject: FDA approved on-line pharmacies
  X-Spam-Flag: YES
  X-Spam-Checker-Version: SpamAssassin 3.1.7-deb (2006-10-05) on
    debian.ciencias.uchile.cl
  X-Spam-Level: ****
  X-Spam-Status: Yes, score=5.1 required=5.0 tests=BODY_ENHANCEMENT2,DRUGS_DIET,
    DRUGS_ERECTILE,DRUGS_MANYKINDS,DRUGS_MUSCLE,DRUGS_PAIN,
    DRUG_ED_GENERIC,HG_HORMONE,HTML_MESSAGE,UNPARSEABLE_RELAY
    autolearn=no version=3.1.7-deb
  X-SA-Exim-Version: 4.2.1 (built Tue, 09 Jan 2007 17:23:22 +0000)
  X-SA-Exim-Scanned: Yes (on debian.ciencias.uchile.cl)

En este ejemplo la suma total de las puntaciones es score=5.1. Si supera 5.0 (required), el correo es catalogado como spam y marcado con,

  X-Spam-Status: Yes

Si la puntación es mayor a 12.0 el mensaje es rechazado. Una copia del mensaje rechazado es guardado en /var/spool/sa-exim/SApermreject/new/.

Usando procmail para sortear spam

Crea y edita el archivo /etc/procmailrc. Agrega,

:0:
* ^X-Spam-Status: Yes
mail/probably-spam

Esta regla se encarga de reconocer la marca de SpamAssassin y redirigir el correo a $HOME/mail/probably-spam. Asi cada usuario pude revisar si los mensajes filtrados son efectivamente spam o no.

Otra alternativa es,

:0:
* ^X-Spam-Status: Yes
/var/spool/spamassassin/probably-spam

Crea previamente el archivo con,

# mkdir -p /var/spool/spamassassin
# touch /var/spool/spamassassin/probably-spam
# chgrp mail /var/spool/spamassassin/probably-spam
# chmod 640 /var/spool/spamassassin/probably-spam

Así solo el administrador puede revisar el correo catalogado como spam, por ejemplo, con,

# mail -f /var/spool/spamassassin/probably-spam

Procesar spam de esta manera sirve cuando el volumen de spam es alto y los usuarios no están interesados en revisar spam y nunca limpian sus respectivas carpetas $HOME/mail/probably-spam.

Configuración y uso de clasificadores Bayesianos

Crea el directorio /var/spool/spamassassin con permisos de escritura,

# mkdir -p -m 777 /var/spool/spamassassin

Edita /etc/spamassassin/local.cf y agrega al final,

bayes_path              /var/spool/spamassassin/bayes
bayes_file_mode         0666

Reinicia spamd con,

# /etc/init.d/spamassassin restart

Instruir SpamAssassin a reconocer spam

Para instruir a SpamAssassin a clasificar nuevo spam corre,

$ sa-learn --spam --mbox ~/mail/spam

en donde el spam no detectado está guardado en formato mbox en el archivo $HOME/mail/spam.

Una tabla con los clasificadores Bayesianos se guarda en /var/spool/spamassassin y tiene atributos de escritura globales (666). Todo usuario puede instruir spam. Modifica estos permisos con la variable bayes_file_mode si deseas restringir el uso de sa-learn.

SpamAssassin usa la clasificación Bayesiana con las pruebas BAYES_XX. La prueba BAYES_99 reconoce con 99% de seguridad los clasificadores Bayesianos, BAYES_90 un 90% y así. La puntación de BAYES_99 es 3.5, BAYES_90 es 2.0, etc.

Instruir a SpamAssassin a olvidar spam

Si un mensaje es instruido como spam por equivocación, es posible instruir al clasificador Bayesiano que lo olvide. Corre,

$ sa-learn --forget --mbox ~/mail/no-spam

El (los) mensajes en ~/mail/no-spam deben previamente haber sido entrenados con --spam.

Instruir a SpamAssassin a clasificar ham

A veces SpamAssassin califica de spam a correo que no lo es. Esto sucede principalmente con correo generado automáticamente con un cgi-bin, en donde el programador omite tontamente escribir un encabezado completo.

Para instruir a SpamAssassin a reconocer ham (lo contrario de spam) corre,

$ sa-learn --ham --mbox ~/mail/ham

Consejos para filtrar spam chileno

Las pruebas de SpamAssassin no están hechas para detectar spam chileno. Por eso hay que usar los clasificadores Bayesianos. Pero para que estos entren en acción se requiere haber entrenado una buena cantidad de spam (unos 100-200).

Una manera de recolectar spam para construir los clasificadores Bayesianos es haciendo una copia de cada correo electrónico recibido, suponiendo que el servidor tiene muchos usuarios. Esto se hace fácilmente con procmail, agregando una regla en /etc/procmailrc como ésta,

RESPALDO=/var/spool/exim4/backup/
HOY=`date +%Y-%m-%d`

:0 c:
$RESPALDO/$HOY

El directorio debe existir,

# mkdir -m 750 /var/spool/exim4/backup/

Una vez que los clasificadores entren en acción, es recomendable ajustar los parámetros en /etc/spamassassin/local.cf.

Lo primero es sacar de una lista blanca interna las direcciones @gmail.com. Muchos spameros chilenos envían spam de IP dinámicos y reescriben la dirección de origen a cuentas GMail ficticias. El correo GMail legitimo es enviado de los servidores SMTP GMail. Estos no obtienen suficiente puntación como para ser filtrados. Edita /etc/spamassassin/local.cf y agrega,

unwhitelist_from *@gmail.com
unwhitelist_from_rcvd *@gmail.com

Agrega otros dominios en la misma linea separados por un espacio, por ejemplo *@aol.com, *@hotmail.com o *@chile.com,

Segundo, aumentar la puntación de BAYES_99, por ejemplo, a 6.0,

score BAYES_99          6.0

Esto garantiza que mensajes que pasan esta prueba son catalogados como spam.

Una alternativa es forzar el mensaje a ser rechazado,

score BAYES_99          15.0

Reinicia spamd con,

# /etc/init.d/spamassassin restart

cada vez que hagas modificaciones a la configuración.

EximSpamAssassin (última edición 2011-03-05 16:38:22 efectuada por RicardoYanez)