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 sitios con listas negras DNSBL es otro método complementario a éste.
Contents
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
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 correo 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.