2006/12/25

Greylisting, spam contra las cuerdas

Hace más de un mes implementamos en nuestros servidores perimetrales un sistema para bloqueo de spam, en vista de la inoperancia de los sistemas tradicionales basados en el análisis de contenidos.
Desde hace algunos meses, los spammers están evolucionando hacia un nuevo tipo de correo incrustado en imágenes, de forma que los tradicionales filtros bayesianos o de reglas que se basan en el contenido disminuyen terriblemente en cuanto a eficacia. Esto está provocando que otros sistemas alternativos que hasta la fecha no habían tenido demasiada importancia hayan subido muchos puntos en la lucha contra el spam y se revelen como los únicos realmente efectivos. Dos aproximaciones toman especial interés: el reconocimiento de imágenes mediante sistemas de OCR y los sistemas de greylisting (listas grises).
Mientras que el primero requiere una gran cantidad de recursos por parte de los diferentes sistemas de análisis (aplicar un filtro de reconocimiento de caracteres implica un gran consumo de CPU y memoria, especialmente en sistemas con mucha carga), el segundo apenas requiere implementación y es de una simpleza asombrosa.
Un sistema de greylisting consiste en rechazar todo correo de aquellos remitentes que no conocemos durante un período de tiempo determinado. El sistema, al recibir un correo de un usuario (origen@dominio.com) para uno de nuestros destinatarios en particular (destinatario@midominio.com) a partir de una IP en concreto (iporigen) comprueba si en una base de datos local dicha "tripla" está permitida (origen,destinatario,iporigen). Si aparece en la lista, el correo automáticamente entra en nuestro sistema y se procesa directamente. Por el contrario, si no aparece, se rechaza con un código 550 (rechazo temporal) y se añade la tripa (origen,destiantario,iporigen) a nuestra lista. Al recibir este código, el servidor que envió el correo lo encola y lo volverá a intentar pasado un tiempo (de unos minutos a un par de horas). Esta segunda vez, el correo se volverá a chequear contra nuestra base de datos, pero como previamente se añadió la entrada a nuestro sistema, esta vez se acepta.
¿Y qué aporta este sistema si cualquier spammer puede intentar reenviar el mensaje al cabo de una hora? Pues bien, los spammers no se paran a comprobar que un correo está bien recibido. Simplemente lo intentan, y si entra fantástico. Si no entra, se descarta. Son sistemas preparados para procesar millones de direcciones, no para garantizar su entrega. Además utilizan máquinas de terceros que han sido infectadas por troyanos y que, por lo tanto, no tienen un sistema de envío de correo SMTP completo. De esta forma, ese primer "rechazo" hace que nuestro spammer no consiga su objetivo y el correo se pierda y no entre en nuestros sistemas.
El retardo también sirve para que si un spam vuelve a intentar entrar, nuestro sistema secundario basado en listas negras ya haya podido recibir la información de las listas antispam (pyzor, razor2, etc) que existen por internet y que en pocas horas estarán al día.

Además de almacenar la tripa "origen,destino,iporigen", también almacenamos el número de veces que esa tripa se usa, esto es, el número de mensajes recibidos desde una ip para uno de nuestros destinatarios y el tiempo pasado desde la última vez que se recibió. Esta información extra se utiliza para limpiar nuestra base de datos de spam que una vez intentó entrar y ahora se ha rechazado (esto es, spam que solo tiene un intento de entrada en nuestro sistema). Así la base se mantiene en un número de entradas razonables.

A día de hoy, greylisting es posiblemente el mejor sistema en relación coste/beneficio en la lucha contra el spam. La única pega es el posible retardo que a algunos usuarios puede incomodar, pero este retardo es solo con el primer correo recibido desde un determinado usuario. No hay efectos secundarios de correos legítimos rechazados salvo en casos de que el origen utilice un MTA con una mala implementación que no sepa interpretar un "rechazo temporal". Afortunadamente esto es extremadamente raro.
Eso sí, un sistema de greylisting siempre ha de complementarse con sistemas tradicionales basados en RBL (Relay Blocking List), listas negras/blancas (pyzor, razor, etc) para que el sistema antispam sea un sistema efizar y robusto.

¿Efectivo? Ciertamente. MUY EFECTIVO. Nuestro índice de spam se ha reducido en un 90%, y la mayor parte de ese 10% que entra es spam legítimo, esto es, aquellos correos comerciales de los cuales nos podemos dar de baja sin el menor problema.

1 comentario:

  1. Muy buena explicación, se la voy a pasar a la gente de sistemas de mi empresa (no logran encontrar una forma decente de luchar con el spam).

    Por cierto, que se te ha colado "tripa" en vez de "tripla" varias veces, y queda bastante raro al leerlo :-D

    ResponderEliminar