Postfix y Postgrey: Un acercamiento a la lucha proactiva contra el spam

2006-12-21 por Angel Abad, etiquetado como debian, mail, servidor

Artículo traducido de: Postfix and Postgrey: A proactive approach to spam filtering

El greylisting es otra forma más de prevenir que su buzón se llene de spam. Un software de lucha contra spam famoso es spamassassin, el cual filtra emails. El greylisting no remplazará este tipo de software pero puede actuar como una barrera proactiva que reducirá la cantidad de spam en su servidor de correo.

1. Introducción

El greylisting es una gran solución contra el spam, la idea basica es que los servidores de correo de los spammers no respetan las especificaciones estandar RFC, que básicamente dice que cuando un email no puede ser entregado, el servidor de correo debería intentarlo de nuevo más tarde. Al enviar gran cantidad de emails, los spammers no pueden permitirse desperdiciar recursos reenviando email cuando no pueden ser entregados, así, que si el email no es entregado a la primera, no volverá a ser reenviado.

Basandose en esta idea, el greylisting simplemente rechaza cualquier email de dominios que no sean de confianza devolviendo un código de respuesta 450, lo que significa "No puedo atender tu petición ahora, por favor intentalo más tarde". Como los servidores de spam no suelen cumplir con el RFC, no volverán a intentar reenviar el email, así que usted no recibirá el spam.

2. Postgrey

2.1 Introducción

Postgrey es un servidor de politicas postfix que implementa el greylisting. Es realmente fácil integrarlo en postfix y muy efectivo.

La función de postgrey es guardar un registro del trío: IP_CLIENTE / REMITENTE / RECIPIENTE. Si es la primera vez que el trío es visto, o ha sido visto la primera vez hace menos de 5 minutos, el trío es marcado como greylisted, y el email sera rechazado con un error temporal. Si lo mismo es visto después de 5 minutos y antes de 35 dias, el email será aceptado.

Nota: Notese que los 5 minutos y los 35 dias son valores por defecto. Mas adelante, explicaré como cambiarlos.

2.2 Instalación

Postgrey se encuentra empaquetado para Debian/Ubuntu, es facilísimo de instalar. Simplemente debe ejecutar:

$sudo apt-get install postgrey

También en Debian, postgrey funciona por defecto. Por defecto escucha en la interfaz loopback (127.0.0.1) en el puerto 60000. Así que, el servicio postgrey no será accesible desde fuera.

Ahora debemos decir a postfix que utilice el servidor de políticas postgrey.

3. Configurando Postfix

Como he comentado antes, es realmente fácil integrar postgrey en postfix (aunque necesitará al menos postfix 2.1). Todos los cambios se harán en /etc/postfix/main.cf. Así que abra /etc/postfix/main.cf y asegurese de añadir check_policy_service inet:127.0.0.1:60000 al final de smtpd_recipient_restrictions, obtendrá algo similar a lo siguiente:

smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:60000

Nótese que su configuración puede ser algo diferente

Vuelva a cargar la configuración de postfix:

<
$sudo /etc/init.d/postfix reload

Ahora la política de greylisting y el servidor de correo postfix empezarán a rechazar temporalmente los emails entrantes y empezará a ver los siguiente:

Nov 23 21:42:10 mymailserver postfix/smtpd[4256]: NOQUEUE: reject:
RCPT from spammerrelay.com[xxx.xxx.xxx.xxx]: 450 : Recipient address rejected: Greylisted for 300 seconds (see
http://isg.ee.ethz.ch/tools/postgrey/help/spammed.com.html); from= to=
proto=ESMTP helo=

A partir de ahora la cantidad de spam que llegará a su buzón será drásticamente reducida.

Es el momento de ver postgrey más en profundidad, para aquellos que les apetezca enredar un poco.

4. Enredando con Postgrey

4.1. Ficheros de configuración de Postgrey

Hay dos ficheros de configuración principales en /etc/postgrey: whitelist_clients y whitelist_recipients.

En whitelist_clients, usted puede definir una lista de servidores de correo que no quiere que sean tratados con greylist. Puede ser porque sean hosts de confianza, o por algún tema en concreto con el greylist.

Las direcciones de los clientes se pueden escribir de las siguientes maneras:

  • domain.addr: el dominio completo
  • WWW.XXX.YYY.ZZZ: una dirección IP
  • /regex/: una expresión regular

En whitelist_recipients, puede especificar la lista de destinatarios a los que no quiere aplicar el greylisting.

Los remitentes se pueden especificar de las siguientes formas:

  • domain.addr: el dominio completo
  • name@: siempre que "name" sea utilizado por un dominio, también incluye las direcciones extendidas como name+foo@.*
  • name@domain: correos para name@domain así como las direcciones extendidas
  • /regex/: una expresión regular

4.2. Opciones del demonio Postgrey

Antes comenté que postgrey hace greylist para los correos 5 minutos si es la primera vez que ve el trío ip_cliente/remitente/destinatario o si la última vez que vio el trío ha sido visto hace más de 35 días.

Bien, estas opciones pueden ser ajustadas cuando arranca el demonio postgrey. En un sistema tipo Debian, estas opciones se encuentran en /etc/default/postgrey.

Por defecto este fichero contiene:

POSTGREY_OPTS="--inet=127.0.0.1:60000"

Ahora imagine que quiere hacer greylist para los correos durante 2 minutos, y dejar que un trio pase si ha sido marcado por el greylist antes de 20 días, deberá utilizar la siguiente configuración:

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20"

Además de esto, postgrey tiene una buena característica, y es la habilidad de hacer whitelist a los trios que hayan enviado correos satisfactoriamente que 5 veces (valor por defecto) y si ha sido visto antes de --max_age.

Este valor se puede cambiar con --auto-whitelist-clients. Ajustandolo a 0 se deshabilita esta caraterística. Si quiere modificar este valor, al igual que más arriba, modifique /etc/default/postgrey y establezca --auto-whitelist-clients en base a sus necesidades, por ejemplo:

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20
--auto-whitelist-clients=10"

5. Informe de Postgrey

Postgrey es distribuido con la herramienta postgreyreport. Usando postgreyreport puede ver los tríos que no han pasado el greylist (significa la diferencia entre la primera y la ultima vez es menor que --delay=N sería spam). Para obtener un informe, puede utilizar la siguiente linea de comandos:

#cat /var/log/mail.log | postgreyreport --nosingle_line --check_sender=mx,a --show_tries --separate_by_subnet=":===============================================================================================n"

Obtendría una salida parecida a:

 :===============================================================================================
unknown XXX.XXX.XXX.XXX
1 spammer1@spammer1.com user1@host1.com
1 spammer2@spammer2.com user2@host2.com
1 spammer3@spammer3.com user3@host3.com
:===============================================================================================
unknown YYY.YYY.YYY.YYY
1 spammer4@spammer4.com user4@domain1.com
:===============================================================================================
unknown ZZZ.ZZZ.ZZZ.ZZZ
1 spammer5@spammer5.com user1@host1.com
1 spammer6@spammer6.com user1@host1.com
1 spammer7@spammer7.com user2@host2.com
:===============================================================================================

6. Conclusión

Postgrey es realmente fácil de instalar y obtendrá un trabajo eficiente con sólo activarlo. La única pega que se le puede encontrar es que la primera vez que un remitente envíe un email sera retrasado 5 minutos (o su configuración --delay). Si esto es un problema para usted, puede añadir una lista de dominios de confianza (whitelisted) en /etc/postgrey/whitelist_clients. Pero, de todas formas, puede mantener los 5 minutos, la gente con la que intercambie correo habitualmente, entrará rápidamente en las entradas autowhitelist y no sufrirá el retraso más veces.