Clicky

Bloquea los bots no deseados en tu sitio utilizando .htaccess

bad bot araña

Los bad bots van navegando por Internet para realizar tareas de espionaje para spammers o hackers

Bots, la abreviatura de robots (o motores de búsqueda), son programas informáticos que navegan (surf) por sitios web en todo Internet y metódica y automáticamente realizan tareas específicas. Como casi todo lo demás en Internet, hay buenos y malos bots.

Otros términos para los rastreadores web son hormigas (ant), indizadores automáticos, bots o arañas web (web spiders), robots web o - especialmente en la comunidad FOAF - Web scutters. El proceso que llevan a cabo se llama rastreo web o simplemente rastreo.

Un rastreador web es un tipo de bot, o agente de software. En general, se comienza con una lista de URL para visitar, llamada las semillas.
A medida que el rastreador visita estas direcciones URL, identifica todos los hipervínculos de la página y los agrega a la lista de URL para visitar, llamada la frontera de rastreo. URL de la frontera son visitados de forma recursiva de acuerdo con un conjunto de políticas.

En este artículo vamos a discutir cómo se puede bloquear a usuarios o bots no deseados para que no tengan acceso a tu sitio web mediante unas reglas en el archivo .htaccess . El archivo .htaccess es un archivo oculto en el servidor que se puede utilizar para controlar el acceso a tu sitio web, entre otras funcionalidades.

Siguiendo los pasos a continuación vamos a ver varias formas diferentes con las que podemos bloquear a usuarios (bad bots) no deseados de poder acceder a tu sitio web.

Cómo llegar a tu archivo .htaccess

Desde cPanel:

1) Accede a tu cPanel.
2) En la sección Archivos (Files), haz clic en Administrador de archivos (File Manager).
3) Selecciona la opción Raíz del documento para: (Dociment Root for:) y elije tu dominio desde el menú desplegable.
4) Asegúrese de que se selecciona Mostrar archivos ocultos.
5) Luego haz clic en Go (Ir).

administrador de archivos ocultos, buscar .htaccess

6) Haz clic derecho en el archivo .htaccess y selecciona Editar (Edit).

editar archivo .htaccess

7) Si en el paso anterior no existiera un archivo .htaccess, haz clic en Nuevo archivo (New File) en la parte superior izquierda, escribe el nombre del archivo .htaccess y, finalmente, establece el directorio para el archivo que se creará en /public_html/ o la raíz del documento de tu sitio.

crear archivo .htaccess

8) Es posible que tengas un cuadro de diálogo emergente para ver la codificación con un editor de texto, sólo tienes que hacer clic en Editar (Edit).

Desde un cliente FTP:

Accede al directorio raíz de tu sitio con tu cliente de FTP y edita o crea el archivo .htaccess, igualmente que hemos visto en los pasos anteriores:

editar el archivo .htaccess desde un cliente FTP

Incluye reglas en el archivo .htaccess

Ahora que has abierto tu archivo htaccess y está listo para editar, puedes utilizar uno de los siguientes tipos de bloques:

1) Bloquear una sola dirección IP

deny from 123.123.123.1

2) Bloquear un rango de direcciones IP

Puedes dejar fuera los últimos octetos de una dirección IP para bloquear todo en ese rango, el siguiente ejemplo bloquearía desde 123.123.123.1 a 123.123.123.255

deny from 123.123.123

También puedes utilizar la notación CIDR (Classless Inter-Domain Routing) para las IPs. Así, por ejemplo [123.123.123.0/24] bloquearía el rango 123.123.123.1 - 123.123.123.255, y [123.123.123.0/18] bloquearía el rango 123.123.64.1 - 123.123.127.255

deny from 123.123.123.0/24

3) Bloquea los malos bots basados "‹"‹en su cadena de agente de usuario:

El siguiente código activa el RewriteEngine de Apache, entonces la siguiente línea de mira a la cadena de agente de usuario de una solicitud. En este caso, si se mencionan alguna de las palabras BaiDuSpider, HTTrack o Yandex en cualquier parte de la cadena luego pasas a la orden RewriteRule que simplemente toma la solicitud original y la convierte en una respuesta 403 con el código de redirección R=403:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|HTTrack|Yandex).*$ [NC]
RewriteRule .* - [R=403,L]

4) Otra forma de bloqueo que yo utilizo es la siguiente:

### block bad bots
Options All -Indexes
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^$ [OR] # Esto es para los agentes de usuario en blanco
RewriteCond %{HTTP_USER_AGENT} ^spider$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^robot$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^crawl$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(.*)AhrefsBot(.*) [OR]
RewriteCond %{HTTP_USER_AGENT} ^AhrefsBot/5.0 [OR]
RewriteCond %{HTTP_USER_AGENT} ^discovery$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} 360Spider [OR]
RewriteCond %{HTTP_USER_AGENT} Ezooms/1.0 [OR]
RewriteCond %{HTTP_USER_AGENT} MJ12bot/v1.4.4
RewriteRule ^(.*)$ http://no.access/  ### una URL que no existe
#######

5) Sólo prohibir a bots malos sin agente de usuario utilizando Rewrite (POST):

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule .* - [F]

6) Otra fórmula puede utilizar la variable SetEnvIfNoCase :

Options All -Indexes
RewriteEngine on

# Block Bad Bots & Scrapers
SetEnvIfNoCase User-Agent "Aboundex" bad_bot
SetEnvIfNoCase User-Agent "80legs" bad_bot
SetEnvIfNoCase User-Agent "360Spider" bad_bot
SetEnvIfNoCase User-Agent "^Java" bad_bot
SetEnvIfNoCase User-Agent "^Cogentbot" bad_bot
SetEnvIfNoCase User-Agent "^Alexibot" bad_bot
SetEnvIfNoCase User-Agent "^asterias" bad_bot
SetEnvIfNoCase User-Agent "^attach" bad_bot
SetEnvIfNoCase User-Agent "^BackDoorBot" bad_bot
SetEnvIfNoCase User-Agent "^BackWeb" bad_bot
SetEnvIfNoCase User-Agent "Bandit" bad_bot
SetEnvIfNoCase User-Agent "^BatchFTP" bad_bot
SetEnvIfNoCase User-Agent "^Bigfoot" bad_bot

<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>

Existen listas muy completas de bat bots en Internet, como Git bad-bot-blocker, List of User-Agents (Spiders, Robots, Crawler, Browser), Ultimate htaccess Blacklist, Bad bot list, Bots vs Browsers - database of 1,376,507 user agents and growing.

Si quieres analizar un User Agent en concreto pega la respuesta de tu log en esta página: User Agent String explained

Bloquear temporalmente malos bots

En algunos casos, puede que no desees enviar una respuesta 403 a un visitante que es sólo un mensaje de acceso denegado. Un buen ejemplo de esto es cuando tu sitio está recibiendo un gran pico en el tráfico durante el día, de una promoción que estás ejecutando, y no quieres que entren algunos robots buenos de motores de búsqueda como Google o Yahoo y que empiecen a indexar tu sitio al mismo tiempo que tu puedes estar haciendo hincapié en el servidor con el tráfico adicional.

La siguiente configuración de código da una página de documento de error básico con una respuesta 503, este es el modo por defecto de decir a un motor de búsqueda que tu petición está bloqueada temporalmente y debe acceder de nuevo en un momento posterior. Esto es diferente a lo anterior, negándoles el acceso temporal a través de una respuesta de 403, al igual que con una respuesta 503 Google ha confirmado que volverá y tratar de indexar la página de nuevo en vez de dejarla caer de su índice.

En el siguiente código se coge cualquier solicitud del user-agents del bot que contenga palabras como bot, crawl o spider, con las que coincidirán la mayoría de los principales motores de búsqueda. La segunda línea de RewriteCond permite que estos bots sigan solicitando un archivo robots.txt para comprobar si hay nuevas reglas, pero algunas otras peticiones simplemente obtiene una respuesta 503 con el mensaje "Sitio inhabilitado temporalmente para el rastreo".

ErrorDocument 503 "Sitio inhabilitado temporalmente para el rastreo"
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(bot|crawl|spider).*$ [NC]
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule .* - [R=503,L]

Este es un buen método si notas algunos nuevos robots rastreando tu sitio que provocan excesivas solicitudes y deseas bloquearlos o aminorar su velocidad de rastreo a través del archivo robots.txt. Le dejaremos 503 a sus peticiones hasta que lean sus nuevas reglas de robots.txt y comience a obedecerlas (el bot no recoge los cambios en robots.txt de inmediato, por lo general le puede tomar hasta una semana). Entonces, en el archivo robots.txt deberíamos tener algo como esto:

# block bad bots
User-agent: duggmirror
disallow: /
User-agent: AhrefsBot
disallow: /
User-agent: Wget
disallow: /
User-agent: MJ12bot/v1.4.4
disallow: /
User-agent: 360Spider
disallow: /

Ahora deberías saber cómo utilizar un archivo .htaccess para ayudar a bloquear el acceso a tu sitio web en múltiples formas.

Bonus: Si quieres bloquear algún dominio, por la causa que sea, puedes utilizar éstas sentencias:

#Bloquear dominios - añadir una línea por cada uno
RewriteCond %{HTTP_REFERER} czepvcib\.com [NC]
RewriteRule .* - [F]

Jesus_Caceres