Nobots

3 minute read Publicado:

Nobots plugin anti-bots para CaddyServer

Hace unos días vi un artículo donde se comentaba la posibilidad de disuadir los crawlers o bots de navegar por tu página web. La noticia encuestión era esta. Pues bien cuando lo compartí con unos colegas éstos me sugirierón que hiciera un plugin para CaddyServer. La verdad que me motivo e intrigo cómo hacer un plugin para CaddyServer. Así que sin más me puse a ello.

La verdad que la gente de CaddyServer se lo han currado bastante y han diseñado todo el servidor como un sistema de plugins, por lo que hacer un nuevo plugin es realmente sencillo. Dire que la documentación no es muy explicatoria, al menos un sabádo a las 3:00 PM, pero cuando lees la documentación con detenimiento ves que hacer un plugin sencillo va casi que guiado con la documentación. Después de leer la documentación ya tenia claro como hacer el plugin, además me sirvio ver otros plugins para coger ideas y conocer mejor como se desarrolla un plugin para CaddyServer.

La idea del plugin es realmente sencilla, se trata de observar las peticiones de entrada, si éstas vienen con un user-agent especifico entonces hay que bombardear.

Con esa idea en la cabeza diseñe el plugin para que bombardeara a navegantes con user-agent especificos, así como con palabras clave mediante expresiones regulares. Además, también se añadio un componenete de execpción. En caso que nos visite un “indeseado” pueda visitar ciertas partes de la web.

Para usar el plugin lo primero que hay que hacer es descargar CaddyServer desde su web de descargas seleccionando el plugin en la sección de plugins. Después de la descarga hay que configurar el plugin para indicar que user-agent queremos bombardear, esto se hace como sigue.

nobots "path/to/the/bomb.gzip" {
    "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html"
}

El caso anterior sería el más simple, pero podemos añadir muchos más user-agent sin saber como están formados, por ejemplo.

nobots "path/to/the/bomb.gzip" {
    regexp "Googlebot"
}

Con el ejemplo anterior estariamos bombardeando a todos los user-agent que son o se hacen pasar por el GoogleBot.

Obviamente la configuración se puede complicar algo más.

nobots "path/to/the/bomb.gzip" {
    "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"
    "DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)"

    regexp "Baiduspider"
    regexp "Googlebot"
    regexp "bingbot"
    regexp "msnbot"
    regexp "Bing"
}

Como dije anteriormente también se ha añadido un sistema de excepciones, para ello hay que añadir la palabra clave public junto con una expresión regular.

nobots "path/to/the/bomb.gzip" {
    regexp "Googlebot"
    regexp "bingbot"
    regexp "msnbot"
    regexp "Bing"

    public "^/public"
    public "[a-zA-Z0-9-]+/public"
}

En el ejmeplo anterior lo que hace el plugin es bombardear todas las peticiones que se hacen desde los user-agent indicados en las expresiones regulares regexp excepto aquellas URI que cumplan con las expresiones regulares establecidas en public.

Por último proponer una configuración para evitar ataques de herramientas automatizadas. Aunque muchas de ellas permiten modificar el user-agent para evitar ser detectadas, muchos no utilizan dicha funcionalidad y podemos bloquear los ataques hacia nuestras web.

nobots "path/to/the/bomb.gzip" {
    # UA de librerias de programacion
    regexp "curl"
    regexp "wget"
    regexp "nutch"
    regexp "libwww"
    regexp "python"
    regexp "Scrapy"
    regexp "httpunit"
    regexp "phpcrawl"
    regexp "Python-urllib"
    regexp "Go-http-client"
    regexp "Commons-HttpClient"

    # UA de herramientas automatiadas
    regexp "FOCA"
    regexp "sqlmap"
    regexp "nikto"

    # UA de malware
    regexp "Godzilla"
    regexp "BLEXBot"
    regexp "EmailSiphon"
    regexp "Atomic_Email_Hunter"
}