{
"$type": "site.standard.document",
"description": "Los bots están por todas partes. Y si empiezan a portarse mal, puedes bloquear sus agentes de usuario de tu servidor a través de la configuración de nginx.",
"path": "/es/blog/bloquear-agentes-de-usuario-en-configuracion-de-nginx/",
"publishedAt": "2024-10-05T00:00:00.000Z",
"site": "at://did:plc:3nlkmby2zllrhcj6z5dnicui/site.standard.publication/3mnr22gea2o2d",
"textContent": "Los bots están por todos lados, así como los agentes maliciosos. Indexan, rastrean, descargan... y a veces (¿la mayoría? de las veces), abusan.\n\nMás de una vez, me he topado con un aumento repentino e inesperado en consumo de CPU, RAM o algún otro recurso en servidores que administro, y tras revisar los logs de acceso, me encuentro que la causa es el acceso repetido de bots que intentan indexar el contenido de mis sitios una y otra vez.\n\nEn ocasiones, incluso, algunos plug-ins de WordPress que generan enlaces con parámetros GET únicos en cada carga de página han empeorado la situación, haciendo que estos bots entren en un bucle infinito intentando indexar cada página \"diferente\". ¡Qué desperdicio de ancho de banda y recursos de cómputo!\n\nPara ponerle fin a esto, empecé a bloquear por defecto algunos agentes de usuario (user agents), retirando su acceso a los sitios web que administro directamente desde la configuración de nginx. Esto asegura que los agentes maliciosos ni siquiera tienen la oportunidad de causar la ejecución de mis servidores o aplicaciones, ni acceder a contenido estático. Puedes seguir pasos similares o incluso usar algún otro identificador diferente a los agentes de usuario para bloquear entidades no deseadas de tu servidor.\n\n\nCREA UNA LISTA DE AGENTES DE USUARIO BLOQUEADOS #\n\nCrea un nuevo archivo en /etc/nginx con el contenido siguiente y el nombre que desees.\n\nPara este ejemplo, usaré agentes_de_usuario_bloqueados.rules:\n\nmap $http_user_agent $agente_de_usuario_bloqueado {\n # Todas las peticiones son permitidas por defecto\n default 0;\n\n # `~ejemplo` va a generar concidencias con cualquier\n # agente de usuario que tenga `ejemplo` en ella.\n # Algunos ejemplos:\n ~Amazonbot 1;\n ~openai 1;\n ~chatgpt 1;\n ~gptbot 1;\n}\n\nEsta lista puede hacerse tan corta o tan larga como necesites, y puedes cambiarla (sea para agregar o retirar agentes de usuario bloqueados) cuando lo necesites.\n\n\nBLOQUEA PETICIONES SEGÚN $AGENTE_DE_USUARIO_BLOQUEADO #\n\nAhora que cuentas con un mapa accesible de agentes de usuario, es hora de exponer esta variable a nginx y bloquear peticiones no deseadas.\n\nEn /etc/nginx/nginx.conf, agrega lo siguiente al final del bloque http:\n\nhttp {\n # Aquí el contenido usual\n # (...)\n\n # Incluye el archivo con el mapa de agentes de usuario bloqueados\n include /etc/nginx/agentes_de_usuario_bloqueados.rules;\n}\n\nPor último, edita el archivo de configuración de cada uno de tus sitios (dentro de /etc/nginx/sites-enabled/) y agregar lo siguiente dentro del bloque server, antes de empezar a redirigir las respuestas según location:\n\nserver {\n server_name aitorres.com;\n\n # Bloqueando agentes no deseados\n if ($agente_de_usuario_bloqueado) {\n # `444 No Response`, código de estatus HTTP\n # específico de `nginx`.\n # Puedes escoger otro código de estatus HTTP\n # estandar, como `404 Not Found` o `403 Forbidden`\n # de acuerdo a tus necesidades\n return 444;\n }\n\n # Resto de tu archivo de configuración, sin cambios\n}\n\nPara terminar, recarga o reinicia tu servidor nginx desde el terminal:\n\n# Asegúrate primero de que la configuración sea válida\nnginx -t\n\n# Si todo se ve bien, recarga el servidor. Puedes reiniciarlo también\nnginx -s reload\n\n¡Y listo! Tu servidor empezará a bloquear estas peticiones, y deberías ver una reducción en el consumo de recursos. Si cuentas con registro de accesos para tu servidor, puedes comprobar que las peticiones de estos agentes bloqueados aparecen con el código de estatus HTTP que agregaste.\n\nUna última nota: si modificas la lista de usuarios bloqueados posteriormente, recuerda recargar o reiniciar nginx para que lo cambios tomen efecto.\n\nEste método no es infalible ya que depende de que el bot (o el agente malicioso) use un mismo agente de usuario consistentemente, pero es un inicio y sólo toma un par de minutos en configurar. Idealmente, llegará el día en que los bots nos dejen en paz; hasta entonces... ;)",
"title": "Bloquear agentes de usuario en la configuración de nginx"
}