# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Spamassassin: backup y restauración de la Bayes Database


Tanto para hacer una copia de seguridad como para método de migración de un servidor a otro de la Bayes Database de Spamassasin podemos hacer uso de la herramienta sa-learn. El sistema de filtros bayesianos hace uso de técnicas estadísticas y de probabilidad para detectar los email spam, dando lugar a un porcentaje muy bajo de falsos positivos.

Para hacer la copia de seguridad, es tan sencillo como ejecutar el comando con el parámetro –backup y volcando la salida a un fichero:

# sa-learn --backup > /var/tmp/bayes.back

Para proceder a la restauración, ya sea en el mismo servidor o en otro se usa el parámetro –restore seguido de la ruta al fichero del backup. Podemos forzar también la ruta en la que se almacenan las bases de datos de bayesian:

# sa-learn --restore /var/tmp/bayes.back --dbpath $HOME_BAYES

Os recomiendo leer la documentación de sa-learn para comprender el resto de funcionalidades, como el entrenamiento de los filtros bayesianos para que sean efectivos:

http://spamassassin.apache.org/full/3.0.x/dist/doc/sa-learn.html

Estadísticas de correo, spam y virus con Mailgraph


Mailgraph es un sistema de estadísticas que utiliza como frontend RRDtool y permite recolectar de forma gráfica el número de correos enviados y recibidos en gráficos diarios, semanales, mensuales y anuales. Básicamente tenemos un script en perl corriendo en el servidor, es el encargado de recolectar los datos (rrd), y por otra parte un script cgi a través del cual se generan y visualizan los gráficos vía web.

Instalación de Mailgraph

Mailgraph requiere tener instalado RRDtool y el módulo de Perl File::Tail. RRDTool se puede instalar tanto desde el gestor de paquetes como compilandolo a mano. Lo más rápido, desde YUM o APT:

# yum install rrdtool.i386

El módulo de perl lo podemos instalar desde cPan:

cpan> install File::Tail

Descargamos y descomprimimos la última versión desde el sitio web de mailgraph:

# wget http://mailgraph.schweikert.ch/pub/mailgraph-1.14.tar.gz
#  tar -xzvf mailgraph-1.14.tar.gz
# cd mailgraph-1.14

Ahora vamos a modificar el script base que nos ofrecen para el arranque del demonio en perl (mailgraph-init). Básicamente, tenemos que modificar las siguientes variables:

PATH=/bin:/usr/bin
MAILGRAPH_PL=/usr/local/bin/mailgraph.pl # RUTA DONDE VAMOS A COLOCAR EL SCRIPT
MAIL_LOG=/var/log/maillog # RUTA DE NUESTRO LOG DE CORREO
PID_FILE=/var/run/mailgraph.pid
RRD_DIR=/var/lib/mailgraph # RUTA DONDE ALMACENAR LOS RRD

Una vez realizado esto, movemos el script a init.d, le asignamos permisos de ejecución y lo arrancamos:

# cp mailgraph-init /etc/init.d/mailgraph
#chmod 0755 /etc/init.d/mailgraph
# /etc/init.d/mailgraph start

En este momento el demonio debería estar corriendo:

# ps aux | grep mailgraph
root     13023  1.1  0.2  14132  4128 ?        SNs  17:39   0:27 /usr/bin/perl -w /usr/local/bin/mailgraph.pl -l /var/log/maillog -d --daemon-pid=/var/run/mailgraph.pid --daemon-rrd=/var/lib/mailgraph

Ahora solo nos queda ejecutar el cgi para ver los gráficos generados mediante este script. Lo tendréis que ubicar en una ruta en la que podáis ejecutar CGI, debería tener en apache permitido lo siguiente:

<Directory /carpeta/web/script>
Options ExecCGI
</Directory>

Aseguraos también de que mod_perl está instalado para la ejecución del cgi, y que el handler está configurado en apache:

AddHandler cgi-script .cgi

Esto debería ser todo, ejecutamos el cgi desde el navegador y veremos algo tal que así, en este enlace tenéis una demo a tiempo real.

MailGraph
mailgraph

Reducir el uso de memoria de Spamassassin en cPanel/WHM


Es especialmente útil reducir el uso de memoria de Spamassassin/spamd en servidor con poca memoria RAM, sobre todo en VPS. Por defecto, cPanel está configurado para tener un mínimo de 1 proceso de spare y 3 hijos por proceso. Para modificar estos valores, debemos hacerlo dentro del fichero de configuración /etc/cpspamd.conf:

maxspare=1
maxchildren=1

Y reiniciamos exim:

# /etc/init.d/exim restart

Un valor de 1 para ambos parámetros debería ser suficiente en un VPS. Por supuesto si no se hace uso del servicio es conveniente desactivar Spamassassin completamente.

Spamassassin: prefork: server reached –max-clients setting, consider raising it


En caso de recibir el siguiente error en los logs de spamassassin:

prefork: server reached –max-clients setting, consider raising it

El problema reside en que todos los procesos disponibles de spamd están en uso, para una mayor eficiencia de spamassassin conviene aumentar el número de procesos child, lo cual podemos hacer añadiendo -m10 (10 ó el número que veáis adecuado) al comando de arranque de spamassassin, ejemplo:

 /usr/bin/spamd -u spamd -m15  --daemonize --pidfile /var/run/spamd

Tened en cuenta que esto aumentará el uso de recursos del sistema por parte de spamassassin.

SpamAssassin: Crear regla que examine las cabeceras en busca de una cadena


Spamassassin permite personalizar de una forma increible las reglas y filtros por defecto así como crear nuevas reglas. Normalmente las reglas base suelen ser efectivas para la mayor parte de servidores. Existe la posibilidad por ejemplo de que necesitemos buscar una cadena de texto, host, dirección de correo, etc dentro de TODAS las cabeceras de correo, no solo el FROM:, SUBJECT:, … Para ello podemos crear una nueva regla tal que así:

header LOCAL_DEMONSTRATION_ALL  ALL =~ /cadena\_a\sbuscar/i
score LOCAL_DEMONSTRATION_ALL   20.1

Esta regla es sencilla, le decimos que busque en todas (ALL) las cabeceras (header) una cadena concreta que construimos con la potencia de las expresiones regulares. Posteriormente le asignamos un puntaje spam de 20.

Podéis ubicar estas reglas personalizadas en /etc/mail/spamassassin/local.cf.

Esto es por supuesto la punta del iceberg, hay muchísimas más opciones en la creación de reglas anti-spam, os recomiendo revisar el Wiki de SpamAssassin donde lo explican perfectamente con ejemplos.

MailScanner: Tamaño máximo permitido para que spamassassin analice un email


Por defecto, MailScanner tiene configurado un límite de 250K en lo referente a analisis de correos electrónicos por spamassassin, cualquier mensaje que supere dicho tamaño será omitido y no será analizado por el anti-spam. Para modificar este parámetro, hay que acceder al fichero de configuración de MailScanner:

vim /etc/MailScanner/MailScanner.conf

Localizamos la siguiente línea y configuramos el valor deseado:

Max Spam Check Size = 250k

Posteriormente reiniciamos Mailscanner y listo.

Configurar spamassassin para aceptar conexiones remotas


Por defecto el demonio Spamassassin solo escucha en 127.0.0.1 por lo que si necesitamos configuarlo para que acepte conexiones remotas, por ejemplo para usarlo como servidor anti-spam de MTAs externos, podemos utilizar las siguientes opciones a la hora de levantar el demonio:

–listen-ip: Cambiar la IP que escuchará en el puerto 783 de spamassassin
–port: Cambiar el puerto por defecto (783)
–allowed-ips: Restringir el acceso al servidor anti-spam solamente a X IPs

Estas son las opciones más importantes a tener en cuenta para configurar el anti-spam para servir a servidores de correo externos, un ejemplo de comando de arranque sería:

/usr/bin/spamd --daemonize --pidfile /var/run/spamd --listen-ip 10.0.0.40 --allowed-ips 10.0.0.50 10.0.0.51

Con esa línea, spamassassin escucha en la IP 10.0.0.40:783 (podéis comprobarlo haciendo un netstat) y permitimos a las IPs 10.0.0.50 y 10.0.0.51 conectar remotamente al servicio anti-spam