miércoles, mayo 09, 2007

Greylisting en Postfix

Por todos es sabido, y como he comentado muchas veces, el problema del spam es hoy en día muy grave. Hay muchos métodos que nos ayudan a realizar estas tareas, como las RBL, spamassassin y demás. Pero con todo eso aún no es suficiente y a la vez que los antispam echan humo parando correos no deseados los spammers se las ingenian para sacar nuevos métodos para invadirnos. Por ello un día alguien pensó como combatir este problema con un sistema alternativo a los existentes, o incluso un sistema que trabajase en paralelo con los ya existentes, y se le ocurrió el maravilloso Greylisting. Greylisting es el método por el cual se deniega el primer envío de un remitente desconocido, mediante un código de error 450 (deferred). Muchos de los virus y spammers no siguen el protocolo SMTP correctamente, con lo que nunca volverán a enviar ese mensaje. Mediante el greylisting podemos evitar que nos lleguen mensajes de virus y proxies abiertos, pero no podemos evitar que nos lleguen de servidores de correo mal configurados que permiten relay, aunque con un poco de suerte en el siguiente reenvío ese servidor ya esté en alguna lista RBL y podremos evitarlo.

El funcionamiento es el siguiente:

* Llega un correo con remitente desconocido.
* Se deniega con un error 450 (reintentar más tarde).
* Se guarda la IP, el From y el To en un fichero.
* Si el correo era un spam o un virus lo más probable es que no vuelvan a enviarlo.
* Si el correo viene de un servidor SMTP autentico, será enviado de nuevo pasados unos minutos
* Cuando llega de nuevo el correo, lo dejará pasar ya que ha seguido el protocolo SMTP correctamente.

Para usar este sistema con Postfix (versión 2.1 o superior) en Debian es bastante sencillo, sigue estos pasos:

Necesitarás:

* Perl (version ≥ 5.6.0)
* Net::Server
* IO::Multiplex
* BerkeleyDB (Perl módulo)
* Berkeley DB (Librería, versión ≥ 4.1)

Instalamos el paquete postgrey (gracias a David Schweikert por este script en Perl) mediante apt:

# apt-get install postgrey

Editamos el fichero /etc/postfix/main.cf y lo dejamos tal que así:

[...]
smtpd_recipient_restrictions =
[...]
reject_unauth_destination,
check_policy_service inet:127.0.0.1:60000
[...]

Con esto configuramos Postfix para que compruebe cada correo que llega mediante el demonio greylist, que está escuchando en el puerto 60000 de la IP 127.0.0.1 (localhost)

Ahora tenemos que decirle a postgrey que escuche en el puerto 60000, para ello tenemos que ejecutar:
# postgrey --inet=60000 -d (Nota actualizada: en Debian etch no es necesario)

Con esto le decimos a postgrey que escuche en el puerto 60000 y que se ejecute como demonio.

Ahora reiniciamos Postfix y ya lo tendremos funcionando.

Si queremos que postgrey se ejecute al inicio lo podemos hacer de varias formas. Editando el fichero /etc/init.d/postgrey y dejándolo de la siguiente manera:

Comenta esta linea
#OPTIONS="--unix=$SOCKET" (en Debian etch esto no existe, no es necesario hacerlo).

Y la sustituyes por esta:
OPTIONS="--greylist-text="Greylisted_durante_%s_segundos,mira_en_http://www.tuweb.com/greylist.html" --inet=60000" (en Debian etch se tiene que hacer esto:

#if [ -z "$POSTGREY_TEXT" ]; then
# POSTGREY_TEXT_OPT=""
#else
# POSTGREY_TEXT_OPT="--greylist-text=$POSTGREY_TEXT"
#fi
POSTGREY_TEXT_OPT="--greylist-text=Greylisted_durante_%s_segundos,mira_en_http://www.tuweb.com/greylist.html""

Como ves además he añadido un mensaje personalizado para la respuesta al primer correo, informando en que consiste greylisting y porque le llega esa advertencia.
Seguidamente busca en ese mismo fichero la función start y dejala así:

start() {
echo -n $"Starting $prog: "
daemon $postgrey $OPTIONS -d
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
} (en Debian etch no es necesario hacer esto ya que ya se instala como demonio por defecto)


Ahora ejecuta lo siguiente:
# /etc/init.d/postgrey restart
# /etc/init.d/postfix reload

Y listo, ya tienes postgrey funcionando en tu servidor de correo.

Espero que os sirva de ayuda.

Puedes obtener más información sobre greylisting en http://greylisting.org

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.


4 comentarios:

alex dijo...

Y 2 huevos duros!!

The root dijo...

Hombre cuanto tiempo alex, que te parece la dirección que está tomando mi blog?, crítico de los críticos de los posts que ponía...

Jajajajaja.

Saludos

minu dijo...

mande ?????

The root dijo...

Esto es el nuevo sistema que he implementado en el curro Victoraco, así a ver si no me mandas tantos correos diciendome: SPAM, SPAM 1, SPAM nen, etc.

Jajajaja!