11 enero 2010

am I Spammer? Publicada segunda versión

El año pasado os hablamos en SbD de amISpammer, una herramienta que habíamos desarrollado para analizar diariamente si una dirección IP pasada por línea de comandos aparecía en alguna de entre más de 90 listas negras de las que utilizan las soluciones antispam. De esta manera, y efectuando diariamente este tipo de consultas, podríamos al menos saberlo y tomar acciones correctivas cuanto antes.

La verdad es que la herramienta tuvo bastante aceptación (muchas gracias a todos!!!) y en los comentarios del post algunos de nuestros lectores nos dejaron sugerencias bastante interesantes a tener en cuenta para implementar en futuras versiones.

Así pues, os presentamos una actualización que incluye alguna de las sugerencias que nos hicisteis, y otras nuevas que se fueron ocurriendo mientras se codificaban las modificaciones.
Son las siguientes:
  • Cuando una IP aparece reportada en alguna de las más de 90 listas negras, se hace una búsqueda en los registros DNS de tipo TXT para conocer la razón por la cuál fue denunciada (Esta característica se añadió gracias al análisis del funcionamiento de la herramienta presentada por Jordi Prats en su blog SystemAdmin.es).
  • En la primera versión era obligatorio pasar como parámetro una dirección IP mediante el flag -i. En la nueva se ha añadido un procedimiento de detección automática de la IP actual, si no se especifica por línea de comandos una concreta.
  • Lo más normal en las organizaciones (y esperemos que utilicen esta herramienta) es tener más de un servidor de correo en la misma o diferentes ubicaciones (para dotar de alta disponibilidad al servicio). Eso se suele implementar mediante la creación de diferentes registros DNS de tipo MX (Mail Exchange). Por ello y siendo que amISpammer funcionaba anteriormente comprobando únicamente una IP, se ha implementado un funcionamiento basado en comprobar TODAS las IPs de un mismo dominio. En esta versión, si especificamos el dominio con -d , obtendrá todas las IPs que resuelva registros MX DNS y comprobará una a una si aparecen en las listas negras. Esto es útil también si contamos con una dirección IP y un dominio dinámico (del tipo DynDNS por ejemplo).
  • La primera versión, comprobaba secuencialmente mediante consultas para cada una de las listas negras, si la IP especificada aparecía en cada lista. Más o menos para comprobar una IP, el programa tardaba unos 120 segundos. En la nueva versión, se ha implementado un mecanismo basado en threads/hilos para hacer las 92 consultas de una sola vez. Como se puede imaginar, el tiempo de espera disminuye hasta los 20 segundos (unas 6 veces menos). Por contrapartida, la máquina consume bastantes más recursos que en la versión secuencial (memoria y CPU fundamentalmente). Para ello (y gracias a mi amigo beta-tester Domingo) se ha incorporado para versiones Linux, que nada más se ejecuta el mismo, asigna al proceso la mínima prioridad posible para el proceso. No obstante, y como en sistemas Windows, requería incluir demasiados módulos para decrementar la prioridad del proceso, se ha decidido dejar la posiblidad al usuario de ejecutar la herramienta de forma secuencial o con hilos. Para ello, se utiliza el flag -T (valores 0 ó 1 dependiendo de si queremos secuencial o con hilos). Por defecto, y mientras no se diga lo contrario, se ejecuta con hilos, de manera que se incrementan las necesidades de recursos pero se tarda poco en hacer las comprobaciones.
  • Si tenéis alguna duda de los flags disponibles, añadiendo -h se muestra la ayuda de los parámetros posibles
La última versión (11/01/2009) de la herramienta, se puede descargar desde aquí

Por supuesto, y como dijimos en la ocasión anterior, quedo a vuestra disposición para tener en consideración futuras mejoras/sugerencias que creaís que sean interesantes de implementar.

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

11 comments :

David dijo...

Buen trabajo!!

Se podría cambiar la web de donde busca la IP actual en vez de cualesmiip.es que mete mucha basura (3,4K) frente a 104B de checkip.dyndns.org.

La mejora es insignificante ... xD pero bueno queda ahí. La función que obtiene la IP quedaría así:

http://pastebin.com/f3996822c

Lorenzo Martínez dijo...

@David -> Muchas gracias por tu aporte. Hice pruebas con diferentes páginas que devolvían la dirección IP. Sin embargo, si sales a través de proxy (para el tráfico web, se entiende), la IP que te devuelven las diferentes páginas, no siempre es la correcta (a veces la interna, a veces la pública,...), ni el formato es siempre el mismo, por lo que al hacer el grep es más complicado.

He hecho la prueba en checkip.dyndns.org por ejemplo y mira:

Current IP Address: 192.168.X.Y

Me da la IP privada de mi portátil... La verdad es que con la cantidad de tráfico web que se genera a posteriori, es poco el ahorro, aunque te agradezco la mejora. Si se te ocurre algo más, quedo a tu disposición (y la de todos los lectores, claro :D )

David dijo...

Desconocía que esa web te podía dar la IP interna.

vierito5 dijo...

En www.whatismyip.org se ahorran incluso el "Current IP Address" xD

Lorenzo Martínez dijo...

@David y @Vierito -> En www.whatismyip.org me da sólo la IP privada porque voy por proxy :D... Todo depende del mecanismo detección que lleve la página. En general lo hacen mirando (además de la IP origen) las cabeceras X-Forwarded-For cuado pasas a través de proxies: http://en.wikipedia.org/wiki/X-Forwarded-For

neobius dijo...

Por aportar algo, quizás esta pagina sea útil: http://www.icanhazip.com/ te devuelve solamente la ip. Aunque la verdad no sé como va si hay proxys de por medio no lo he probado.

Anónimo dijo...

Buena herramienta.

Un par de cosas tan sólo. Mi recomendación es que uses la web http://www.dnsbl.info/dnsbl-list.php y extraigas los DNS que ofrecen las diferentes DNSBL para consulta. De esa forma no colapsas una web sino que consultas tú directamente el DNS. Los robots buscadores suelen cabrearse y bloquear el acceso (poniendo un captcha por ejemplo) cuando la gente los empieza a usar de forma masiva y automática.

Por otro lado, una lectura periódica de esa web te permitirá tener la herramienta actualizada conforme salgan otras listas.

Lo segundo: muchas organizaciones reciben correo por los MX, pero los envían por los mailhosts, estos últimos son los que figuran en las listas negras. La forma correcta de obtener las IPs de estos es leyendo los registros SPF si el operador los publica.

neobius dijo...

Por aportar algo, quizás esta pagina sea útil: http://www.icanhazip.com/ te devuelve solamente la ip. Aunque la verdad no sé como va si hay proxys de por medio no lo he probado.

vierito5 dijo...

En www.whatismyip.org se ahorran incluso el "Current IP Address" xD

David dijo...

Desconocía que esa web te podía dar la IP interna.

Lorenzo Martínez dijo...

@David -> Muchas gracias por tu aporte. Hice pruebas con diferentes páginas que devolvían la dirección IP. Sin embargo, si sales a través de proxy (para el tráfico web, se entiende), la IP que te devuelven las diferentes páginas, no siempre es la correcta (a veces la interna, a veces la pública,...), ni el formato es siempre el mismo, por lo que al hacer el grep es más complicado.

He hecho la prueba en checkip.dyndns.org por ejemplo y mira:

Current IP Address: 192.168.X.Y

Me da la IP privada de mi portátil... La verdad es que con la cantidad de tráfico web que se genera a posteriori, es poco el ahorro, aunque te agradezco la mejora. Si se te ocurre algo más, quedo a tu disposición (y la de todos los lectores, claro :D )