SetEnvIfNoCase user-agent

En el post que escribí sobre el archivo robots.txt te di una idea sobre la cantidad aproximada de User-Agent que existen y la razón por la que debes bloquear cierto tipo de User-Agent.

Ahora en esta entrada te muestro otra alternativa que puedes implementar en tu .htaccess para bloquear esos bot indeseables que son de mala reputación.

Por lo general cuando queremos bloquear un User-Agent para que no visite nuestra web el método habitual seria editando el fichero Robots.txt y escribiendo una nueva linea identificando al bot que queremos que no rastree nuestra web, por ejemplo:

User-agent: Baiduspider
Disallow: /

Pero ya sabemos que algunos rastreadores web ignoran por completo esta solicitud en el fichero robots.txt, por lo que la manera más confiable de bloquear el User-Agent es editando el fichero .htaccess en su lugar.

Este año los raspadores y los bots que se comportan mal parecen estar de moda.  Si bien será muy difícil bloquearlos a todos, puedes hacer mucho para evitar que la mayoría estos raspadores recojan su sitio.

Este artículo supone que ya está familiarizado con la funcionalidad básica de WordPress y con la edición de ficheros en su hosting.

Los fragmentos a continuación te mostrarán cómo bloquear User-Agent utilizando la dirección IP y la cadena SetEnvIfNoCase.

Bloqueo por dirección IP.

Puede bloquear direcciones IP específicas en .htaccess fácilmente utilizando el siguiente código:

Order allow, deny
Deny from 123.123.123.123
Allow from all

Order Allow,Deny Simplemente significa que si el servidor web tiene una solicitud que coincida con la regla Denegar, la rechazará. Si no coincide con la regla Denegar, entonces lo permitirá.

deny from xxx.xxx.xxx.xxx. Le dice al servidor que rechace cualquier solicitud de esa IP y que emita un mensaje de Prohibido en lugar de la página web  solicitada.

Puede bloquear más direcciones IP añadiendo más lineas Deny from, obviamente siguiendo la secuencia denegar, de las líneas en su .htaccess.

Esta tipo de bloqueo es mucho más radical así que debes estar completamente seguro antes de añadir algo como esto, y no cometer un error de bloquear por ejemplo una IP de Google que pueda afectar tu SEO.

Habría que decir también que, hay varias maneras de bloquear IP con el fichero .htaccess aquí te muestro otros ejemplos:

Bloqueo de dos direcciones IP especificas

Cuando no queremos que el .htaccess se tan largo, podemos ahorrar algo de espacio añadiendo la regla en una sola linea.

# block dos direcciones IP en una sola linea 
deny from 99.58.47.66 11.22.37.47

Puedes bloquear tantas direcciones IP en una sola linea como quieras, solo debes escribir la IP y dejar un espacio entre ellas.

También puedes usar el método anterior para permitir el acceso a direcciones IP especificas.

# permitur acceso a dos direcciones IP
allow from 157.55.39.102 66.249.65.221

Bloquear rango de IP por numero CIDR

A veces el atacante posee una IP que está incluida en un rango de direcciones especificado en un bloque CIDR (Classless Inter-Domain Routing) y puede utilizarlas todas.

Pongamos por caso que, estas bloqueando una nueva dirección IP en tu .htaccess y te das cuentas que has estado añadiendo direcciones IP que empiezan con los mismos números, elige una de ellas para realizar una consulta Whois.

En los resultados de la consulta Whois encontraras el valor del bloque CIDR que representa a esa direccion IP asociada a esa red en particular, para denegarle el acceso a todas las IP que utiliza el mismo atacante que comprenden ese rango, un modo muy útil es bloquear mediante CIDR, implementando la siguiente regla en el .htaccess.

Un ejemplo muy genérico de bloqueo por CIDR, cambia los números a los que quieras bloquear:

# bloquear acceso de IPs por CIDR
<Limit GET POST PUT>
order allow,deny
allow from all
Deny from 10.1.0.0/16
Deny from 80.0.0/8
</Limit>

Recuerda cambiar el rango IP CIDR a las que quieras bloquear.

Bloquear rango de IP por «truncado de digitos»

De manera semejante al punto anterior, puedes bloquear un rango de direcciones IP completo «truncando dígitos» hasta que aparezca el IP buscado.

Por ejemplo, esta dirección IP 217.147.169.238 es una dirección IP específica y única, por cierto pertenece a Ucrania y de hecho es una IP que tuve que bloquear por constantes intentos de ataque a mi sitio web.

Volviendo al tema, si quitamos los últimos dígitos (238) de la dirección IP en el .htaccess, cualquier IP que comience con el resto de números, o sea, que 217.147.169 vale para;

217.147.169.1
217.147.169.2
217.147.169.3
217.147.169.4
217.147.169.5…Y así sucesivamente, sera bloqueada. Teniendo en cuenta que una direccion IP se lee de izquierda a derecha.

Y si todavía queremos ser más restrictivos, quitando otros decimales a la dirección IP, el rango de bloqueo se amplía a cualquier dirección IP que empiece con 217.147.xxx.xxx así que estaríamos bloqueando 65.536 posibles direcciones IP.

Y si que queremos ser aún más restrictivos siguiendo esta lógica quitando decimales es posible bloquear todo un rango de direcciones IP a distintos grados de necesidad.

Sirva de ejemplo (modelo):

# bloquear rango de IP por truncado numeros
<Limit GET POST PUT>
order allow,deny
allow from all
deny from 217.147.169.238
deny from 217.147.169.*
deny from 217.147.*.*
deny from 217.*.*.*
</Limit>

Bloqueo de bots por SetEnvIfNoCase User-Agent

Utilizando la directiva SetEnvIfNoCase de Apache en tu fichero .htaccess se puede decir que es una forma fácil de bloquear los User-Agent.

La cual consiste en establecer una variable de entorno llamada bad_bot que tendrá un valor o condición bad_bot en el caso que la petición a nuestro sitio web provenga de un User-Agent especifico.

Entonces, digamos que queremos bloquear algunos bots implementamos el siguiente fragmento:

# Block Bad Bots & Scrapers

SetEnvIfNoCase User-Agent "^Xenu" bad_bot
SetEnvIfNoCase User-Agent "^Zeus" bad_bot
SetEnvIfNoCase User-Agent "ZmEu" bad_bot
SetEnvIfNoCase User-Agent "^Zyborg" bad_bot

#  Escáneres de vulnerabilidad
SetEnvIfNoCase User-Agent "Acunetix" bad_bot
SetEnvIfNoCase User-Agent "FHscan" bad_bot

# Motor de búsqueda chino agresivo
SetEnvIfNoCase User-Agent "Baiduspider" bad_bot

# Motor de búsqueda ruso agresivo
SetEnvIfNoCase User-Agent "Yandex" bad_bot

Order Allow,Deny
Allow from all
Deny from env=bad_bot

La ultima linea Deny from env=bad_bot, declara que, cada condición que termine con bad_bot se le emitirá un error 403 Forbidden, el cual como mencionaba deniega el acceso a nuestro sitio web a aquellas peticiones cuyo casos se cumpla la condición bad_bot.

El anterior fragmento de código es solo un ejemplo de como se implementa la directiva SetEnvIfNoCase, no es una lista completa de la cantidad de malos bots que existen.

Puedes incluir los que están en esta lista que se mantiene en GitHub bad-bot-blocker, también puedes revisar esta otra lista para tomar algunos nombres de User-Agent e incluirlos en tu .htaccess con la directiva SetEnvIfNoCase.

Importante: Recuerda realizar una copia de seguridad de tu fichero .htaccess, antes de realizar algún cambio.

Si causas un error interno en el servidor puedes revertirlo utilizando el archivo .htaccess original o simplemente eliminando la lineas donde escribiste nuevas reglas.

Conclusión

Existen muchos plugins que puedes instalar y activar con pocos clic los cuales te permiten hacer lo mismo y evitar estas ediciones.

Pero soy creyente de DIY (Do It Yourself) que traducido a nuestro idioma ‘Hazlo tu mismo‘, al hacerlo de forma manual editando el fichero .htaccess puedes bloquear de forma efectiva IP y User-Agent con mayor eficiencia y rendimiento para la web, recuerda que instalar muchos plugins en tu instalación de WordPress no es muy recomendable sobre todo si estas en un plan de hosting compartido.

Similar Post