octubre 18, 2012

Instalación, configuración y optimización de Spamassassin.

Instalación, configuración y optimización de Spamassassin.

Fuente original en http://www.alcancelibre.org/staticpages/index.php/como-spamassassin
 
Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org
Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

Introducción.

Acerca de SpamAssassin.

SpamAssassin  es una implementación que utiliza un sistema de puntuación, basado sobre algoritmos de tipo genético, para identificar mensajes que pudieran ser sospechosos de ser correo masivo no solicitado, añadiendo cabeceras a los mensajes de modo que pueda ser filtrados por el cliente de correo electrónico o MUA (Mail User Agent).
URL: http://spamassassin.apache.org/

Acerca de Procmail.

Procmail es un programa que funciona como MDA (Mail Delivery Agent o Agente de Entrega de Correo) que se utiliza para gestionar la entrega de correo local en el sistema. Además de lo anterior, permite también realizar filtración automática del correo electrónico, pre-ordenamiento y otras tareas.
Procmail puede ser utilizado indistintamente con Sendmail o bien Postfix.
URL: http://www.procmail.org

Equipamiento lógico necesario.

Instalación a través de yum.

Si dispone de un servidor con CentOS 5 o 6 o bien Red Hat™ Enterprise Linux 5 o 6, puede utilizar el siguiente mandato:
yum -y install spamassassin procmail
Si se utiliza Sendmail como servidor de correo electrónico, procmail ya debe estar instalado, pues es dependencia del paquete sendmail. Si se utiliza Postfix como servidor de correo electrónico, es necesario editar el archivo /etc/postfix/main.cf y añadir o descomentar mailbox_command = /usr/bin/procmail o bien simplemente ejecutar los siguientes dos mandatos.
postconf -e 'mailbox_command = /usr/bin/procmail'
service postfix restart
Si se quiere instalar paquetes adicionales para incrementar las capacidades de filtrado de Spamassassin, se pude crear el archivo /etc/yum.repos.d/AL-Server.repo. Si dispone de un servidor con CentOS 5 o 6 o bien Red Hat™ Enterprise Linux 5 o 6, puede utilizar el el almacén YUM de Alcance Libre para servidores en producción, descargando el archivo http://www.alcancelibre.org/al/server/AL-Server.repo dentro del directorio /etc/yum.repos.d/:
cd /etc/yum.repos.d/
wget -N http://www.alcancelibre.org/al/server/AL-Server.repo
cd
Este archivo, que se guarda como /etc/yum.repos.d/AL-Server.repo, debe tener el siguiente contenido:
[AL-Server]
name=AL Server para Enterprise Linux $releasever
mirrorlist=http://www.alcancelibre.org/al/el$releasever/al-server
gpgcheck=1
gpgkey=http://www.alcancelibre.org/al/AL-RPM-KEY
Hecho lo anterior, será posible instalar los paquetes perl-Mail-SPF, perl-Razor-Agent, pyzor, spamassassin-FuzzyOcr, popler-utils y re2c:
yum -y install perl-Mail-SPF perl-Razor-Agent pyzor
yum -y install spamassassin-FuzzyOcr poppler-utils re2c

SELinux y el servicio spamasssassin.

Políticas de SElinux.

A fin de que SELinux permita al servicio spamassassin conectarse a servicios externos, como Razor o Pyzor, utilice el siguiente mandado:
setsebool -P spamassassin_can_network 1
A fin de que SELinux permita a los usuarios del sistema utilizar spamassassin desde sus directorios de inicio, utilice el siguiente mandato:
setsebool -P spamd_enable_home_dirs 1
Nota.
Lo siguiente sólo aplica para CentOS 5 y Red Hat™ Enterprise Linux 5.
Si se desea desactivar toda gestión de SELinux sobre el servicio spamassassin, haciendo que todo lo anterior pierda sentido y eliminando la protección que brinda esta implementación, utilice el siguiente mandato:
setsebool -P spamd_disable_trans 1
Esta política es inexistente en CentOS 6 y Red Hat™ Enterprise Linux 6.

Otros ajustes de SELinux.

A fin de que SELinux permita a spamassassin añadir registros a la bitácora del servicio de Razor, es necesario generar una nueva política.
Genere un nuevo directorio denominado /usr/share/selinux/packages/spamd:
mkdir /usr/share/selinux/packages/spamd
Cambiarse al directorio /usr/share/selinux/packages/spamd:
cd /usr/share/selinux/packages/spamd
Si se utiliza CentOS 6 o Red Hat Enterprise Linux 6, Descargar el archivo http://www.alcancelibre.org/linux/secrets/el6/spamd.te:
wget http://www.alcancelibre.org/linux/secrets/el6/spamd.te
Editar el archivo recién descargado:
vim spamd.te
Asegurarse que tenga el siguiente contenido:
module spamd 1.0;

require {
 type spamc_t;
 type admin_home_t;
 type sendmail_t;
        type spamd_t;
        type root_t;
        class lnk_file read;
 class fifo_file write;
        class file { ioctl read open getattr append };
}

#============= spamd_t ==============
allow spamd_t root_t:file { ioctl append };
allow spamd_t admin_home_t:file { read ioctl open getattr append };


#============= spamc_t ==============
allow spamc_t sendmail_t:fifo_file write;
allow spamc_t admin_home_t:file { read open };
Lo anterior fue obtenido de la salida del mandato dmesg|grep audit|audit2allow -m spamd>spamd.te en un sistema donde SELinux impedía a spamassassin realizar escritura sobre la bitácora de Razor. En si, define que se permita añadir contenido al archivo /razor-agent.log.
Si se utiliza CentOS 5 o Red Hat Enterprise Linux 5, Descargar el archivo http://www.alcancelibre.org/linux/secrets/el5/spamd.te:
wget http://www.alcancelibre.org/linux/secrets/el5/spamd.te
Editar el archivo recién descargado:
vim spamd.te
Asegurarse que tenga el siguiente contenido:
module spamd 1.0;

require {
 type spamc_t;
 type sendmail_t;
        type spamd_t;
        type root_t;
        class lnk_file read;
 class fifo_file write;
        class file { ioctl append };
}

#============= spamd_t ==============
allow spamd_t root_t:file { ioctl append };

#============= spamc_t ==============
allow spamc_t sendmail_t:fifo_file write;
A continuación, se genera el archivo de módulo para SELinux (spamd.mod) utilizando el mandato checkmodule de la siguiente forma:
checkmodule -M -m -o spamd.mod spamd.te
Luego, se procede a empaquetar el archivo spamd.mod como el archivo spamd.pp:
semodule_package -o spamd.pp -m spamd.mod
Finalmente se vincula el archivo spamd.pp obtenido con las políticas actuales de SELinux y se cargan éstas en el núcleo en ejecución:
semodule -i /usr/share/selinux/packages/spamd/spamd.pp
Una vez cargadas las nuevas políticas, se pueden eliminar los archivos spamd.te y spamd.mod, pues sólo será necesario que exista el archivo binario spamd.pp.

Procedimientos.

Iniciar el servicio y añadirlo a los servicios de arranque del sistema.

chkconfig spamassassin on
service spamassassin restart
Cabe señalar, que sólo es necesario utilizar el servicio spamassassin si el servidor de correo electrónico dispone de una gran cantidad de usuarios o bien tiene una elevada cantidad de tráfico. Si se dispone de pocos usuarios, es posible utilizar el mandato spamassassin a través del archivo /etc/procmailrc o bien ~/.procmailrc.

Configuración de Procmail.

Hay tres formas de utilizar Procmail para hacer uso de Spamassassin.

Utilizando el mandato spamassassin.

La forma más simple de utilizar Spamassassin es haciendo uso del mandato con el mismo nombre. Funciona bien sólo si se tienen pocos usuarios, pues genera una instancia de éste cada vez que se utiliza o llega un mensaje de correo electrónico al sistema. La siguiente es la configuración recomendada para el archivo /etc/procmailrc, sí se desea que aplique a todos los usuarios del sistema o bien el archivo ~/.procmailrc del directorio de inicio de un usuario en particular, si sólo se desea que sea utilizado por algunos usuarios:
:0fw
| /usr/bin/spamassassin
Sí se dispone de muchos usuarios, es más conveniente utilizar el mandato spamc, mismo que requiere esté funcionado el servicio spamassassin. La siguiente es la configuración recomendada para el archivo /etc/procmailrc, sí se desea que aplique a todos los usuarios del sistema o bien el archivo ~/.procmailrc del directorio de inicio de un usuario en particular, si sólo se desea que sea utilizado por algunos usuarios:
:0fw
| /usr/bin/spamc
Todo lo anterior hace que el correo electrónico sea examinado y marcado como Spam si alcanza una cantidad suficiente de puntos. Si se desea realizar un filtrado enviando el correo calificado como Spam hacia una capeta de correo (~/mail/Spam), se puede utilizar lo siguiente:
:0fw
| /usr/bin/spamc

# Los mensajes marcados como spam se almacenan en carpeta de spam
:0:
* ^X-Spam-Status: Yes
$HOME/mail/Spam

Configuración del archivo /etc/mail/spamassassin/local.cf.

Edite el archivo /etc/mail/spamassassin/local.cf.
vim /etc/mail/spamassassin/local.cf
Se pueden modificar y añadir parámetros con valores, entre los cuales se pueden configurar los siguientes:
required_hits
Se utiliza para establecer la cantidad de puntos acumulados, y asignados por SpamAssassin, en un mensaje para considerar el éste como Spam. El valor predeterminado es 5, acepta decimales y se puede ajustar con un valor inferior o mayor de acuerdo al criterio del administrador. Ejemplo: 4.5
report_safe
Determina si el mensaje, si es calificado como spam, se incluye en un adjunto, con el valor 1 o se deja el mensaje tal y como está, con el valor 0. El valor predeterminado es 0.
rewrite_header
Define con que cadena de caracteres se añadirá al mensaje para identificarlo como Spam. El valor predeterminado es [SPAM], y puede cambiarse por lo que considere apropiado el administrador. Ejemplo: rewrite_header Subject [Spam?]
whitelist_from
Se utiliza para definir que jamás se considere como Spam los mensajes de correo electrónico cuyo remitente sea un dominio o cuenta de correo electrónico en particular. Se pueden definir varias líneas. Ejemplo:

whitelist_from *@midominio.algo
whitelist_from *@alcancelibre.org
whitelist_from 201.161.1.226
whitelist_to
Si utiliza una lista de correo electrónico (majordomo o mailman), y se desea evitar que accidentalmente se considere Spam un mensaje de correo electrónico emitido por una de estas listas, se puede definir que nunca se considere Spam el correo emitido por dicha lista. Ejemplo: whitelist_to mailman-users@algo.algo
blacklist_from
Se puede definir que todo el correo electrónico proveniente de un dominio o cuenta de correo electrónico en particular siempre sea considerado como Spam. Ejemplo: blacklist_from alguien@spammer.com
Hay una herramienta de configuración de SpamAssassin, que permite generar el archivo /etc/mail/spamassassin/local.cf, en http://www.yrex.com/spam/spamconfig.php.
De primera instancia, añada al archivo /etc/mail/spamassassin/local.cf sus direcciones IP locales con el parámetro whitelist_from. Ejemplo:
# These values can be overridden by editing ~/.spamassassin/user_prefs.cf 
# (see spamassassin(1) for details)

# These should be safe assumptions and allow for simple visual sifting
# without risking lost emails.

required_hits 5
report_safe 0
rewrite_header Subject [SPAM]
whitelist_from 127.0.0.1
whitelist_from 192.168.1.91
whitelist_from 201.161.1.226
Sí se utiliza el mandato spamassassin en el archivo /etc/procmailrc o ~/.procmailrc, los cambios surten efecto de inmediato. Sí se utiliza el mandato spamc, para que surtan efecto los cambios se requiere reiniciar el servicio spamassassin:
service spamassassin restart

Consejos para sacarle mejor provecho a Spamassassin utilizando sa-learn.

Muchos administradores de servidores utilizan Spamassassin para filtrar los mensajes de correo electrónico que llegan a sus servidores. Si embargo, son muy pocos los que conocen y utilizan la herramienta sa-learn, incluida con Spamassassin, misma que sirve para entrenar y enseñar a identificar spam (o correo chatarra) al propio Spamassassin.
Esencialmente, el mandato sa-learn sirve para entrenar al componente clasificador Bayesiano de Spamassassin.
La forma que sugiero consiste en utilizar el cliente de correo electrónico y mover todos los mensajes que se consideren como spam a una carpeta destinada para tal finalidad, como por ejemplo ~/mail/Spam y mover de la carpeta de spam todos aquellos mensajes que se consideran como legítimos a cualquier otra carpeta de correo o bien el buzón de entrada.
Acto seguido, se utiliza el mandato sa-learn, con las opciones --spam, para indicar que se trata de mensajes de spam y la opción --mbox, para indica que se trata de un buzón de correo en formato mbox, lo cual permitirá examinar todos los mensajes contenidos en éste:
sa-learn --spam --mbox ~/mail/Spam
Para que los mensajes que se clasificaron incidentalmente como spam y que fueron movidos a otra carpeta (como por ejemplo ~/mail/Mensajes) o bien el buzón de entrada (/var/spool/mail/usuario), se utiliza el mandato sa-learn con las opciones --ham, para indicar que es correo legítimo y que se debe dejar de considerar éste como spam y la opción --mbox, para indica que se trata de un buzón de correo en formato mbox, lo cual permitirá examinar todos los mensajes contenidos en éste:
sa-learn --ham --mbox ~/mail/Mensajes
sa-learn --ham --mbox /var/spool/mail/usuario
De este modo y considerando que se utiliza el archivo ~/.promailrc, lo cual sólo aplicaría para el usuario utilizado o bien /etc/procmailrc, sí se desea que aplique para todos los usuarios del servidor, contiene algo similar a lo siguiente:
MAILDIR=$HOME/mail
LOGFILE=$HOME/mail/log

# send mail through spamassassin
:0fw
| /usr/bin/spamassassin

#Mensjes marcados como spam, ponerlos en carpeta de spam
:0:
* ^X-Spam-Status: Yes
Spam
Se conseguirá que la mayoría los mensajes de spam similares a los que se movieron a la carpeta ~/mail/Spam, en adelante serán más fáciles de identificar y filtrar y los mensajes que incidentalmente se clasificaron como spam, dejarán de ser clasificados como tales o bien será más difícil que sean clasificados como spam.
Todo lo anterior puede ser utilizado como el usuario root, lo cual haría que los nuevos filtros creados al entrenar a Spamassassin apliquen para todos los usuarios o bien como cualquier usuario, lo cual sólo tendrían efecto para éste en particular.
Si alguien tiene interés en aprender más acerca del mandato sa-learn, puede hacerlo consultando desde una terminal de texto ejecutando man sa-learn.

Incrementando las capacidades de filtrado.

A fin de enriquecer la capacidad de detección de spam de Spamassassin, pueden instalarse paquetes opcionales como perl-Mail-SPF, perl-Razor-Agent. Los tres brindan capacidades adicionales de filtración de spam, descritas más adelante y pueden contribuir de manera significativa a reducir la cantidad de spam que de otro modo podría pasar por alto Spamassassin.
Para los todos los procedimientos descritos a continuación, se considera que en el servidor de correo electrónico se utiliza como sistema operativo CentOS 5 y 6 o bien Red Hat Enterprise Linux 5 y 6, se tienen instalados los paquetes procmail (requisito del paquete sendmail y opcional para el paquete postfix) y spamassassin y que se tiene configurado al menos lo siguiente en el archivo /etc/procmailrc:
# send mail through spamassassin
:0fw
| /usr/bin/spamc

# Los mensajes marcados como Spam se almacenan en carpeta ~/mail/Spam
:0:
* ^X-Spam-Status: Yes
$HOME/mail/Spam
Primeramente y con la finalidad de actualizar el juego de reglas y filtros de Spamassassin, es conveniente utilizar el mandato sa-update de vez en cuando, a lo sumo una o dos veces al mes. Los juegos de reglas y filtros de Spamassassin realmente sufren pocos cambios a lo largo del año y se almacenan en un sub-directorio dentro de /var/lib/spamassassin/. Sólo es necesario conservar el sub-directorio con la versión más reciente. El siguiente mandato realizará la consulta y actualización de reglas y filtros de Spamassassin y reiniciará el servicio solamente si se descargó una actualización:
sa-update -v && service spamassassin restart
La opción -v hace que se muestre una salida que incluye una descripción de los canales actualizados. Si desea una salida limpia, sin mensajes descriptivos, ejecute lo siguiente:
sa-update && service spamassassin restart
Para instalar el conjunto de paquetes que enriquecerán las capacidades de filtrado de Spamassassin, considerando que tiene configurados los almacenes YUM para AL Server de Alcance Libre, ejecute lo siguiente:
yum -y install perl-Mail-SPF perl-Razor-Agent pyzor
yum -y install spamassassin-FuzzyOcr poppler-utils

Si se utilizan paquetes provenientes de otros almacenes YUM distintos a los de Alcance Libre, el complemento para Pyzor incluido dentro de Spamassassin requerirá además el paquete perl-Digest-SHA:
yum -y install perl-Digest-SHA
A fin de que Spamassassin pueda utilizar los complementos que hacen uso de los complementos que se activan con estos componentes, es necesario reiniciar el servicio spamassassin:
service spamassassin restart

Optimizando Spamassassin.

Si se tiene un servidor de correo electrónico con mucha carga de trabajo, conviene optimizar spamasassassin compilando las reglas de éste para convertirlas a formato binario. Para tal fin es necesario que esté instalados los paquetes re2c y gcc:
yum -y install re2c gcc
Y enseguida se ejecuta el mandato sa-compile:
sa-compile
Si la sintaxis del archivo /etc/mail/spamassassin/local.cf está correcta, el sistema debe realizar la compilación y almacenar los binarios dentro de /var/lib/spamassassin/compiled/. Lo anterior deberá ser repetido cada vez que se realicen modificaciones del archivo /etc/mail/spamassassin/local.cf o bien se actualice el conjunto de reglas con el mandato sa-update.

¿Por qué Perl-Mail-SPF, Perl-Razor-Agent, Pyzor, Spamassassin-FuzzyOcr y poppler-utils?

Perl-Mail-SPF.

Perl-Mail-SPF Implementa una protección contra la falsificación de direcciones en el envío de correo electrónico conocida como SPF (Sender Policy Framework o Convenio de Remitentes). Funciona realizando consultas a los servidores DNS en busca del registro TXT para SPF que específica los servidores de correo electrónico autorizados para enviar correo electrónico para un dominio en particular.
Para que un dominio en particular o bien el propio dominio, sea excluido de este tipo de filtración, requiere contar con un registro similar al siguiente, lo cual establece que preferentemente se descartan como emisores de correo electrónico todos aquellos servidores que carezcan de registro tipo MX o tipo A:
dominio.com. IN TXT "v=spf1 a mx ~all"
O bien, si se quiere algo más estricto, donde se descartan por completo como emisores de correo electrónico todos aquellos servidores que carezcan de registro tipo MX o tipo A:
dominio.com. IN TXT "v=spf1 a mx -all"

Perl-Razor-Agent.

Perl-Razor-Agent es la implementación Perl de Razor, que es una red distribuida y colaborativa dedicada a la detección y filtración de spam. Consiste en un catalogo de propagación de spam que es actualizado constantemente. Se complementa de manera mutua con Pyzor.

Pyzor.

Pyzor es similar a Razor y funciona de la misma forma como una red distribuida y colaborativa dedicada a la detección y filtración de spam. A diferencia de Perl-Razor-Agent, está escrito en Python. Se complementa de manera mutua con Razor.

Spamassassin-FuzzyOcr.

Suele haber casos en los cuales se envían mensajes de spam que sólo incluyen una imagen incrustada en el mensaje, con el fin de evadir los filtros de los servidores de correo electrónico. FuzzyOcr es un complemento (plugin) para Spamassassin el cual está enfocado sobre este tipo de spam. Utiliza GOCR (GNU Optical Character Recognition o Reconocimiento Óptico de Caracteres de GNU) y otros métodos para analizar el contenido de las imágenes y poder distinguir entre correo ordinario y correo spam.

Poppler-utils.

Este conjunto de herramientas es utilizado por Spamassassin para gestionar los contenidos de los documentos en formato PDF, particularmente las herramientas como pdftops, pstopnm y pdfinfo. Es altamente recomendado instalarlo.
Se ha producido un error en este gadget.