Saltar al contenido principal

No desperdicies los recursos de tu servidor: bloquea bots no deseados con Nginx

· 4 min de lectura
Customer Care Engineer

block-unwanted-bots-using-nginx

Los bots de motores de búsqueda (crawlers) son programas especiales que escanean sitios web en Internet. Los motores de búsqueda los necesitan para encontrar, indexar y mostrar páginas en los resultados de búsqueda. ¡Pero no todos los bots son útiles!

A veces, tu sitio puede ser visitado por bots no deseados que:

  • Recopilan datos sin tu permiso.
  • Consumen recursos del servidor, ralentizándolo.
  • Se utilizan para buscar vulnerabilidades.

Si quieres proteger tu sitio de este tipo de bots, ¡es hora de configurar Nginx! En este artículo, te mostraremos cómo bloquearlos de forma fácil y rápida utilizando un archivo de configuración especial.


¿Por qué usar la configuración de Nginx en lugar de robots.txt?

El archivo robots.txt es una herramienta para gestionar el comportamiento de los bots de búsqueda. Les indica qué partes del sitio no deben ser rastreadas. Es muy fácil usar este archivo: simplemente crea uno en el directorio raíz del sitio, por ejemplo:

User-agent: BadBot  

Disallow: /  

Sin embargo, hay un problema: las instrucciones en robots.txt son una recomendación más que una regla impuesta. Los bots concienzudos siguen las instrucciones de este archivo, pero la mayoría de los bots simplemente lo ignoran.

Por el contrario, configurar Nginx te permite bloquear físicamente el acceso para bots no deseados, garantizando un resultado 100% efectivo.


Cómo Nginx bloquea bots no deseados: usando la respuesta 444

A diferencia de robots.txt, que solo proporciona recomendaciones a los bots, Nginx bloquea físicamente su acceso. Una forma de lograr esto es usando una respuesta especial del servidor con el código 444.

En Nginx, el código de respuesta 444 es un método interno para terminar la conexión con el cliente sin enviar ninguna respuesta. Este es un enfoque eficiente para ignorar solicitudes no deseadas y minimizar la carga del servidor.


Configuración del bloqueo

Paso 1: ¿Cómo identificar bots no deseados?

Los bots no deseados se pueden identificar por su User-Agent, que es un parámetro enviado por todos los clientes al visitar tu sitio. Por ejemplo, algunos User-Agents podrían verse así:

    AhrefsBot     SemrushBot     MJ12bot

Puedes encontrar valores de User-Agent sospechosos en el registro de acceso de Nginx (si tu sitio usa PHP-FPM):

sudo grep -i bot /var/log/nginx/access.log

O en el registro de acceso de Apache (si tu sitio usa el módulo de Apache o FastCGI como manejador de PHP):

  • Para Ubuntu/Debian:
sudo grep -i bot /var/log/apache2/access.log
  • Para CentOS/AlmaLinux/RockyLinux:
sudo grep -i bot /var/log/httpd/access.log

Si estás utilizando un panel de control como FASTPANEL, cada sitio tendrá su propio archivo de registro separado. Puedes analizarlos individualmente o todos a la vez usando un comando como:

  • Si tu sitio usa el módulo de Apache o FastCGI como el manejador de PHP:
sudo cat /var/www/*/data/logs/*-backend.access.log |  grep -i bot | tail -500
  • Si tu sitio usa PHP-FPM:
sudo cat /var/www/*/data/logs/*-frontend.access.log |  grep -i bot | tail -500

Este comando mostrará las últimas 500 solicitudes realizadas a todos tus sitios donde el parámetro User-Agent contiene la palabra “bot.” Un ejemplo de una línea (una solicitud a tu sitio) podría verse así:

IP - [03/Nov/2022:10:25:52 +0300] "GET link HTTP/1.0" 301 811 "-" "Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; [email protected])"

o

IP - [24/Oct/2022:17:32:37 +0300] "GET link HTTP/1.0" 404 469 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"

El User-Agent del bot se encuentra entre los segmentos “compatible;” y “/version.number“ al final de la línea de solicitud entre paréntesis. Entonces, en los ejemplos anteriores, los User-Agents son: BLEXBot y DotBot.

Analiza la información que recopiles y anota las cadenas de User-Agent de los bots más activos para el siguiente paso de configuración del bloqueo.

Paso 2: Crear un archivo para bloquear bots

  1. Conéctate a tu servidor a través de SSH.
  2. Antes de realizar cambios, asegúrate de que tu configuración actual de Nginx no tenga errores:
nginx -t

Si todo está bien, verás:

nginx: la sintaxis del archivo de configuración /etc/nginx/nginx.conf es correcta

nginx: la prueba del archivo de configuración /etc/nginx/nginx.conf es exitosa

Si hay algún error, revísalos y corrígelos en el archivo indicado por los mensajes de error.

  1. Crea un archivo separado que enumere los bots a bloquear:
sudo nano /etc/nginx/conf.d/block_bots.conf

Agrega el siguiente código al archivo:

    map $http_user_agent $block_bot {

        default 0;

        ~*AhrefsBot 1;

        ~*SemrushBot 1;

        ~*MJ12bot 1;

    }



    server {

        if ($block_bot) {

            return 444;

        }
    }

Aquí creamos un mapa que determina qué bots deben ser bloqueados.

Siguiendo este patrón, enumera las cadenas de User-Agent de los bots que deseas bloquear. Debes listar cada bot en una nueva línea y colocar un punto y coma ; al final de cada línea como delimitador.

Una vez que termines de construir tu lista, presiona "Ctrl + O" en tu teclado para guardar el archivo, luego "Ctrl + X" para salir del editor nano.

Paso 3: Aplicar los cambios

Después de realizar tus cambios, siempre prueba la configuración de Nginx para verificar su corrección y asegurarte de que no haya errores de sintaxis:

sudo nginx -t

Si todo está bien, verás:

nginx: la sintaxis del archivo de configuración /etc/nginx/nginx.conf es correcta

nginx: la prueba del archivo de configuración /etc/nginx/nginx.conf es exitosa

Si hay errores, revisa la salida para identificarlos y corregirlos en el archivo especificado.

Luego, recarga la configuración de Nginx para aplicar los cambios:

sudo systemctl reload nginx

En el futuro, si necesitas agregar más bots al archivo block_bots.conf, deberás repetir este paso cada vez.


Conclusión

¡Ahora sabes cómo bloquear fácilmente bots de búsqueda no deseados en tu servidor usando Nginx! Mantén un ojo en tus registros y agrega nuevas líneas al archivo de configuración block_bots.conf según sea necesario.

Asegúrate de bloquear solo bots maliciosos para no impedir que motores de búsqueda útiles como Google o Bing indexen tu sitio.