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:
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:
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:
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:
Y enseguida se ejecuta el mandato 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.