Configuración de spamass-milter.

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

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Requisitos previos.

Se requiere un servidor de correo electrónico con Sendmail, previamente configurado y totalmente funcional. Para más detalles al respecto, consultar el documento titulado «Configuración básica de Sendmail». Se requiere además leer y estudiar previamente la información del documento titulado «Instalación y configuración de Spamassassin».

Acerca de spamass-milter.

Spamass-milter es un complemento (plug-in) para la biblioteca de filtros de correo (libmilter) de Sendmail. Se encarga de hacer pasar todo el correo entrante —incluyendo todo lo que se reciba a través de rmail/UUCP— a través de SpamAssassin, que a su vez es un poderoso y robusto componente de filtrado de correo.

Representa una excelente alternativa pues consume una relativamente baja cantidad de recursos de sistema.

URL: http://savannah.nongnu.org/projects/spamass-milt/

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 puedan ser filtrados por el cliente de correo electrónico o MUA (Mail User Agent).

URL: http://spamassassin.apache.org/

Equipamiento lógico necesario.

Instalación a través de yum.

Si utiliza CentOS o Red Hat™ Enterprise Linux, puede utilizar 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/:

wget -N http://www.alcancelibre.org/al/server/AL-Server.repo \
    -O /etc/yum.repos.d/AL-Server.repo

Ejecute lo siguiente para instalar todo lo necesario:

yum -y install spamass-milter perl-Mail-SPF perl-Razor-Agent \
    pyzor spamassassin-iXhash2

Procedimientos.

SELinux y el servicio spamass-milter.

Ejecute lo siguiente para que SELinux permita al servicio spamassassin conectarse a servicios externos como Razor o Pyzor:

setsebool -P spamassassin_can_network 1

Ejecute lo siguiente para que SELinux permita a los usuarios regulares utilizar spamassassin desde sus directorios de inicio:

setsebool -P spamd_enable_home_dirs 1

Ajustes adicionales.

SELinux impedirán que el servicio spamass-milter pueda siquiera iniciar. Realice el siguiente procedimiento para instalar las políticas de SELinux necesarias.

Genere un nuevo directorio denominado /usr/share/selinux/packages/spamassmilter:

mkdir /usr/share/selinux/packages/spamassmilter

Cambie al directorio /usr/share/selinux/packages/spamassmilter:

cd /usr/share/selinux/packages/spamassmilter

Si utiliza CentOS 5 o Red Hat™ Enterprise Linux 5, descargue el archivo http://www.alcancelibre.org/linux/secrets/el5/spamassmilter.te:

wget http://www.alcancelibre.org/linux/secrets/el5/spamassmilter.te

Edite el archivo recién descargado:

vi spamassmilter.te

Verifique que éste contenga lo siguiente:


module spamassmilter 1.0;

require {
        type spamass_milter_data_t;
        type spamass_milter_t;
        type pyzor_t;
        type initrc_var_run_t;
        type spamd_t;
        class dir { search read create write getattr remove_name add_name };
        class file { read create ioctl write getattr unlink append };
}

#============= pyzor_t ==============
allow pyzor_t spamass_milter_data_t:dir { write search create getattr add_name };
allow pyzor_t spamass_milter_data_t:file { read write create getattr };

#============= spamass_milter_t ==============
allow spamass_milter_t initrc_var_run_t:file { write getattr };

#============= spamd_t ==============
allow spamd_t spamass_milter_data_t:dir { write search read remove_name create getattr add_name };
allow spamd_t spamass_milter_data_t:file { write getattr read create unlink ioctl append };

Lo anterior fue obtenido tras ejecutar cat /var/log/audit/audit.log|grep audit|audit2allow -m spamassmilter>spamassmilter.te en un sistema CentOS 5 donde SELinux impedía a spamass-milter funcionar correctamente.

Si utiliza CentOS 6 o Red Hat™ Enterprise Linux 6, descargue el archivo http://www.alcancelibre.org/linux/secrets/el6/spamassmilter.te:

wget http://www.alcancelibre.org/linux/secrets/el6/spamassmilter.te

Edite el archivo recién descargado:

vi spamassmilter.te

Verifique que éste contenga lo siguiente:


module spamassmilter 1.0;

require {
        type spamass_milter_data_t;
        type spamass_milter_t;
        type pyzor_t;
        type initrc_var_run_t;
        type spamc_t;
        type spamd_t;
        class dir { search read create write open getattr remove_name add_name };
        class file { read create ioctl write open getattr unlink append };
}

#============= pyzor_t ==============
allow pyzor_t spamass_milter_data_t:dir { write search create getattr add_name };
allow pyzor_t spamass_milter_data_t:file { read write create getattr };

#============= spamass_milter_t ==============
allow spamass_milter_t initrc_var_run_t:file { write getattr };

#============= spamd_t ==============
allow spamd_t spamass_milter_data_t:dir { write open search read remove_name create getattr add_name };
allow spamd_t spamass_milter_data_t:file { write open getattr read create unlink ioctl append };

#============= spamc_t ==============
allow spamc_t spamass_milter_data_t:file open;

Lo anterior fue obtenido tras ejecutar cat /var/log/audit/audit.log|grep audit|audit2allow -m spamassmilter>spamassmilter.te en un sistema CentOS 6 donde SELinux impedía a spamass-milter funcionar correctamente.

Genere el archivo de módulo para SELinux (spamassmilter.mod) ejecutando checkmodule de la siguiente forma:

checkmodule -M -m -o spamassmilter.mod spamassmilter.te

Empaquete el archivo spamassmilter.mod como el archivo spamassmilter.pp:

semodule_package -o spamassmilter.pp -m spamassmilter.mod

Vincule el archivo spamassmilter.pp a las políticas actuales de SELinux y cargue la nueva política al núcleo en ejecución:

semodule -i /usr/share/selinux/packages/spamassmilter/spamassmilter.pp

Archivo /etc/mail/sendmail.mc.

Edite el archivo /etc/mail/sendmail.mc:

vi /etc/mail/sendmail.mc

Añada lo siguiente justo arriba de MAILER(smtp)dnl.

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z')dnl
define(`confINPUT_MAIL_FILTERS', `spamassassin')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con ClamAV Milter:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z')dnl
define(`confINPUT_MAIL_FILTERS', `spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con ClamAV Milter y Milter Greylist:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`greylist', `S=local:/var/run/milter-greylist/milter-greylist.sock')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z, {greylist}')dnl
define(`confMILTER_MACROS_CONNECT', `{_}, {j}, {if_addr}, {daemon_port}')dnl
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
define(`confMILTER_MACROS_ENVFROM', `{i}, {auth_authen}')dnl
define(`confINPUT_MAIL_FILTERS', `greylist,spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con ClamAV Milter, Milter Greylist y DKIM Milter:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`dkim-milter', `S=local:/var/run/dkim-milter/dkim-milter.sock')dnl
INPUT_MAIL_FILTER(`greylist', `S=local:/var/run/milter-greylist/milter-greylist.sock')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z, {greylist}')dnl
define(`confMILTER_MACROS_CONNECT', `{_}, {j}, {if_addr}, {daemon_port}')dnl
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
define(`confMILTER_MACROS_ENVFROM', `{i}, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, {mail_addr}')dnl
define(`confINPUT_MAIL_FILTERS', `dkim-milter,greylist,spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Archivo /etc/sysconfig/spamass-milter.

Edite el archivo /etc/sysconfig/spamass-milter:

vi /etc/sysconfig/spamass-milter

Encontrará el siguiente contenido:

### Override for your different local config
#SOCKET=/var/run/spamass-milter/spamass-milter.sock

### Standard parameters for spamass-milter are:
### -P /var/run/spamass-milter.pid (PID file)
###
### Note that the -f parameter for running the milter in the background
### is not required because the milter runs in a wrapper script that
### backgrounds itself
###
### You may add another parameters here, see spamass-milter(1)
#EXTRA_FLAGS="-m -r 15"

De forma predeterminada, a través del parámetro -m, spamass-milter desactiva la modificación del asunto del mensaje (Subject:) y la cabecera Content-Type:, lo cual es conveniente para añadir cabeceras y se procesado posteriormente, y, a través del parámetro -r 15, rechaza los mensajes de correo electrónico cuando éstos tienen asignados 15 puntos o más. Se pueden modificar el número de puntos mínimos para rechazar directamente el correo electrónico sospechoso de ser Spam incrementando el valor para el parámetro -r. La recomendación es asignar un valor mayor al definido en el archivo /etc/mail/spamassassin/local.cf. Si, por ejemplo, se establece en éste último required_hits 4.5 y rewrite_header Subject {Spam?} y en el archivo /etc/sysconfig/spamass-milter se establece EXTRA_FLAGS="-m -r 10", ocurrirá lo siguiente:

  1. Todos los mensajes marcados con 4.4 puntos o menos, se entregarán inmediatamente al usuario sin modificaciones visibles.
  2. Todos los mensajes marcados desde 4.5 hasta 9.9 puntos se entregarán al usuario con el asunto modificado añadiendo a éste {Spam?} al inicio.
  3. Todos los mensajes que estén marcados con 10.0 puntos o más serán rechazados automáticamente.

El contenido del archivo /etc/sysconfig/spamass-milter quedaría del siguiente modo si se aplica en escenario descrito arriba:

### Override for your different local config
#SOCKET=/var/run/spamass-milter/spamass-milter.sock

### Standard parameters for spamass-milter are:
### -P /var/run/spamass-milter.pid (PID file)
###
### Note that the -f parameter for running the milter in the background
### is not required because the milter runs in a wrapper script that
### backgrounds itself
###
### You may add another parameters here, see spamass-milter(1)
EXTRA_FLAGS="-m -r 10"

Configuración de SpamAssassin.

A fin de que spamass-milter y spamassassin trabajen juntos, es necesario exista el directorio de configuración para el usuario sa-milt que se utilizará para iniciar spamd, el cual corresponde al servicio spamassassin. Por lo general, este directorio se crea automáticamente al instalar el paquete spamassassin.

Este directorio debe pertenecer al usuario sa-milt y grupo sa-milt.

chown -R sa-milt:sa-milt /var/lib/spamassassin

Edite el archivo /etc/sysconfig/spamassassin:

vi /etc/sysconfig/spamassassin

Añada las opciones -u sa-milt -x --virtual-config-dir=/var/lib/spamassassin, las cuales especifican que se iniciará como el usuario sa-milt, que se desactivará la configuración por usuario y que se utilizará /var/lib/spamassassin como directorio virtual de configuración. De tal modo, el archivo debe quedar de la siguiente forma:

# Options to spamd
SPAMDOPTIONS="-d -c -m5 -H -u sa-milt -x --virtual-config-dir=/var/lib/spamassassin"

Iniciar, detener y reiniciar el servicio spamass-milter.

Agregue al arranque del sistema e inicie el servicio spamassasin del siguiente modo:

chkconfig spamassassin on
service spamassassin start

Agregue al arranque del sistema e inicie el servicio spamass-milter:

chkconfig spamass-milter on
service spamass-milter start

Reinicie el servicio sendmail para que surtan efectos los cambios.

service sendmail restart

Actualice el juego de reglas y filtros de SpamAssassin una o dos veces al mes. Éstos 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. Ejecute lo siguiente para consultar si hay actualizaciones, descargar lo necesario y reiniciar el servicio sólo si hubo una actualización:

sa-update && service spamassassin restart