Postgrey

1. Introducción

Postgrey es un servidor de polí­tica que implementa greylisting para filtrar spam en servidores de correo Postfix. El principio de funcionamiento del greylisting está dado sobre la base de que mucho spam es enviado por spambots y otros MTAs que no obedecen los RFC. Postgrey rechaza temporalmente correos nuevos con el error 450 "inténtelo más tarde" para un perí­odo de tiempo y registrará en su base de datos el trio CLIENT_IP / SENDER / RECIPIENT. Si el servidor que enví­a `obedece los RFC, entonces seguramente reenviará el mensaje, en tal punto Postgrey comprobará su base de datos en busca de una coincidencia y aceptará el mensaje. El tiempo de espera es configurable y Postgrey mantiene una base de datos de trí­os. De esta forma los correos desde un origen determinado deberí­an ser demorados solo la primera vez.

Sin embargo, como un tí­pico spambot de correo tiende a recibir un gran número de correos rechazados o rebotados no es algo tí­pico de los spammers reenviar mensajes cuando ellos son temporalmente rechazados. Así­, los mensajes de correo recibidos desde tales fuentes son descartados por el servidor de correo. Esto tiene la ventaja de reducir el filtrado y la sobrecarga de procesamiento en los servidores de correo debido al alto porciento de mensajes que serán descartados simplemente antes de entrar al MTA y no necesitarán ser filtrados o procesados de otra forma.

2. Instalación

En esta guí­a asumimos que el lector tiene un servidor de correo Postfix trabajando. Nosotros instalamos Postgrey desde RPMForge en un CentOS 5.1 completamente actualizado, aunque debe aplicarse igualmente para otras versiones. Para habilitar el repositorio RPMForge, por favor consulte las instrucciones de RPMForge.

Primero, instalamos Postgrey:

# yum install postgrey

Postgrey está escrito en Perl, así­ que Perl es un requisito junto con algunos módulos adicionales de Perl. Yum debe resolver automáticamente por usted cualquier dependencia que haga falta. Usted puede verificar los requisitos en el sitio web de Postgrey.

3. Configuración

Lo primero que necesitamos configurar es Postfix para que use Postgrey. Para ello editamos el fichero /etc/postfix/mail.cf para incluir la siguiente lí­nea check_policy_service dentro de la sección smtpd_recipient_restrictions como se muestra debajo (si usted no tiene una sección smtpd_recipient_restrictions, entonces el siguiente le puede funcionar bien):

smtpd_recipient_restrictions =
   permit_mynetworks,
   reject_unauth_destination,
   check_policy_service unix:postgrey/socket
   permit

Por defecto, la cantidad de tiempo por la cual Postgrey rechazará nuevos mensajes está fijada a 5 minutos pero podemos cambiar este valor usando el switch --delay. Existe un compromiso entre: que mientras mayor sea el tiempo, mayor es la posibilidad de rechazar spam pero también mayor será la demora de los correos legí­timos en su primera vez. Inicialmente, podrí­a ser conveniente fijar este valor a 1 minuto (60 segundos) y luego irlo incrementando una vez que Postgrey haya construido una base de datos de los contactos de correos regulares para su servidor. Para fijar la demora manualmente (en segundos), adicione el switch --delay= a /etc/sysconfig/postgrey como se muestra debajo:

OPTIONS="--unix=/var/spool/postfix/postgrey/socket --delay=60"

Finalmente, necesitamos iniciar el servicio de Postgrey y recargar la configuración de Postfix:

# /sbin/service postgrey start
# /sbin/service postfix reload

NOTA: Usted puede asegurar que postgrey levante con el inicio del sistema usando el comando chkconfig de la siguiente forma:

# /sbin/chkconfig --levels 345 postgrey on

Ahora podemos comprobar los logs de nuestro correo para ver a Postgrey en acción:

#
# postgrey loads:
#
Dec 17 21:44:58 jessie postgrey[6844]: Process Backgrounded
Dec 17 21:44:58 jessie postgrey[6844]: 2007/12/17-21:44:58 postgrey (type Net::Server::Multiplex) starting! pid(6844)
Dec 17 21:44:58 jessie postgrey[6844]: Binding to TCP port 60000 on host 127.0.0.1
Dec 17 21:44:58 jessie postgrey[6844]: Setting gid to "101 101"
Dec 17 21:44:58 jessie postgrey[6844]: Setting uid to "100"
#
# postgrey rejecting a message:
#
Dec 17 21:23:49 jessie postfix/smtpd[6714]: connect from mk-outboundfilter-4-a-1.mail.uk.tiscali.com[212.74.114.8]
Dec 17 21:23:49 jessie postfix/smtpd[6714]: NOQUEUE: reject: RCPT from mk-outboundfilter-4-a-1.mail.uk.tiscali.com[212.74.114.8]: 450 4.2.0 <ned@example.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/example.com.html; from=<bob@example.com> to=<ned@example.com> proto=ESMTP helo=<mk-outboundfilter-4-a-1.mail.uk.tiscali.com>
Dec 17 21:23:54 jessie postfix/smtpd[6714]: disconnect from mk-outboundfilter-4-a-1.mail.uk.tiscali.com[212.74.114.8]
#
# postgrey accepting a message:
#
Dec 17 22:23:45 jessie postgrey[2218]: action=pass, reason=triplet found, client_name=mk-outboundfilter-3-a-1.mail.uk.tiscali.com, client_address=212.74.114.7, sender=bob@example.com, recipient=ned@example.com

4. Reportes

Postgrey incluye una herramienta de reporte llamada postgreyreport. Esta herramienta se encuentra instalada por defecto cuando usted instala el rpm postgrey. Postgreyreport interpretará los logs de correo (lee desde STDIN), los comparará con la base de datos de postgrey y mostrará los detalles de todas las entradas 'fatales' de la lista gris. Un anfitrión es considerado definitivamente en la lista gris cuando no ha reintentado en 300 segundos desde su primer intento a la hora de entregar correo a un destinatario específico. Postgreyreport usa la tripleta completa como candidato. Usted puede ajustar esta demora de los 300 segundos usando la opción de línea de comando --delay, sin embargo 300 es un buen valor para trabajar. La moyoría de los servidores de correo reintentarán dentro de 300 segundos.

Uso básico:

cat /var/log/maillog | /usr/sbin/postgreyreport --delay=300

En dependencia de cuan ocupado sea su servidor, el reporte pude ser algo largo. Para obtener solamente los 20 orígenes primeros que han sido puesto en la lista grís - puede usar algo como lo siguiente:

cat /var/log/maillog | postgreyreport | awk '{print $1}' | sort | uniq -c | sort -nr | head -n20

Para obtener una lista de las primeras 20 direcciones de correo a las cuales las direcciones de origen en la lista grís le están enviando correo:

cat /var/log/maillog | postgreyreport | awk '{print $4}'  | sort  | uniq -c | sort -nr | head -n20

Para obtener una lista de todas las opciones y funciones que soporta postgreyreport:

postgreyreport -h

5. Consideraciones sobre MX Múltiples

Si su dominio tiene más de un servidor de correo (MX), asegúrese de habilitar el sistema de lista grís en todos sus servidores o los spammers apuntarán a sus máquinas de respaldo MX y enrutarán el correo hacia dentro desde allí. Puede que sea conveniente ubicar las computadoras, entre sí, en una lista blanca. Consulte la siguiente sección para ver como crear una lista blanca en postgrey.

Para que el sistema de lista grís trabaje en una computadora de respaldo MX, es importante que el chequeo ocurra antes que el correo sea aceptado! A pesar de que esto es algo común, es un echo que le causa gran confusión a la mayoría de las personas cuando están configurando el sistema de lista grís en computadoras de respaldo MX. A modo de ejemplo, si usted está usando premit_mx_backup en postfix su smtpd_recipient_restrictions en el respaldo MX debe verse como lo siguiente:

smtpd_recipient_restrictions =
    reject_unauth_destination,
    check_policy_service unix:/var/spool/postfix/postgrey/socket,
    permit_mx_backup,
    permit

6. Listas Blancas

En postgrey es posible ubicar tanto el destinatario como los remitentes en una lista blanca. Todo lo que necesitamos para ubicar un anfitrión en la lista blanca es adicionar su nombre de dominio completamente cualificado o su dirección IP, al fichero /etc/postfix/postgrey_whitelist_clientes.local. Por ejemplo:

192.168.1.10
mydesktop.office.mydomain.com

Ahora todos los correos recibidos desde 192.168.0.10 o mydesktop.office.mydomain.com no serán verificados por el sistema de lista grís, ellos serán aceptados inmediatamente (mientras que sean válidos y pasen las reglas de postfix). Por otro lado si desea ubicar un destinatario en la lista blanca, puede adicionar la parte de su nombre de usuario de la dirección de correo al fichero: /etc/postfix/postgrey_whitelist_recipients. Por ejemplo:

postmaster@
abuse@
theboss@

Ahora todos los correos que estén siendo recibidos para cualquiera de estas direcciones no serán verificados por el sistema de lista grís y todos los mensajes de correo serán aceptados al momento. Observe que ya postgrey viene con una configuración de lista blanca para postmaster y abuse.

7. Resumen

El sistema de lista grís o greylisting es una forma muy efectiva de combatir el enví­o de spam desde los spambots que no obedecen los RFC. Postgrey es una forma fácil de implementar un servidor de polí­ticas de greylisting para Postfix que puede ser instalado y configurado en cuestiones de minutos en un servidor de correo Postfix en CentOS.

8. Enlaces

es/HowTos/postgrey (last edited 2008-11-07 21:01:27 by AlainRegueraDelgado)