18 octubre, 2024

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.

Deja un comentario

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