21 diciembre 2009

Herramienta: Are you a Spammer?

Tiempo atrás publicamos un post con diferentes buenas prácticas utilizadas para aumentar la probabilidad de que nuestros correos lleguen bien a su destino.

Los dispositivos antispam, en su misión de decidir si un correo debe clasificarse o no como aceptable y útil para un usuario, utilizan diferentes mecanismos y algoritmos para cumplir con su cometido. De las primeras cosas que éstos analizan es sobre lo confiable que es la IP que envía el correo. Para ello, se basan en consultar a diversos servicios online si la dirección IP a analizar está en una lista negra o no. Para que una IP aparezca listada en estos servicios, tiene que haber sido reportada/denunciada con mayor o menor acierto.

El aparecer en una de estas listas, suele empeorar la calidad del servicio de correos enviados por nuestra organización. En casos extremos, puede resultar en una denegación del servicio de correo saliente al 100% debido a que puede que el ISP puede tomar medidas drásticas bloqueando el tráfico del puerto 25 saliente. Llegado a este punto, los administradores de sistemas comienzan a buscar en diferentes servicios web que permiten ver si una IP en concreto está en algunas listas negras. La más completa que he encontrado es la de Whatismyipaddress.

En este caso, el análisis de las listas negras en las que se encuentra la IP se hace manual y voluntariamente cuando ya se ha degradado parcial o totalmente el servicio.

A fin de disminuir el tiempo de resolución de la incidencia, y porque como decía el doctor Ocaña, "Más Vale Prevenir", presentamos una herramienta que automatiza la comprobación con un número grande de listas negras conocidas (más de 90) basándose en el servicio ofrecido por Whatismyipaddress. La idea es poder lanzar vía línea de comandos y de forma periódica (lo normal y razonable sería al menos una vez al día, aunque en sitios en los que el correo sea de gran criticidad podría aumentarse la frecuencia) una herramienta que permita conocer cuanto antes que nuestra IP ha sido reportada como spammer. Para ayudarnos en esta tarea podemos utilizar amISpammer?.

El modo de funcionamiento es muy sencillo. Como único parámetro obligatorio hemos de pasar la dirección IP que queremos comprobar a amISpammer.pl. Si no le indicamos nada más nos mostrará por en el terminal las listas negras en las que la IP aparece como reportada.

Por ejemplo, tomando una IP listada en el SANS, obtenemos lo siguiente:
[root@Carmen ~]# amISpammer.pl -i 218.30.22.82 -v0 am I Spammer? 19/12/2009 (http://www.lorenzomartinez.es/projs/amispammer) By Lorenzo Martinez (lorenzo@lorenzomartinez.es)
blackholes.five-ten-sg.com red
no-more-funn.moensted.dk red
spam.dnsbl.sorbs.net red

Como se ve, aparecen tres listas negras con categoría "red", lo que quiere decir que está reportada.

Como parámetros opcionales se puede cambiar el nivel de detalle; con -v2 aparecen todas las listas que se comprueban sea su resultado "green" (not blacklisted), "red" (blacklisted), "blue" o "grey" (que la lista negra no está disponible en este momento. Con -v1 y -v2). Asimismo se pueden pasar más parámetros para hacer que envíe un correo con los resultados al terminar (esta funcionalidad sólo es válida con nivel de detalle mínimo, es decir, sólo cuando se detecta que la IP ha sido reportada en alguna lista negra). Esto es útil cuando se deja hecha una tarea en un cron para que se compruebe periódicamente y de forma desatendida. Por ejemplo:

30 4 * * * /usr/local/bin/amISpammer.pl -i 213.X.Y.Z -v0 -f root@sender.com -t root@recipient.com >> /dev/null 2>&1

Así, y en caso de aparecer en una lista negra, nos llegará un correo indicándonoslo para poder tratar la incidencia cuanto antes.

La herramienta ha sido desarrollada íntegramente en Perl, y comprobado su funcionamiento en Linux, Mac OSX y Windows (XP y 2003). Como dependencias, sólo en caso de querer envío de correos, necesitaremos el módulo Mail::Sender.

Queda en mi "To Do", hacer que la herramienta efectúe con threads las comprobaciones, en vez de hacerlas de forma iterativa. Quedo a vuestra disposición ante sugerencias para añadirle más funcionalidades a la herramienta.

Update: He subido la herramienta al repositorio de herramientas de SBD, así que la podéis descargar de aquí también.

8 comments :

Eduardo dijo...

Me gusta muchísimo la herramienta. Muy útil.

Como sugerencia, a lo mejor sería una buena idea integrarlo como plugin de nagios, puesto que en muchas empresas usan este software libre para chequear la red y los operadores, cuando vean una alerta, pueden proceder a avisar o hacer lo que corresponda ...

Saludos,
Eduardo.

David dijo...

Otra sugerencia es añadir una opción para que consulte la IP del equipo donde se ejecuta.

Buena herramienta!!

Anónimo dijo...

bastante interesante el articulo , lo pondré a prueba muchas gracias

Lorenzo Martínez dijo...

Muchas gracias a todos por vuestros comentarios y sugerencias!!!!

@Eduardo -> tendré en cuenta el ponerlo como plugin de nagios, aunque con una frecuencia de ejecución de una hora más o menos,...

@David -> Lo había pensado en un primer momento, pero claro, un servidor de correo tras un firewall no tiene por qué salir a Internet, para servicios diferentes al SMTP, con la IP que utiliza como registro MX. No obstante, puede ser interesante ponerlo como opción o el pasarle un nombre de dominio y que compruebe las IPs de todos los registros MX que encuentre en DNS...

@Anónimo -> me alegro que te sea de utilidad,... es como un seguro de vida, lo mejor es pagarlo y no tener que usarlo nunca... vamos, que no te llegue ningún correo, que querrá decir que no te han metido en ninguna lista negra :D

Jordi dijo...

Yo lo tengo hecho como check de nagios haciendo la consulta directamente a las blacklists. Sólo comprobaba en las xbl y sbl de spamhaus por pura pereza de añadir más listas, pero como también lo hice en perl ya he aprovechado tu array. Mañana lo colgaré en mi blog

Jordi dijo...

Este es el check de Nagios para DNSBL que comentaba ayer.

Jordi dijo...

Yo lo tengo hecho como check de nagios haciendo la consulta directamente a las blacklists. Sólo comprobaba en las xbl y sbl de spamhaus por pura pereza de añadir más listas, pero como también lo hice en perl ya he aprovechado tu array. Mañana lo colgaré en mi blog

Anonymous dijo...

bastante interesante el articulo , lo pondré a prueba muchas gracias