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.
![Validate my RSS feed [Valid RSS]](http://validator.w3.org/feed/images/valid-rss.png)
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.
Buenas Pasky, ¿Qué vesión de Postfix estás utilizando?
Muy buen artÃculo, no conocÃa esta tecnologÃa de lucha contra el spam.
Hola Ã?ngel.
Estoy usando Postfix 2.1.5 y PostGrey 1.21, ambos de los repositorios de Debian Sarge.
Hola de nuevo.
Ya encontré el error y lo tengo funcionando.
Gracias de nuevo.
Buenas Pasky, ¿PodrÃas decirnos cual era el error? Quizás a mas gente le ocurra lo mismo.
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.
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
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.
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?
[...]
–separate_by_subnet=”:=====================\n”
Agrega \ antes de la n. Asà pude hacer el salto de página : -)
Es excelente esta pequeña documentación para prevenir spamm ya que en estos últimos dÃas me ha llegado mucha basura.
A mi me da un error al modificar el main.cf
Si añado la lÃnea con dos puntos como indicas:
RCPT from unknown[209.85.218.225]: 451 4.3.5 Server configuration problem;
Si le pongo el =:
Fatal: unsupported dictionary type: check_policy_service=inet
Uso CentOs por si sirve de algo.
Muchas gracias, ahora empezare con el tema de las listas grises, desde ya y de ante mano muy buen tutorial, despues de varios dias de buscar uno que este completo he dado con el clavo con tu pagina.