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

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.

Comparte y disfruta:
  • Digg
  • del.icio.us
  • De.lirio.us
  • feedmelinks
  • Furl
  • Ma.gnolia
  • Reddit
  • Technorati
  • YahooMyWeb
  • Meneame

13 Respuestas a “Postfix y Postgrey: Un acercamiento a la lucha proactiva contra el spam”


  1. 1 Pasky

    He probado a añadir “check_policy_service inet:127.0.0.1:60000″, pero da el siguiente error:

    Dec 21 15:29:28 localhost postfix[17794]: fatal: /etc/postfix/main.cf, line 69: missing ‘=’ after attribute name: “check_policy_service inet:127.0.0.1:60000″

    Así que he modificado lo anterior por “check_policy_service=inet:127.0.0.1:60000″, y ahora sí arranca, pero no hace nada diferente. Simplemente se traga el correo.

    ¿Se os ocurre algo?

    PD: Buen artículo. Felicidades.

  2. 2 Angel Abad

    Buenas Pasky, ¿Qué vesión de Postfix estás utilizando?

  3. 3 Gaona

    Muy buen artículo, no conocía esta tecnología de lucha contra el spam.

  4. 4 Pasky

    Hola Ã?ngel.

    Estoy usando Postfix 2.1.5 y PostGrey 1.21, ambos de los repositorios de Debian Sarge.

  5. 5 Pasky

    Hola de nuevo.

    Ya encontré el error y lo tengo funcionando.

    Gracias de nuevo.

  6. 6 Angel Abad

    Buenas Pasky, ¿Podrías decirnos cual era el error? Quizás a mas gente le ocurra lo mismo.

  7. 7 B.Sword

    Fantastico maestro, tengo una maquina con Postfix, y hace un tiempo me plantee poner una GreyList para un Qmail, voy a proponer instalar esta GrayList.

    Buen trabajo, entendible para iniciantes (Instalacion rapida) y lo suficiente extenso para quienes ya domina el area.

    PD: Te seguiré de cerca el Blog.

  8. 8 PiLoT

    Pasky, tengo el mismo error

    localhost postfix[17794]: fatal: /etc/postfix/main.cf, line 69: missing ‘=’ after attribute name: “check_policy_service inet:127.0.0.1:60000″
    ¿Podrías decir como lo solucionaste?

    Gracias

  9. 9 Alberto Rial

    No se si ya lo habrás solucionado, pero si sabes leer missing ‘=’ after attribute name, osea, pon un = despues del nombre del atributo.
    check_policy_service=…

    Un saludo.

  10. 10 Gerardo

    Hola, tengo un Debia sarge con postfix, courier y Ldap autentificando en la salida con saslauthd y amavis-new para los virus y quota. Ya hace algún tiempo puse el postgrey, pero al cabo de dias como 7 u 8 se bloquea completamente el servidor. por último, este (Postgrey) me bloquea poco a poco el smtp hasta que no me deja enviar nada.

    Alguna sugerencia?

  11. 11 Cristian

    [...]

    –separate_by_subnet=”:=====================\n”

    Agrega \ antes de la n. Así pude hacer el salto de página : -)

  12. 12 YINA

    Es excelente esta pequeña documentación para prevenir spamm ya que en estos últimos días me ha llegado mucha basura.

  1. 1 meneame.net
    Dirección Trackback a 21 Dic. 2006 @ 3:30 pm

Añade un Comentario