¡Foto!

¡Envia tu foto al Fotomaton!

htaccess: Bloqueando a la fuerza

11 comentarios · 4.462 lecturas · manuales

El último día hablaba sobre las recomendaciones para robots y crawlers mediante el robots.txt. Este sistema es un conjunto de indicaciones para que los crawlers no se «pierdan» y sepan en todo momento por donde pueden y deben ir.

¿Qué es lo que ocurre? Que cualquier persona me puede indicar que debo y que no debo tocar en su casa, pero en todo momento yo tengo la opción de hacerlo, aunque no deba. De eso vamos a tratar en este artículo, ¿Que ocurre si llega un crawler «listillo» que pasa olímpicamente de las recomendaciones que le hemos hecho? Pues que lo echamos a patadas de nuestra casa... ;)

Existe un fichero en los servidores web Apache (la mayoría de los servidores), llamado .htaccess, en el que puedes incluir información de control para dictar al servidor que hacer con tus visitantes y otro tipo de acciones.

htaccess crawlers block

Lo primero que necesitamos es un sistema de estadísticas o mejor aún, acceso a nuestro fichero access.log, registro donde se guardan todos los accesos a nuestro servidor. En Dreamhost, el servidor donde tengo alojado mi blog (y uno de los más famosos), tiene acceso SSH/FTP y puedes ver sin ningún problema a estos registros.

Bien con un sistema de estadísticas, o con nuestro fichero access.log, nos interesa observar los accesos por petición (request), navegador o agente (user agent) o por ip. Desde una consola SSH podemos conseguir un listado de las IPs que más peticiones realizan:

tail -10000 access.log | awk '{print $1}' | sort | uniq -c |sort -n

Esta secuencia de comandos nos muestra las últimas 10.000 llamadas a nuestro servidor, agrupándolas por IPs y mostrando el número de peticiones realizado.

Esto nos servirá para tener una idea de que crawlers, robots o usuarios pueden estar sobrecargando nuestro servidor con demasiadas peticiones. Existe un programa bastante útil que yo utilizo para analizar los access.log, llamado Apache Log Viewer. La única y «minúscula» pega es que está en japonés.

  84 63.161.169.137
  85 crawl-66-249-67-236.googlebot.com
  91 81.177.8.166

Este no es un ejemplo real, pero imaginemos que esos son los resultados obtenidos. Tendríamos 84 peticiones de la IP que figura a su derecha. Si vamos a Inicio / Ejecutar / cmd y escribir nslookup IP podremos obtener el DNS inverso y saber a que compañía pertenece, o investigar un poco más con un analizador de logs o estadísticas y ver que accesos ha hecho.

¡Ojo! Que haga muchas peticiones no significa que sea un robot malvado. Puede que se trate de nuestro más fiel visitante o nuestro querido buscador de Google. Mucho cuidado con bloquear IPs sin pensarselo.

En mi caso resultó que la IP 81.177.8.166 realizaba bastantes peticiones, e investigando un poco más pude ver que eran a antiguos ficheros de un formulario que ya no existían. Probablemente un robot spam que sigue torpemente intentando enviar comentarios de SPAM, generando peticiones inútiles.

Si tenemos dudas la mejor opción es hacer un Whois y si nos parece que está realizando un ataque, enviar una queja al email de abuse del ISP que muestra en el whois.

block crawler robots

Bloqueando por IPs


Si estamos completamente seguros de que la IP que hemos encontrado en nuestros logs nos está realizando ataques DoS o algún tipo de sobrecarga de peticiones, vamos a bloquearla. Para ello tenemos que editar el fichero .htaccess en la carpeta raíz de nuestro sitio vía SSH o FTP y escribir o modificar su contenido añadiendo:

Order allow, deny
Deny from 81.177.8.166
Allow from all

Y no solo bloquear IPs, sino también rangos de IPs mediante sus clases: Deny from 81.0.0.0/8. Esto también es aplicable a crawlers que hemos añadido en el robots.txt y vemos días o semanas después (ojo, a veces no leen el robots.txt instantáneamente) que no hacen caso. Ahora toca que hagan caso a la fuerza mostrando un código de error 403 (prohibido) en lugar de lo que esperaban.

Bloqueando con SetEnvIfNoCase


Se nos plantea otra dificultad. Los robots que acceden ahora nunca tienen la misma IP, siempre son totalmente diferentes y sin relación:

  • Bot 1: Su agente de usuario no varía, es Malvadobot/2.0.
  • Bot 2: No tiene nunca el mismo agente de usuario, ni IP, pero accede siempre al fichero /sendemail.php, que no existe.
  • Bot 3: Ninguno de los anteriores criterios es fijo, salvo que viene siempre (Referer) de la página http://www.spammers.com/.

¿Cómo los bloqueamos?

SetEnvIfNoCase User-Agent "Malvadobot/" spambot
SetEnvIfNoCase Request_URI "/sendemail.php$" spambot
SetEnvIfNoCase Referer "^http://www.spammers.com/" spambot
deny from env=spambot

Con este código estamos identificando los criterios de los tres bots anteriores para asignarles una variable llamada spambot si casa con los criterios, y que si es así, bloqueará.

Bloqueando con ModRewrite


Existe otra alternativa para bloquear, que necesita el módulo mod_rewrite, y aunque se utiliza para reescribir direcciones, nos puede venir bastante bien para bloquear. Lo he dejado para el final, puesto que creo que es la alternativa más costoso en términos de computación, con respecto a los métodos anteriores.

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Malvadobot/.* [NC]
RewriteCond %{REQUEST_FILENAME} ^/sendemail.php$ [NC]
RewriteCond %{HTTP_REFERER} ^http://www.spammers.com/.* [NC]
RewriteRule .* - [F]

En primer lugar activamos el motor del ModRewrite, y usamos los tres casos anteriores como condiciones con el RewriteCond. En caso de ser afirmativa, reescribimos mostrando un error 403, o también podemos usar un error 410 (Eliminado permanentemente) escribiendo [G] en lugar de [F]. En la página de documentación de ModRewrite hay mucha información para profundizar.

Ahora ya sabemos como bloquear. Hay que usarlo con mucho cuidado para no bloquear a usuarios legítimos y perder visitas.


11 comentarios · Escrito el 14-Aug-2007 · Ver menciones
Recomendar por correo · Meneame · Añadir a del.icio.us

Conexión a internet más rápida y veloz.

11 Comentarios


#1 Publicado hace 1 año
Inge Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Manz, felicitaciones por los excelentes posts en tu blog, te sigo desde hace unos meses.

Nuevamente gracias por estos posts, sigue con estos posts.

Saludos desde Cuernavaca, México.

#2 Publicado hace 1 año
rubendomfer Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Muy útil el tutorial ;)

Yo hasta ahora utilizaba la web: http://www.htaccesstools.com para modificarlos

#3 Publicado hace 1 año
Jake Lector

Navegando con Mozilla Firefox
Bajo Ubuntu Linux

Dos cosas:
La primera: el mod_rewrite. ¡Qué herramienta tan maravillosa! La verdad es que al principio se resiste a ser aprendido pero luego es tan potente que ves la web desde otro punto de vista (ves el código y no la rubia).

La segunda es algo que me ha llamado la atención de forma preocupante en un par de posts tuyos: los porcentajes. Los porcentajes o estadísticas que a veces comentas en tus posts, que normalmente no son el motivo principal del post sino que van dentro de párrafos, como el 90% de servidores aquí o el 75% de bloggers en otro post. Cada vez que leo uno de estos números no puedo evitar preguntarme si es una estimación tuya, un sustituto de las expresiones gran parte de o la mayoría de, o si sacas los números de encuestas publicadas sobre el tema. Y bueno, en cualquier caso creo que no estaría de más una aclaración, porque muchas personas luego se acuerdan de los números y dan esa información por válida sólo porque lo que pone en el mismo texto también lo es. De hecho, si miras esta estadística verás que el porcentaje de uso de Apache es mucho menor, la cosa está más repartida.

Saludos

#4 Publicado hace 1 año
Manz Administrador

Navegando con Mozilla Firefox
Bajo Windows XP

Efectivamente... Yo casi no puedo vivir sin mod_rewrite, se hace tan útil para todo...

Con respecto a lo de los porcentajes, tienes razón. No es del todo correcto alguno de los números usados, mucho mejor usar cosas como (en su mayoría). Para los lectores, es mucho más intuitivo hacerse una idea de un porcentaje, pero claro, depende mucho de varios factores.

Lo que me sorprende es que haya variado tanto el porcentaje de uso de Apache con respecto a Microsoft en los últimos meses.

#5 Publicado hace 1 año
Public Enemy Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Enhorabuena por esta última remesa de post Manz. Muy útiles y desde luego yo lo voy a intentar sacar partido. Vaya currada, sigue así.

#6 Publicado hace 10 meses
May007 Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Hola esta muy bueno tu blog, y veo que le sabes mucho a esto de bloquear y dar acceso a un sitio Web, me gustaría saber como hacerle para que a mi sitio Web solo algunas personas o PC puedan entra a ver el contenido, ya les e creado cuentas en no-ip.com pero no me esta resultando, pues le niega el acceso al sitio, la única forma para hacerlo funcionar es agregando las IP`s de las maquinas, pero como las IP`s son dinámicas las tengo que estar cambiando, mira este es mi .htaccess , no se si haya algo mal, tú que dices?

order deny,allow
deny from all
allow from .org
allow from pc1.frmex.net
allow from pc2.frmex.net
allow from pc3.sytes.net
allow from pc4.no-ip.org
allow from may007mx.sytes.net


Para montar mi servidor estoy usando apache 2.2, Mysql 5.0 y PHP 5

#7 Publicado hace 10 meses
Manz Administrador

Navegando con Mozilla Firefox
Bajo Windows XP

Quizás sería mejor que en lugar de usar el "allow/deny from" lo protegieras con clave vía htaccess.

Asi los usuaros permitidos solo tienen que poner una contraseña. Busca un poco sobre htpasswd, hay mucha documentación por la red.

Saludos,

#8 Publicado hace 6 meses
Pablo Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Hola,
Veo que tienes muy buena nformacion, yo pense que sabia algod e informatica pero veo que me estoy quedando atras. Dime por favor es posible bloquear que mi sitio sea visualizado en mi pais, esto me seria muy util porque me sitio esta destiando solo a exportacions y las visitas locales solo me cuestan dinero.
Saludos desde las altas tierras bolivianas

#9 Publicado hace 5 meses
Informático Lector

Navegando con Mozilla Firefox
Bajo Windows XP

Muy útil esta información al igual que el resto del blog.

Saludos paisano ;)

#10 Publicado hace 2 meses
Avene Lector

Navegando con Internet Explorer
Bajo Windows XP

Muy interesante tu blog. Gracias por tus consejos.

#11 Publicado hace 1 semana
martin Lector

Navegando con Internet Explorer
Bajo Windows XP

Muy bueno tu post!!!

Deja tu comentario


en Internet.




Consejos


  • Los comentarios fuera del tema del artículo (OFF-TOPIC) serán eliminados.
  • Escribir completamente en MAYUSCULAS en Internet equivale a GRITAR y está mal visto.
  • No utilices lenguaje SMS, en Emezeta no te cobramos por letras escritas.
  • No hagas publicidad de tu página o dejes enlaces en el comentario para aumentar el PR o la popularidad en buscadores. En Emezeta se aplica el tag nofollow, que hace que Google ignore esos enlaces.
  • No insultes. Al escribir un comentario tus datos quedan almacenados y serás el único responsable de tus palabras. Se permite la libertad de expresión y de opinión, pero no los comentarios ofensivos.
  • Puedes insertar algunas etiquetas HTML en los comentarios: em, a href, b, i, em, code, acronym y strong.
  • Es posible añadir una foto junto a tus comentarios, para ello sólo tienes que personalizarla en Gravatar. [?]

Envía tu foto


Fotomatón Emezeta

Envia tu fotografía al fotomatón de Emezeta. Puedes enviar varias y saldrás en la portada de Emezeta.


Artículo de http://www.emezeta.com/

10 consultas efectuadas / Página generada en 0.041 segundos

Programado íntegramente por José Román (Manz) en XHTML y CSS estándar.

Sindicado bajo Feed RSS. Contenido bajo licencia Creative Commons

Estadísticas de visitas · Términos y condiciones · Contacto · Publicidad · Preguntas frecuentes (FAQ)