Guía Gentoo para el filtrado de correo
1.
Introducción
Esta guía describe paso a paso cómo instalar una pasarela para el
filtro de correo no deseado y virus. Es un alternativa simple de
adoptar para soluciones de un servidor.
Un vistazo general
Este documento describe como configurar una pasarela para el filtro de
correo no deseado con dominios múltiples. Este servidor está diseñado
para funcionar delante del servidor que realmente contiene las cuentas
de correo, como por ejemplo, Microsoft Exchange o Lotus Notes.
En esta configuración se han elegido aplicaciones con un buen registro
de seguridad y archivos de configuración fáciles de entender. El MTA
(siglas en inglés de Agente de Transferencia de Correo) es postfix que
tiene un buen registro de seguridad y es muy fácil de configurar
correctamente. Postfix normalmente oirá al puerto 25 por correo
entrante. Al momento de recibirlo lo enviará a Amavisd-new en el
puerto 10024. Esta aplicación filtrará el correo mediante distintas
reglas antes de reenviarlo a Postfix en el puerto 10025, que a su vez
enviará el correo al próximo servidor de correo.
Amavisd-new es una armazón para el filtrado de contenido utilizada
para ayudar a las aplicaciones a filtrar virus y correo no deseado. En
esta configuración utilizaremos dos aplicaciones auxiliares, ClamAV
para el filtro de correo con virus y Spamassassin para el filtrado de
correo no deseado. El mismo Spamassassin puede funcionar como otra
capa de infraestructura para el filtrado de contenido y utilizar
aplicaciones auxiliares como Vipul's Razor2 y DCC.
A diferencia de otras tecnologías contra el correo no deseado como
RBLs, Spamassassin no rechaza ni acepta un correo simplemente en base
a una sola prueba. Utiliza varias pruebas internas y aplicaciones
auxiliares externas para calcular el puntaje spam de cada correo que
revisa. Este puntaje se basa en los siguientes tests:
- Filtrado Bayesiano
- Reglas estáticas basadas en expresiones regulares
- Redes distribuidas y colaborativas:
La primera parte (capítulos 1 al 4) de la guía describe la
configuración básica de la pasarela de filtro de correo. Los
siguientes capítulos pueden ser implementados individualmente sin
dependencia entre ellos. Esos capítulos describen cómo:
-
configurar carpetas especiales IMAP (siglas en inglés de Protocolo
de Acceso Interactivo de Correo) para el aprendizaje del filtro
Bayesiano y para el envío de falsos positivos
-
configurar listas grises con Postfix 2.1
-
configurar amavisd-new para que utilice MySQL como motor para las
preferencias de los usuario
Nota:
Las carpetas IMAP utilizarán el formato maildir. Tener cada correo en
una carpeta separada hace su manejo mucho más simple. Si estás
utilizando mbox te propongo que le des una oportunidad a maildir. Si
no estás utilizando maildir actualmente, emerge las herramientas
necesarias conemerge courier-imap.
|
Una quinta parte planeada a futuro contendrá varios consejos sobre
desempeño y otras cosas que quizás te gustaría saber (correr en un
ambiente chroot, restricciónes del postfix,etc.).
Nota:
Delegar responsabilidades a terceros tiene sus riesgos. Tienes que
conocer y confiar en estas terceras partes. En esta configuración la
decisión de poner en cuarentena correos con virus se basa sólo en una
aplicación de terceros. Usando el sistema de calificación de
Spamassassin, la decisión de detener correos no es realizada por una
sola autoridad, excepto quizás por las reglas estáticas del Spamassassin.
|
Aviso:
Al rechazar correo no deseado en el nivel del MTA debes tener mucho
cuidado en elegir el RBL (siglas en inglés de Lista Negra en Tiempo
Real) que utilizarás, por ejemplo SpamCop es un mal RBL para ser
implementado en el nivel MTA, ya que causará que se den falsos
positivos porque algunas veces sus reglas son muy agresivas. Mayor
información en Las
Listas Negras en Tiempo Real son malas (en inglés) y El
problema Spam: Moviéndose más allá de los RBLs (en inglés).
|
Preparándonos
Antes de empezar, asegúrate que tienes una instalación de Postfix
funcionando donde puedas enviar y recibir correos, también necesitas
un servidor de correo. Si no tienes experiencia en configurar Postfix
podría resultar rápidamente muy complicado si se ve todo de golpe. Si
necesitas ayuda puedes encontrarla en la
excelente Guía de
Alojamiento de Correo Virtual con Postfix en la página de
Documentación Gentoo.
2.
Instalando los programas necesarios
Empezaremos por instalar los programas más importantes: Amavisd-new,
Spamassassin y ClamAV.
Listado de Código 2.1: Instalando Amavis, Spamassassin y Clamav |
# emerge amavisd-new spamassassin clamav
|
Nota:
Como se mencionó previamente tu ya debes tener una instalación de
postfix funcionando en la computadora. Básicamente eso no debe
ser más que emerge postfix y tener conocimientos básicos
del funcionamiento de Postfix.
|
Configurando el DNS
Nota:
Si no estás configurando un servidor pasarela sino que tienes las
carpetas de correo en el mismo servidor, entonces sólo necesitas crear
los registros MX.
|
Mientras los programas están siendo instalados, inicia otra consola y
crea los registros DNS necesarios.
Empieza creando un registro MX para la pasarela de correo y un
registro A para el próximo destino.
Listado de Código 2.2: Configurando el DNS |
MX 10 mailgateway.mydomain.tld.
mailgateway A mgw.ip.add.here
mail A ms.ip.add.here
|
Nota:
Algunos proveedores ADSL bloquean el puerto 25 y te obligan a pasar el
correo a través de alguno de sus servidores. Normalmente tienes que
crear un registro MX secundario como MX 20
backup-mx.some-isp.tld |
Abriendo el cortafuegos
Además de permitir el trafico normal de correo, tienes que permitir a
un par de servicios atravezar el cortafuegos para que la red pueda
comprobar la comunicación con los servidores.
| Aplicación |
Protocolo |
Puerto |
| DCC |
UDP |
6277 |
| Razor(ping de salida) |
TCP |
7 |
| Razor |
TCP |
2703 |
Razor utiliza pings para descubrir que servidores tiene más cerca.
Configurando Postfix
Primero debemos decirle a postfix que escuche al puerto 10025 y
así salvamos la mayoría de las restricciónes que pueden haber sido
aplicadas a la instancia de postfix que escucha al puerto
25. Además, nos aseguramos que sólo atienda conexiones locales en el
puerto 10025. Para lograr esto añadimos a
/etc/postfix/master.cf lo siguiente:
Listado de Código 2.3: Modificando el archivo master.cf |
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
|
Nota:
La linea smtp-amavis especifica que un máximo de dos procesos
pueden correr en cualquier momento. Si necesitas una concurrencia
mayor ajusta este número a tus necesidades. Recuerda que debe ser
igual al número de $max_servers= en amavisd.conf
Ten en cuenta que amavisd-new consume bastante memoria y por lo
tanto aumentar demasiado el número de procesos puede consumir toda la
memoria y provocar que se utilice memoria swap lo cual puede disminuir
notoriamente el desempeño de tu sistema.
|
Nota:
Si quieres rechazar el correo no deseado temprano en el proceso,
puedes usar el método Before-Queue (proxy) en vez del método de
filtro. Si descomentas las tres lineas tendrás que configurar
content_filter en main.cf. Este no es un método
recomendado en servidores con gran tráfico, ya que el número de
conexiones concurrentes está limitado por el número de instancias de
amavisd.
|
Aviso:
El método Before-Queue(proxy) no está todavía apropiadamente probado.
|
Nota:
Si, por alguna razón, quieres enviar correo desde esta computadora y
no quieres que sea escaneado, añade otra instancia de postfix
descomentando las dos últimas lineas y substituyendo con el IP
apropiado.
|
El archivo master.cf le indica al programa maestro de
postfix como correr cada uno de los procesos individuales
postfix. Mayor información con man 8 master.
Luego de esto, necesitamos que la instancia principal de
postfix escuche al puerto 25 para filtrar el correo a través de
amavisd-new que escucha por el puerto 10024.
También necesitamos configurar el siguiente destino del correo. Hay
que indicarle a Postfix que filtre el correo a través de un filtro de
contenido externo y habilitar explícitamente el direccionamiento para
que Postfix sepa a donde enviar el correo.
Listado de Código 2.4: Modificando /etc/postfix/main.cf |
biff = no
empty_address_recipient = MAILER-DAEMON
queue_minfree = 120000000
content_filter = smtp-amavis:[127.0.0.1]:10024
transport_maps = hash:/etc/postfix/transport
relay_domains = $transport_maps
|
Postfix tiene muchas opciones configuradas en
main.cf. Para mayor información acerca del archivo
consulta man 5 postconf o en linea Parámetros de
configuración de Postfix.
El formato de transport es el de un archivo hash de
Postfix normal. El correo al dominio en la izquierda es enviado al
destinatario en el lado derecho.
Listado de Código 2.5: /etc/postfix/transport |
mydomain.tld smtp:mail.mydomain.tld
|
Luego de haber editado este archivo, necesitamos ejecutar el comando
postmap. Postfix no puede leer este archivo así que debemos
convertirlo al formato adecuado con postmap
/etc/postfix/transport. Esto crea el archivo
/etc/postfix/transport.db. No hay necesidad de cargar de
nuevo Postfix, ya que lee los cambios de manera automática.
Nota:
Si el siguiente destino en el servidor de correo no escucha al puerto
SMTP estandar: 25, puedes indicarle a postfix que use un cierto número
de puert, como:
smtp:mail.mydomain.tld:25000.
|
Si tus primeros intentos de enviar un correo resultan en estos
rebotando, es probable que hayas cometido un error de configuración
en algún lugar. Trata activando de manera temporal
soft_bounce mientras que solucionas tus problemas de
configuración. Esto previene que postfix rebote los correos por
errores de entrega al tratarlos como errores temporales. Postfix
mantiene los mensajes en la cola de correo hasta que
soft_bounce sea desactivado o eliminado.
Listado de Código 2.6: Activando soft_bounce |
# postconf -e "soft_bounce = yes"
# /etc/init.d/postfix reload
|
Una vez que tengas tu configuración funcionando de manera adecuado,
asegúrate de desactivar o eliminarsoft_bounce y recargar
postfix.
Configurando Amavisd-new
Amavisd-new es utilizada para manejar todos los filtrados y te permite
utilizar distintas tecnologías juntas de manera sencilla. Al momento
de recibir la notificación de un correo, va a extraerlo, filtrarlo a
través de distintos filtros personalizables, manejar listas blancas y
negras, filtrar el correo a través de escáneres de virus y finalmente
entregarlo a Spamassassin.
EL mismo amavisd-new tiene varias características extras:
-
identifica archivos adjuntos peligrosos y tiene políticas para manejarlos
- políticas por usuario, por dominio y globales para:
- listas blancas
- listas negras
- umbrales para la calificación de spam
- políticas para el correo no deseados y los virus
Fuera de postfix y freshclam ejecutaremos todas las
demás aplicaciones como el usuario amavis.
Crea el nuevo directorio raíz y configura los permisos necesarios.
Listado de Código 2.7: Creando el nuevo directorio home y configurando los permisos |
# mkdir /var/amavis
# chown amavis:amavis /var/amavis
# chmod 750 /var/amavis
|
Edita las lineas siguientes en /etc/amavisd.conf
Listado de Código 2.8: Editando /etc/amavisd.conf |
$mydomain = 'example.com';
$inet_socket_bind = '127.0.0.1';
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
$virus_admin = "virusalert\@$mydomain";
$sa_tag_level_deflt = -100;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = $sa_tag2_level_deflt;
$sa_dsn_cutoff_level = 10;
$final_virus_destiny = D_DISCARD; # (defaults to D_DISCARD)
$final_banned_destiny = D_DISCARD; # (defaults to D_BOUNCE)
$final_spam_destiny = D_DISCARD; # (defaults to D_BOUNCE)
|
Nota:
Con esta linea configuras la calificación de correo no deseado de
Spamassasin a 5 $sa_tag2_level_deflt = 5;. Esto podría ser algo
bajo. Como te habrás dado cuenta, el valor por defecto de Amavisd-new
es 6.3.Si no quieres ver ningún correo no deseado en tus
carpetas de correo elige 5, pero si no quieres lidiar con
falsos positivos elige 6.3.
|
Crea un directorio para poner los correos con virus en cuarentena, ya
que no queremos que estos lleguen a los usuarios.
Listado de Código 2.9: Creando un directorio para cuarentena |
# mkdir /var/amavis/virusmails
# chown amavis:amavis /var/amavis/virusmails
# chmod 750 /var/amavis/virusmails
|
Nota:
Amavisd-new ofrece políticas de refinamiento más avanzadas utilizando
un banco de políticas.
|
Configurando ClamAV
Como escaner de virus utilizamos ClamAV, ya que tiene un ratio de
detección bastante bueno comparable con las opciones comerciales, es
además rápido y Open Source. Nosotros adoramos las bitacoras, así que
haz que clamd haga bitácoras utilizando syslog y
activando el modo detallado. También, no te olvides de no ejecutar
clamd como root. Ahora edita /etc/clamd.conf
Listado de Código 2.10: Editando /etc/clamd.conf |
LogSyslog
LogVerbose
LogFacility LOG_MAIL
PidFile /var/run/amavis/clamd.pid
LocalSocket /var/amavis/clamd
StreamMaxLength 10M
User amavis
ScanMail
ScanArchive
|
Nota:
No te olvides de quitar la directiva de ejemplo para que ClamAV funcione.
|
ClamAV viene con el demonio freshclam dedicado a revisar
periódicamente las actualizaciones en las firmas de virus. En ves de
actualizar las firmas de virus dos veces al día, haremos que
fresclam las actualice cada dos horas.
Listado de Código 2.11: Editando /etc/freshclam.conf |
LogSyslog
LogVerbose
DatabaseOwner clamav
Checks 12
DatabaseMirror db.XY.clamav.net
|
Arranca clamd con freshclam utilizando el guión de
inicio modificando /etc/conf.d/clamd
Listado de Código 2.12: Modificando /etc/conf.d/clamd |
START_CLAMD=yes
FRESHCLAM_OPTS="-d"
|
Al menos modifica amavisd.conf con la nueva ubicación del socket.
Listado de Código 2.13: Modificando /etc/amavisd.conf |
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/amavis/clamd"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
|
Aviso:
NO modifiques el $unix_socketname al menos que sepas lo que
estás haciendo. |
Configurando Vipul's Razor
Razor2 es una red colaborativa y distribuida para la suma de
verificación del correo no deseado. Instálalo con emerge razor
y crea los archivos de configuración necesarios. Haz esto al ejecutar
como el usuario amavis: su -amavis y razor-admin
-create
Listado de Código 2.14: Creando los archivos de configuración necesarios |
# emerge razor
# usermod -s /bin/bash amavis
# su - amavis
$ razor-admin -create
$ exit
# usermod -s /bin/false amavis
|
Configurando la distribución de sumas de control (dcc)
Al igual que Razor2, dcc es una red distribuida y colaborativa para la
suma de verificación del correo no deseado. Su filosofía se basa en
contar el número de destinatarios de un mail identificando cada correo
con una suma de verificación.
Listado de Código 2.15: Instalando DCC |
# emerge dcc
|
Configurando Spamassassin
Amavis utiliza directamente las librerías Perl de Spamassassin así que
no hay necesidad de iniciar el servicio. Pero esto también trae
confusión y a que algunas preferencias modificadas en
/etc/mail/spamassassin/local.cf son sobreescritas por
opciones en /etc/amavisd.conf.
Listado de Código 2.16: Creando /etc/mail/spamassassin/local.cf |
use_bayes 1
skip_rbl_checks 0
ok_languages da en no sv
ok_locales en
bayes_path /var/amavis/.spamassassin/bayes
|
Nota:
Con Spamassassin version 3.1 tienes que activar DCC, Razor2 removiendo
los comentarios de las líneas correspondientes en
v310.pre
|
Nota:
Puedes encontrar inspiración para tu archivo local.cf
probando
el Generador de
configuración de SpamAssassin.
|
Nota:
Quizás también quieres activar las opciones ok_languages y
ok_locales.
|
3.
Toda buena regla también tiene buenas excepciones
Una vez que el correo realmente empiece a pasar a través de esta
pasarela de correo quizás te des cuenta que la configuración actual no
es perfecta. Tal vez a algunos de tus clientes les gusta recibir
correos que otros no. Puedes crear listas blancas/listas negras para
los remitentes de los correos de una manera muy sencilla. Descomenta
la siguiente línea en amavisd.conf.
Listado de Código 3.1: Modificando amavisd.conf para que realice una calificación global |
read_hash("/var/amavis/sender_scores_sitewide"),
|
En el archivo sender_scores_sitewide colocas la dirección
de correo completa o sólo las partes del dominio junto con una
calificación positiva/negativa ha añadir a la calificación de correo no
deseado.
Listado de Código 3.2: ejemplo de una lista blanca |
postmaster@example.net -3.0
.example.net 1.0
|
Nota:
Revisa el archivo /etc/amavisd.conf para más ejemplos.
|
Nota:
Colocar estas direcciones fuera de amavisd.conf es una
solución más limpia y segura.
|
Nota:
Alternativamente, puedes hacer estas especificaciones en el archivo de
configuración /etc/mail/spamassassin/local.cf pero pienso
que es más claro si lo haces en /etc/amavisd.conf.
|
Nota:
En un capítulo más adelante mostraré como implementar políticas por
usuario utilizando MySQL.
|
Hasta implementar un mejor método, puedes añadir lo siguiente a
amavisd.conf para evitar la revisión de correo no deseado
para los buzones de postmaster y abuse
Listado de Código 3.3: Saltar los filtros de spam para todos los correos de postmaster y abuse |
map { $bypass_spam_checks{lc($_)}=1 } (qw(
postmaster@
abuse@
));
|
Importante:
Mientras estamos en esto nunca debemos descartar
automáticamente correos de las cuentas postmaster o
abuse. Mira en RFC 2142 NOMBRES DE BUZONES
PARA SERVICIOS COMUNES, ROLES Y FUNCIONES. De otra manera tus
dominios pueden quedar enlistados en algunas de las malévolas listas
de rfc-ignorant.org.
|
4.
Añadiendo más reglas
Si quieres utilizar más reglas proveidas por los Ninjas SARE en el
Emporio de Reglas de
SpamAssassin, puedes añadirlas y actualizarlas fácilmente
utilizando el mecanismo sa-update incluido en Spamassassin.
Listado de Código 4.1: Instalando rulesdujour |
# emerge "mail-filter/spamassassin-ruledujour"
|
Ahora edita el archivo /etc/rulesdujour/config y reinicia
Amavisd-new:
5.
Probando y últimos retoques
Probando la configuración
Antes de iniciar freshclam puedes verificar si funciona manualmente.
Listado de Código 5.1: Probando freshclam |
# freshclam
ClamAV update process started at Sun May 2 09:13:41 2004
Reading CVD header (main.cvd): OK
Downloading main.cvd [*]
main.cvd updated (version: 22, sigs: 20229, f-level: 1, builder: tkojm)
Reading CVD header (daily.cvd): OK
Downloading daily.cvd [*]
daily.cvd updated (version: 298, sigs: 1141, f-level: 2, builder: diego)
Database updated (21370 signatures) from database.clamav.net (193.1.219.100).
|
Ahora que has actualizado las definiciones de los virus, puedes estar
seguro que freshclam.conf funciona correctamente.
Prueba freshclam y amavisd desde los correos de prueba de cli y
amavisd. Inicia clamd y amavis con los siguientes
comandos:
Listado de Código 5.2: Iniciar amavisd y clamd y recargar la configuración de postfix |
# /etc/init.d/clamd start
# /etc/init.d/amavisd start
# /etc/init.d/postfix reload
|
Si todo a salido como debe postfix ahora estará escuchando por
correos en el puerto 24 y por correos reinyectados en el puerto
10024. Para verificar que es así, revisa la bitácora.
Listado de Código 5.3: Resvisando las bitácoras |
# tail -f /var/log/mail.log
|
Nota:
Dependiendo de la configuración de tus bitácoras, la ruta correcta
sería /var/log/messages.
|
Si ningún mensaje extraño aparece en la bitácora, es hora para una
nueva prueba.
Utiliza netcat para conectarte manualmente a amavisd en
el puerto 10024 y postfix en el puerto 10025.
Nota:
Netcat puede ser utilizado como un reemplazo avanzado de
telnet. Instalalo con
emerge netcat.
|
Nota:
Por alguna razón desconocida no se puede completar la inyección manual
de correo a amavisd con netcat. Utiliza telnet en
cambio.
|
Listado de Código 5.4: Comprobación manual de que amavisd y postfix están escuchando a los nuevos puertos |
# nc localhost 10024
220 [127.0.0.1] ESMTP amavisd-new service ready
nc localhost 10025
220 example.com ESMTP Postfix
|
Nota:
Si quieres ver la salida completa de amavisd-new, ejecuta amavisd
debug-sa como el usuario amavis y envía un correo. Para que
este método funcione tendrás que cambiar el shell por defecto
en /etc/passwd
|
Añade amavisd y clamd al nivel de ejecución default.
Listado de Código 5.5: Añadiendo amavisd y clamd al nivel de ejecución default |
# rc-update add clamd default
# rc-update add amavisd default
|
Nota:
No añadimos spamd al nivel de ejecución por defecto y que
amavisd utiliza las librerías Perl de Spamassassin
directamente.
|
Nota:
Quizás hallas notado las siguientes lineas en tu bitácora:
Net::Server: Couldn't POSIX::setuid to ... []. De acuerdo al
LEEME de
amavis chroot, si el proceso UID permanece en 0 (root),
el programa terminará, de otra forma considera el mensaje simplemente
informativo. Esto es porque POSIX::setuid() regresa la cadena
0 but true.
|
Importante:
Si activaste la posibilidad de iniciar sesión para amavis, no te
olvides de redefinir el intérprete de comandos en
/etc/passwd a /bin/false. |
6.
Autoaprendizaje y diferimiento de emails
Creando el usuario spamtrap
Crea la cuenta spamtrap y los directorios.
Listado de Código 6.1: Creando la cuenta spamtrap |
# useradd -m spamtrap
# maildirmake /home/spamtrap/.maildir
# chown -R spamtrap:mailusers
/home/spamtrap/.maildir
# passwd spamtrap
|
Si quieres revisar manualmente algunos de los correos para asegurarte
que no tengas falsos positivos puedes la siguiente receta
de procmail para desviar el correo no deseado encontrado hacia
distintas carpetas de correo.
Creando .procmailrc
Listado de Código 6.2: Creando /home/spamtrap/.procmailrc |
MAILDIR=$HOME/.maildir
SPAM_FOLDER=$MAILDIR/.spam-found/
LIKELY_SPAM_FOLDER=$MAILDIR/.likely-spam-found/
:0:
* ^X-Spam-Status: Yes
* ^X-Spam-Level: \*\*\*\*\*\*\*
$SPAM_FOLDER
:0:
* ^X-Spam-Status: Yes
$LIKELY_SPAM_FOLDER
:0
*
./
|
Aviso:
Si tu servidor de correo va a recibir una gran cantidad de correo NO
se recomienda el uso de la receta likely-spam. En cambio
configura $sa_tag2_level_deflt lo suficientemente alto como
para evitar falsos positivos y que los filtre directamente
a $SPAM_FOLDER.
|
Nota:
Si todavía no has instalado procmail, hazlo con emerge
procmail.
|
Ahora, hay que asegurar que Postfix utilice procmail para entregar el correo.
Listado de Código 6.3: Modificando /etc/postfix/main.cf |
mailbox_command = /usr/bin/procmail -a "DOMAIN"
|
Creando los buzones
Ahora crearemos los directorios compartidos por ham y spam.
Listado de Código 6.4: Creando los buzones necesarios |
# maildirmake /var/amavis/.maildir
# maildirmake -S /var/amavis/.maildir/Bayes
# maildirmake -s write -f spam /var/amavis/.maildir/Bayes
# maildirmake -s write -f ham /var/amavis/.maildir/Bayes
# maildirmake -s write -f redeliver /var/amavis/.maildir/Bayes
|
Amavisd-new necesita ser capaz de leer estos archivos de la misma
manera que todos los usuarios. Por lo tanto, necesitamos añadir todos
los usuarios relevantes al grupo mailuser junto con amavis.
Listado de Código 6.5: Configurando los permisos necesarios |
# groupadd mailusers
# usermod -G mailusers spamtrap
# chown -R amavis:mailusers /var/amavis/.maildir/
# chown amavis:mailusers /var/amavis/
# chmod -R 1733 /var/amavis/.maildir/Bayes/
# chmod g+rx /var/amavis/.maildir/
# chmod g+rx /var/amavis/.maildir/Bayes/
|
Aviso:
Esto garantiza que los miembros del grupo mailusers tengan
acceso al correo de amavis
|
Eso permite que los directorios spam y ham pueden ser leidos pero no
modificados. De esta manera los usuarios pueden enviar sus ham sin que
nadie más pueda leerlos.
Luego ejecuta el siguiente comando como el usuario spamtrap:
Listado de Código 6.6: Añadiendo los directorios compartidos a los buzones de los usuarios |
$ maildirmake --add Bayes=/var/amavis/.maildir/Bayes $HOME/.maildir
|
Nota:
Tenemos que darle al grupo los permisos de lectura en el
directorio Bayes de manera que el cliente de correo pueda
ver los subdirectorios utilizados por IMAP.
|
Añadiendo los trabajos calendarizados
Ahora ejecuta crontab -u amavis -e para editar el crontab de
manera que se active el aprendizaje automático del filtro Bayesiando
cada hora.
Listado de Código 6.7: amavis crontab |
0 * * * * /usr/bin/sa-learn --spam /var/amavis/.maildir/Bayes/.spam/{cur,new} \
> /dev/null 2>&1
0 * * * * /usr/bin/sa-learn --ham /var/amavis/.maildir/Bayes/.ham/{cur,new} > \
/dev/null 2>&1
|
Nota:
amavis necesita ser miembro del grupo cron para ejecutar
los trabajos.
|
Nota:
Parece que los buzones compartidos harán que sa-lern examine
todos los mensajes dos veces. Esto no debería ser un problema. La
salida también mostrará que el máximo de mensajes de los cuales se
aprende es la mitad o menos de los examinados.
|
Modificando amavisd.conf
Ahora, modifica amavis para que redireccione el correo no deseado a la
cuenta spamtrap y se quede con los encabezados.
Listado de Código 6.8: Modificando /etc/amavisd.conf |
$spam_quarantine_to = "spamtrap\@$myhostname";
|
Redistribuyendo falsos positivos
Si configuras la calificación de spam muy baja, como lo hacemos aca,
es probable que te encuentres con algunos falsos positivos. Esto serán
filtrados en el directorio likely-spam. Estos son
revisados manualmente y cualquier falso positivo es movido al
buzón redeliver. Desde ahí es primero redirigido a través
de sa-learn --ham y redistribuido con todas las cabeceras
intactas usando una versión parchada
de smtpclient de
Ralf S. Engelschall.
La versión 1.0.0 original de smtpclient está en portage, sin
embargo para mantener las cabeceras intactas utilizamos una versión
modificada. Aquí está como instalar la versión revisada:
Listado de Código 6.9: Installing revised smtpclient |
# wget http://home.coming.dk/files/smtpclient.tar.gz
# tar xzf smtpclient.tar.gz
# echo "mail-client/smtpclient ~x86" >> /etc/portage/package.keywords
# echo "mail-client/smtpclient fullheaders" >> /etc/portage/package.use
# emerge smtpclient
|
Revisa cada minuto la carpeta redeliver para comprobar
nuevos correos, utilizando cron.
Listado de Código 6.10: amavis crontab |
* * * * * find /var/amavis/.maildir/Bayes/.redeliver/cur/ -type f -name \
"[0-9]*" -exec cp {} /var/amavis/.maildir/Bayes/.ham/cur/ \; \
&& find /var/amavis/.maildir/Bayes/.redeliver/cur/ -type f \
-name "[0-9]*" -exec /usr/local/bin/redeliver.pl {} \;
|
Ahora, sólo necesitamos compiar el archivo redeliver.pl
a /usr/local/bon.Descárgalo o
utiliza la siguiente versión.
Listado de Código 6.11: redeliver.pl |
use strict;
if(!($#ARGV == 0)) {
die "Usage:\n$0 maildir_mail\n";
}
my $mail = $ARGV[0];
my $to = "";
my $from = "";
sub prunefile ( $ );
open (MAIL, $mail) or die "Could not open $mail: $?\n";
while(<MAIL>) {
if(($to eq "") || ($from eq "")) {
chop;
(my $key, my $value) = split (/:/);
if($key eq "X-Envelope-To") {
$to = $value;
$to =~ s/[\<\>,]//g; # Remove "<", ">" and ","
$to =~ s/^\s+|\s+$//g; #Remove whitespace before and after
}
if($key eq "X-Envelope-From") {
$from = $value;
$from =~ s/[\<\>,]//g;
$from =~ s/^\s+|\s+$//g;
if($from eq "") {
$from = "postmaster";
}
}
}
}
if($to eq "") {
prunefile($ARGV[0]); # Just nuke it if to is empty
} else {
my $redelivercmd = "cat $ARGV[0] | smtpclient -F -S 127.0.0.1 -P 10025 -f $from $to";
unless (system($redelivercmd) == 0 ) {
die "Unable to redeliver: $?";
}
prunefile($ARGV[0]); # Clean up
}
sub prunefile ( $ ) {
my ($file) = @_;
unless (unlink $file) {
die "Unable to remove mail: $?";
}
}
|
Limpiando
No queremos guardar el correo para siempre, así que
utilizaremos tmpwatch para limpiarlo regularmente. Instálalo
con emerge tmpwatch. Únicamente el root puede
ejecutar tmpwatch así que necesitamos editar el crontab de él.
Listado de Código 6.12: Modificando el crontab del root |
15 0 * * * /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/virusmails/
15 0 * * * /usr/sbin/tmpwatch -c -f -d --quiet 168 /var/amavis/.maildir/Bayes/
|
7.
Listas Grises
Introducción
Las listas grises son una de las nuevas armas en el arsenal de lucha
contra el correo no deseado. Como el nombre lo implica, son muy
parecidas a las listas blancas y a las listas negras. Cada vez que
un servidor de correo desconocido intenta enviar un correo, este es
rechazado con el mensaje try again later (intente de nuevo más
tarde). Esto implica que el correo es demorado, pero también que los
estúpidos spam bots que no implementan el protocolo RFC descartarán
el correo y no volverán a intentarlo jamás. Con el tiempo los spam
bots probablemente se adaptarán, sin embargo esto dará tiempo a
otras tecnologías para que identifiquen el correo no deseado.
Nota:
Si tu proveedor ISP bloquea todo el tráfico entrante por el puerto 25
y te envía todo el correo a través de su propio servidor de correo,
las listas grises no funcionarán.
|
Postfix 2.1 viene con un simple servidor de políticas de listas grises
en Perl que implementa el esquema. Sin embargo, cuando la partición
que alberga la base de datos de la lista gris se queda sin espacio,
los resultados son impredecibles. Hay una versión mejorada que no
sufre de este error. Primero te mostraré como instalar el soporte para
listas grises que viene incluido en Postfix y luego, pasaremos
implementar el reemplazo más robusto.
Nota:
Hay otros servidores de políticas de listas grises para Postfix
(como Gld, que está en
Portage,
y SQLgrey). Algunos
de ellos soportan motores de base de datos, listas blancas automáticas
y otras interesantes características.
|
Listas grises simples
Nota:
Si deseas en cambio utilizar el servidor mejorado de políticas de
listas grises con postgrey, puedes tranquilamente saltarte esta
sección.
|
Necesitamos el archivo greylist.pl pero
desafortunadamente el ebuild no lo instala por defecto.
Listado de Código 7.1: Consiguiendo el greylist.pl |
# cp /usr/portage/distfiles/postfix-your-version-here.tar.gz /root/
# tar xzf postfix-your-version-here.tar.gz
# cp postfix-2.1.0/examples/smtpd-policy/greylist.pl /usr/bin/
|
Ahora que tenemos el archivo en su lugar, necesitamos crear el
directorio que albergará la base de datos de la lista gris.
Listado de Código 7.2: Creando el directorio para la base de datos |
# mkdir /var/mta
# chown nobody /var/mta
|
Aviso:
No crees el directorio para la base de datos en una partición que
podría quedarse sin espacio. Mientras que postfix puede recuperarse de
situación donde no hay más espacio para la cola de correos y los
buzones, este no es el caso con la base de datos de la lista gris. Si
el archivo se corrompe, no serás capaz de recibir correo en lo
absoluto hasta que borres el archivo manualmente.
|
Configurando la lista gris
Ahora que tenemos eso listo, lo que nos falta hacer es modificar la
configuración de postfix. Primero, añadiremos la necesaria información
a master.cf
Listado de Código 7.3: Modificando master.cf para utilizar listas grises |
policy-greylist unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/bin/greylist.pl
|
El demonio spawn de postfix normalmente termina los procesos luego de
1000 segundos, pero este tiempo es muy corto para permitir el proceso
de las listas grises, así que debemos incrementar el límite de tiempo
en main.cf:
Listado de Código 7.4: Modificando el main.cf para utilizar listas gises |
policy-greylist_time_limit = 3600
check_sender_access hash:/etc/postfix/sender_access
restriction_classes = greylist
greylist = check_policy_service unix:private/policy-greylist
|
Aviso:
Asegúrate de especificar check_sender_access LUEGO
de reject_unauth_destination o tu sistema tendrá se convertirá
en un conmutador de correo abierto.
|
Nota:
La base de datos de la lista gris es rápidamente contaminada con
direcciones erradas. Ayuda que protejas la lista gris con otras
restricciones además de rechazar destinatarios y/o remitentes
desconocidos.
|
No vamos a utilizar las listas grises para todos los dominios, sólo
para aquellos abusados frecuentemente por los correos no
deseados. Después de todo, va a demorar la entrega del correo.Una
lista de dominios CORREO DE frecuentemente olvidados la puedes
encontrar en
línea. Añade los dominios desde los cuales recibes bastante
correo no deseado en /etc/postfix/sender_acces:
Listado de Código 7.5: Formato del sender_access |
aol.com greylist
hotmail.com greylist
bigfoot.com greylist
|
Si deseas una lista más extensa:
Listado de Código 7.6: Adding all domains to sender_access |
# wget http://www.monkeys.com/anti-spam/filtering/sender-domain-validate.in
# cat sender-domain-validate.in | sort | awk {'print $1 "\t\t greylist"'} > /etc/postfix/sender_access
|
Ahora sólo necesitamos inicializar la base de datos sender_access
database:
Listado de Código 7.7: Inicializando sender_access |
# postmap /etc/postfix/sender_access
|
La configuración de la lista gris simple está completa.
Aviso:
He probado esto en una máquina que manejaba miles de correos
diariamente y los resultados fueron casi un completo desastre. Luego
de cuatro días la máquina estaba saturada con viejos
procesos greylist.pl.
|
Configurando listas grises mejoradas con postgrey
Puedes instalar un servidor políticas de listas grises mejoradas con
un simple:
Listado de Código 7.8: Instalando postgrey |
# emerge postgrey
|
Luego de instalar postgrey tenemos que editar el
archivo main.cf. Los cambios son casi exactamente los
mismos que para la lista gris incluida.
Listado de Código 7.9: Modificando el main.cf para usar listas grises |
check_sender_access hash:/etc/postfix/sender_access
smtpd_restriction_classes = greylist
greylist = check_policy_service inet:127.0.0.1:10023
|
Nota:
El SMTPD_POLICY_README de Postfix utiliza
sólo restriction_clases pero parece no funcionar.
|
Nota:
Si deseas poner todo bajo la lista gris, añade en
cambio check_policy_service inet:127.0.0.1:10030.
|
Finalmente, inicia el servidor y añádelo al nivel de ejecución
apropiado.
Listado de Código 7.10: Iniciando postgrey |
# /etc/init.d/postgrey start
# rc-update add postgrey default
|
Nota:
Algunas personas prefieren recibir su correo rápido, así que utilizar
listas grises es inapropiado. Sin embargo, si utilizas un servidor de
correo de respaldo, puedes configurar las listas grises ahí. Mi
limitada experiencia me ha enseñado que puede detener hasta un tercio
de todo el correo no deseado recibido.
|
8.
SPF (Infraestructura de Políticas de envío, Sender Policy Framework)
Introducción
SPF permite a los dueños de los dominios especificar en sus registros
DNS qué direcciones IP podrán enviar correos desde su dominio. Esto
evitará que los spammers que se aprovechen del Return-Path.
Nota:
Si tu proveedor ISP bloquea todo el trafico por el puerto 25 y envía
todo el correo a través de su propio servidor, SPF no funcionará.
|
Primero los dueños de los dominios tienen que crear un registro
DNS TXT especial. Así, un MTA con soporte SPF puede leerlo y si
el correo entrante no proviene de un servidor especificado en el
registro SPF será rechazado. Una entrada de ejemplo es la siguiente:
Listado de Código 8.1: Registro SPF de ejemplo |
example.com. IN TXT "v=spf1 a mx ptr -all"
|
El -all indica que se rechace todo el correo por defecto pero
que se permita el ingreso de este si proviene de los registros
A(a), MX(mx)
y PTR(ptr). Para mayor información, consulta los
recursos listados abajo.
Nota:
Si envías tu correo saliente a través de tu ISP, entonces añade:
include:yourisp.com.
|
Spamassassin 3.0 tiene soporte para SPF, sin embargo este no viene
activado por defecto y el nuevo demonio de políticas de Postfix
soporta SPF, así que instalemos el soporte SPF de Postfix.
Nota:
Si en cambio deseas utilizar el SPF de Spamassassin simplemente
ejecuta emerge dev-perl/Mail-SPF-Query y reinicia
Amavisd-new
|
Preparando el sistema
Primero debes instalar Postfix 2.1 como se describe a
continuación. Luego de haber descargado las fuentes, agarra
el spf.pl con:
Listado de Código 8.2: Instalando spf.pl |
# cp postfix-<version>/examples/smtpd-policy/spf.pl /usr/local/bin/
|
Nota:
El spf.pl que viene incluido con Postfix tiene algunos
errores, así que busca y descomenta la siguiente linea: push
@HANDLERS, "sender_permitted_from"; use Mail::SPF::Query. Más
adelante, en la línea 199 sustituye comemnt
con comment. Alternativamente puedes descargarte
una versión en
desarrollo.
|
Este guión en Perl también necesita algunas librerías que no están en
Portage pero que son sencillas de instalar:
Listado de Código 8.3: Instalando las librerias faltantes |
# emerge Mail-SPF-Query Net-CIDR-Lite Sys-Hostname-Long
|
Ahora que tenemos todo en su lugar, sólo necesitamos configurar
Postfix para que utilice esta nueva política.
Listado de Código 8.4: Modificando master.cf para que utilice SPF |
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/perl /usr/local/bin/spf.pl
|
Ahora añade la verificación SPF en main.cf. Un SPF
correctamente configurado no debería hacer ningún daño de manera que
podamos revisar SPF para todos los dominios
Listado de Código 8.5: Modificando main.cf para que utilice SPF |
check_policy_service unix:private/policy-spf
|
Nota:
Si tienes problemas utilizando SPF, por ejemplo al
utilizar fetchmail, quizás prefieras habilitar el SPF sólo para
algunos dominios.
|
9.
Configurando amavisd-new para que utilice MySQL
Configurando MySQL
Nota:
Esto no ha sido probado todavía en versiones mayores que la
2.2. Cualquier comentario o sugerencia es bienvenido :).
|
Para dominios grandes, los valores por defecto que has definido
en amavisd.conf quizás no se adecuen a todos los
usuarios. Si configuras amavisd-new con soporte para MySQL puedes
tener configuraciones individuales por usuarios o por grupos.
Listado de Código 9.1: Creando la base de datos y usuarios MySQL |
# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database maildb;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON maildb.* TO 'mail'@'localhost' IDENTIFIED BY 'very_secret_password';
mysql> use maildb;
|
Ahora que la base de datos está creada, necesitamos crear las
tablas. Puedes copiar y pegar lo siguiente al prompt de mysql:
Listado de Código 9.2: Diseño de tablas MySQL |
CREATE TABLE users (
id int unsigned NOT NULL auto_increment,
priority int NOT NULL DEFAULT '7', -- 0 is low priority
policy_id int unsigned NOT NULL DEFAULT '1',
email varchar(255) NOT NULL,
fullname varchar(255) DEFAULT NULL, -- not used by amavisd-new
local char(1), -- Y/N (optional field, see note further down)
PRIMARY KEY (id),
KEY email (email)
);
CREATE UNIQUE INDEX users_idx_email ON users(email);
CREATE TABLE mailaddr (
id int unsigned NOT NULL auto_increment,
priority int NOT NULL DEFAULT '7', -- 0 is low priority
email varchar(255) NOT NULL,
PRIMARY KEY (id),
KEY email (email)
);
CREATE UNIQUE INDEX mailaddr_idx_email ON mailaddr(email);
(white or blacklisted sender)
CREATE TABLE wblist (
rid int unsigned NOT NULL, -- recipient: users.id
sid int unsigned NOT NULL, -- sender: mailaddr.id
wb char(1) NOT NULL, -- W or Y / B or N / space=neutral
PRIMARY KEY (rid,sid)
);
CREATE TABLE policy (
id int unsigned NOT NULL auto_increment,
policy_name varchar(32), -- not used by amavisd-new
virus_lover char(1), -- Y/N
spam_lover char(1), -- Y/N (optional field)
banned_files_lover char(1), -- Y/N (optional field)
bad_header_lover char(1), -- Y/N (optional field)
bypass_virus_checks char(1), -- Y/N
bypass_spam_checks char(1), -- Y/N
bypass_banned_checks char(1), -- Y/N (optional field)
bypass_header_checks char(1), -- Y/N (optional field)
spam_modifies_subj char(1), -- Y/N (optional field)
spam_quarantine_to varchar(64) DEFAULT NULL, -- (optional field)
spam_tag_level float, -- higher score inserts spam info headers
spam_tag2_level float DEFAULT NULL, -- higher score inserts
-- 'declared spam' info header fields
spam_kill_level float, -- higher score activates evasive actions, e.g.
-- reject/drop, quarantine, ...
-- (subject to final_spam_destiny setting)
PRIMARY KEY (id)
);
|
Nota:
Si tienes inconvenientes utilizando copiar/pegar, quizás tengas que
copiar esto en otro lugar y quitarle los caracteres innecesarios.
|
Nota:
Las búsquedas de correo se hacen con las direcciones puras
(rfc2821-sin comillas y sin llaves) como claves, por ejemplo: John
"Funny" Smith@ejemplo.com.
|
Nota:
Las búsquedas son realizadas en el siguiente orden: SQL, LDAP,
hash, ACL, regexp, constant. El primero
que devuelva una respuesta definitiva (not undef/NULL) detiene
la búsqueda.
|
Si deseas usar listas blancas y listas negras, entonces debes añadir
el remitente y el destinatario a mailadr luego de lo cual
defines la relación entre ambas direcciones de correo en wblist
e indicas si es lista blanca o lista negra.
Ahora que hemos creado las tablas, insertemos un usuario de prueba y
una política de ejemplo:
Listado de Código 9.3: Creando un usuario y política de prueba |
INSERT INTO users
SET
id =1,
priority =9,
policy_id =1,
email ="johndoe@example.com",
fullname ="John Doe",
local ="Y";
INSERT INTO policy
SET
id =1,
policy_name ="Test policy 1",
virus_lover ="N",
spam_lover ="N",
banned_files_lover ="N",
bad_header_lover ="N",
bypass_virus_checks ="N",
bypass_spam_checks ="N",
bypass_banned_checks ="N",
bypass_header_checks ="N",
spam_modifies_subj ="N",
spam_quarantine_to =NULL,
spam_tag_level =-50.0,
spam_tag2_level =7.0,
spam_kill_level =10.0;
|
Nota:
Copia esto en algún lugar y ajústalo a tus necesidades.
|
Nota:
local debe estar definido en Y, de otra manera el correo
no será revisado en busca de spam.
|
Esto inserta un usuario y políticas de prueba. Ajusta estos ejemplos
para que se ajusten a tus necesidades. Mayor información sobre los
items de configuración puede ser encontrada
en amavisd.conf.
Configurando amavisd para funcione con MySQL
Ahora que MySQL está listo necesitamos indicarle a amavis que lo
utilice:
Listado de Código 9.4: Modificando amavisd.conf |
@lookup_sql_dsn =
( ['DBI:mysql:maildb:host1', 'mail', 'very_secret_password'] );
$sql_select_policy = 'SELECT *,users.id FROM users,policy'.
' WHERE (users.policy_id=policy.id) AND (users.email IN (%k))'.
' ORDER BY users.priority DESC';
$sql_select_white_black_list = 'SELECT wb FROM wblist,mailaddr'.
' WHERE (wblist.rid=?) AND (wblist.sid=mailaddr.id)'.
' AND (mailaddr.email IN (%k))'.
' ORDER BY mailaddr.priority DESC';
|
10.
Configurando Spamassassin para que utilice MySQL
En Spamassassin 3.0 es posible almacenar la información de Bayes y AWL
en una base de datos MySQL. Utilizaremos MySQL ya que generalmente
puede desempeñarse mejor que otros sistemas de gestión de base de
datos. Además, utilizar MySQL para ambos conjuntos de datos facilita
bastante la administración. Aquí mostraremos como hacerlo.
Primero empieza creando el nuevo usuario y las tablas necesarias de
MySQL.
Listado de Código 10.1: Creando la nueva base de datos y usuario MySQL |
# mysql -u root -p mysql
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 78 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database dbname;
mysql> GRANT INSERT,UPDATE,DELETE,SELECT ON dbname.* TO 'dbuser'@'localhost' IDENTIFIED BY 'another_very_secret_password';
mysql> use dbname;
|
Ahora que la base de datos ha sido creada, seguiremos con las tablas
necesarias. Puedes copiar y pegar lo siguiente al monitor de mysql.
Listado de Código 10.2: Distribución de tablas MySQL |
CREATE TABLE bayes_expire (
id int(11) NOT NULL default '0',
runtime int(11) NOT NULL default '0',
KEY bayes_expire_idx1 (id)
) TYPE=MyISAM;
CREATE TABLE bayes_global_vars (
variable varchar(30) NOT NULL default '',
value varchar(200) NOT NULL default '',
PRIMARY KEY (variable)
) TYPE=MyISAM;
INSERT INTO bayes_global_vars VALUES ('VERSION','3');
CREATE TABLE bayes_seen (
id int(11) NOT NULL default '0',
msgid varchar(200) binary NOT NULL default '',
flag char(1) NOT NULL default '',
PRIMARY KEY (id,msgid)
) TYPE=MyISAM;
CREATE TABLE bayes_token (
id int(11) NOT NULL default '0',
token char(5) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
atime int(11) NOT NULL default '0',
PRIMARY KEY (id, token)
INDEX (id,atime)
) TYPE=MyISAM;
CREATE TABLE bayes_vars (
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(200) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
token_count int(11) NOT NULL default '0',
last_expire int(11) NOT NULL default '0',
last_atime_delta int(11) NOT NULL default '0',
last_expire_reduce int(11) NOT NULL default '0',
oldest_token_age int(11) NOT NULL default '2147483647',
newest_token_age int(11) NOT NULL default '0',
PRIMARY KEY (id),
UNIQUE bayes_vars_idx1 (username)
) TYPE=MyISAM;
CREATE TABLE awl (
username varchar(100) NOT NULL default '',
email varchar(200) NOT NULL default '',
ip varchar(10) NOT NULL default '',
count int(11) default '0',
totscore float default '0',
PRIMARY KEY (username,email,ip)
) TYPE=MyISAM;
|
Importante:
La línea INSERT es necesaria para que Spamassassin funcione.
|
Nota:
Esto también está disponible en el tarball de código fuente en los
archivos awl_mysql.sql y bayes_mysql.sql.
|
Configurando Spamassassin para que utilice el motor MySQL
Si tienes una vieja base de datos de Bayes en el formato DBM y quieres
conservarla sigue las siguientes instrucciones:
Listado de Código 10.3: Transformando información de Bayes desde una base de datos DBM |
su - amavis
sa-learn --sync
sa-learn --backup > backup.txt
sa-learn --restore backup.txt
|
Nota:
Nótese que el último paso debe ser ejecutado sólo luego de que la base
de datos MySQL y secrets.cf hayan sido actualizados.
|
Ahora hay que darle a Spamassassin la información necesaria:
Listado de Código 10.4: Modificando /etc/mail/spamassassin/secrets.cf |
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:sa_bayes:localhost:3306
bayes_sql_username db_name
bayes_sql_password another_very_secret_password
auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
user_awl_dsn DBI:mysql:sa_bayes:localhost:3306
user_awl_sql_username db_name
user_awl_sql_password another_very_secret_password
|
Seguidamente, cambia los permisos para tener una adecuada seguridad:
Listado de Código 10.5: Cambiando permisos |
# chmod 400 /etc/mail/spamassassin/secrets.cf
|
Nota:
Para crear un password realmente secreto utiliza emerge
app-admin/makepasswd y makepasswd -chars=8.
|
Ahora, todo lo que tienes que hace es /etc/init.d/amavisd restart.
11.
Solucionando problemas
Amavisd-new
Para solucionar cualquier problema con Amavisd-new empieza
deteniendolo con /etc/init.d/amavisd stop e iniciándolo
manualmente como proceso activo con amavisd debug y observa
cualquier anomalía en la salida.
Spamassassin
Para solucionar problemas en Spamassassin puedes filtran un correo
utilizando spamassassin -D < mail. Para asegurarte que las
cabeceras están intactas puedes moverlas desde otra máquina con IMAP.
Nota:
Si necesitas solucionar algún problema tienes que activar el login del
usuario amavis cambiando el shell en /etc/passwd
a /bin/bash.
|
Si deseas, puedes obtener la misma y más información con Amavisd-new
utilizando amavisd debug-sa.
Consiguiendo ayude
Si necesitas ayuda, un buen lugar al cual acudir es la lista de correo
de amavis-user. Antes de colocar alguna pregunta revisa
el archivo de
la lista de correo de usuarios Amavis. Si no encuentras ninguna
ayuda ahí puedes suscribirte a
la Lista
de correo de usuarios Amavis.
Si tu pregunta es específica de SpamAssassin, DCC, Razo o Postfix,
dirígete a sus respectivas páginas listadas a continuación.
12.
Fuentes
Para mayor información
Fuentes en general
Otros como
El contenido de este documento está registrado bajo los términos de
la licencia
Creative Commons - Reconocimiento / Compartir Igual
|