InfraFenceInfraFence

Live Security Operations

Empezar

Cómo bloquear los rastreadores de IA en tu servidor

Última actualización:

Las empresas de IA rastrean la web para entrenar modelos, para alimentar sus buscadores con IA y para descargar páginas cuando un usuario pregunta por ellas. En un servidor pequeño la carga ya puede ser un problema por sí sola, y muchos propietarios de sitios no quieren que su contenido se use para entrenar modelos.

Hay cuatro herramientas, y funcionan mejor juntas: robots.txt para los rastreadores que lo respetan, reglas por user agent en el servidor web para los que se identifican, DNS inverso o listas de IP publicadas para distinguir un rastreador real de uno falso, y límites de peticiones para todo lo demás. Los comandos son para nginx y Apache en Debian, Ubuntu y la familia RHEL.

Saber con qué rastreadores estás tratando

Los principales, a octubre de 2026, según la documentación de cada operador. Algunos son rastreadores; otros son solo tokens de robots.txt que controlan cómo se usan los datos de otro rastreador.

NombreOperadorQué hace
GPTBotOpenAIRastrea contenido que puede usarse para entrenar los modelos de OpenAI. Lista de IP publicada.
OAI-SearchBot, ChatGPT-UserOpenAILa búsqueda de ChatGPT y las páginas que se descargan cuando un usuario lo pide. OpenAI indica que robots.txt puede no aplicarse a ChatGPT-User.
ClaudeBot, Claude-SearchBot, Claude-UserAnthropicEntrenamiento, búsqueda y páginas descargadas para un usuario. Anthropic indica que respetan robots.txt. Lista de IP publicada.
Google-ExtendedGoogleSolo un token de robots.txt, sin user agent propio: controla el uso para el entrenamiento y el grounding de Gemini. No afecta a la Búsqueda de Google.
Applebot-ExtendedAppleSolo un token de robots.txt: controla el uso de lo que rastrea Applebot para entrenar los modelos de Apple.
CCBotCommon CrawlConstruye el conjunto de datos de Common Crawl, muy usado para entrenar modelos. Verificable por DNS inverso.
meta-externalagentMetaRastrea para usos como el entrenamiento de modelos de IA.
PerplexityBot, Perplexity-UserPerplexityLa búsqueda de Perplexity y las páginas descargadas para un usuario. Perplexity indica que Perplexity-User por lo general ignora robots.txt.

Decide según la finalidad. Bloquear los rastreadores de entrenamiento mantiene tu contenido fuera de futuros conjuntos de entrenamiento; bloquear también la búsqueda con IA y las descargas por cuenta de usuarios deja tu sitio fuera de esas respuestas, y de las visitas que generan. Para ver cuáles llegan a tu servidor, cuenta los user agents del log de accesos:

nginx (formato de log combined)
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Pedirles que no entren con robots.txt

Coloca un robots.txt en la raíz de cada host que quieras cubrir (cada subdominio tiene el suyo). Varias líneas User-agent pueden compartir una misma regla:

robots.txt
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: meta-externalagent
Disallow: /

Esta lista bloquea el entrenamiento y deja en paz la búsqueda. Añade OAI-SearchBot, Claude-SearchBot y PerplexityBot para quedarte también fuera de la búsqueda con IA. Mantén debajo tus reglas actuales para otros rastreadores, y no escribas nunca User-agent: * con Disallow: / salvo que también quieras desaparecer de Google y Bing.

Lo que robots.txt no puede hacer

  • Es una petición. Los rastreadores que lo respetan se detienen; los demás no, y nada te dice cuál es cuál.
  • Los rastreadores que actúan a petición de un usuario pueden no aplicarlo, según sus propios operadores.
  • Los cambios tardan: los operadores guardan el archivo en caché, a menudo hasta un día.
  • Un scraper que oculta su nombre o se hace pasar por un navegador no queda cubierto en absoluto.

Bloquear por user agent en nginx o Apache

El servidor web puede rechazar a los rastreadores que se identifican. Esto los detiene aunque ignoren robots.txt, siempre que mantengan su nombre.

nginx

El map va en el contexto http: los paquetes de Debian, Ubuntu y la familia RHEL incluyen ahí los archivos de /etc/nginx/conf.d/.

Cualquier distribución
sudo tee /etc/nginx/conf.d/ai-crawlers.conf > /dev/null <<'EOF'
map $http_user_agent $ai_crawler {
    default 0;
    ~*(GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) 1;
}
EOF

Después añade esto dentro de cada bloque server que deba rechazarlos, en /etc/nginx/sites-available/ en Debian y Ubuntu o en /etc/nginx/conf.d/ en la familia RHEL:

En cada bloque server { }
if ($ai_crawler) {
    return 403;
}

Prueba la configuración, recarga y comprueba: el primer curl debe devolver 403 y el segundo 200 (sustituye example.com por tu sitio).

Cualquier distribución
sudo nginx -t && sudo systemctl reload nginx
curl -s -o /dev/null -w "%{http_code}\n" -A "GPTBot/1.2" https://example.com/
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Atención: Usa patrones exactos. Un patrón como bot o Google bloquea también a Googlebot y Bingbot, y tu sitio desaparece de los buscadores. Google-Extended y Applebot-Extended no son user agents: van solo en robots.txt.

Apache

Con mod_rewrite, dentro de cada <VirtualHost> (tanto el del puerto 80 como el del 443) o en el .htaccess del sitio. Las reglas de reescritura de la configuración principal no se aplican a los virtual hosts.

En cada <VirtualHost> o .htaccess
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) [NC]
RewriteRule ^ - [F]
Debian / Ubuntu
sudo a2enmod rewrite
sudo apachectl configtest && sudo systemctl reload apache2
RHEL, Rocky Linux, AlmaLinux, Oracle Linux, Fedora
sudo apachectl configtest && sudo systemctl reload httpd

Nota: En .htaccess las reglas necesitan AllowOverride FileInfo (o All) para ese directorio. En el hosting compartido normalmente ya es así.

Verificar los bots reales por DNS inverso

Cualquiera puede enviar User-Agent: Googlebot. Los scrapers lo hacen para saltarse las reglas que dejan pasar a los buscadores. Un rastreador real se confirma con DNS inverso confirmado en sentido directo: la dirección se resuelve a un nombre del dominio del operador, y ese nombre se resuelve de vuelta a la misma dirección.

Debian / Ubuntu
sudo apt install -y bind9-host
RHEL, Rocky Linux, AlmaLinux, Oracle Linux, Fedora
sudo dnf install -y bind-utils
Cualquier distribución
ip=66.249.66.1
name=$(host "$ip" | awk '/pointer/ {print $NF; exit}' | sed 's/\.$//')
echo "$name"
host "$name" | awk '{print $NF}' | grep -qxF "$ip" && echo "confirmed" || echo "NOT confirmed"
  • Googlebot: googlebot.com o google.com. Bingbot: search.msn.com. Applebot: applebot.apple.com. CCBot: crawl.commoncrawl.org.
  • Un nombre de otro dominio, o uno que no se resuelve de vuelta a la dirección, es falso.

OpenAI, Anthropic, Perplexity y Common Crawl publican en cambio los rangos de direcciones de sus rastreadores en JSON (los enlaces están en la documentación de cada operador). Esto comprueba una dirección contra una de esas listas:

Cualquier distribución con Python 3
python3 - 20.171.207.10 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "Mozilla/5.0"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print("in the list" if any(ip in n for n in nets) else "NOT in the list")
EOF

Esas mismas listas JSON se pueden cargar en un bloque geo de nginx o en el firewall, si quieres dejar pasar solo a los rastreadores reales que usan un nombre determinado.

Limitar las peticiones de los rastreadores

Un límite de peticiones funciona se llame como se llame el rastreador, y protege el servidor de los que rastrean demasiado rápido. En nginx, esto limita a 30 peticiones por minuto, con una breve ráfaga, cada dirección cuyo user agent parece de un bot; los demás visitantes no se cuentan, porque una clave vacía no se limita.

Cualquier distribución
sudo tee /etc/nginx/conf.d/bot-limit.conf > /dev/null <<'EOF'
map $http_user_agent $bot_key {
    default "";
    ~*(bot|crawler|spider|scraper) $binary_remote_addr;
}
limit_req_zone $bot_key zone=bots:10m rate=30r/m;
limit_req_status 429;
EOF

Después, en los bloques server o location de las páginas dinámicas, y recarga como antes:

En un bloque server { } o location { }
limit_req zone=bots burst=10 nodelay;

Atención: Detrás de una CDN o de un proxy, todas las peticiones llegan desde la dirección del proxy: configura antes set_real_ip_from y real_ip_header, o el límite se aplicará a todos los visitantes a la vez. Los buscadores reducen el ritmo cuando reciben un 429, así que mantén un límite generoso.

Apache no tiene un límite de peticiones por dirección propio (mod_ratelimit limita el ancho de banda). Las opciones habituales son mod_evasive, una jail de fail2ban sobre el log de accesos, o nginx o una CDN delante.

Cuando un rastreador lo ignora todo

Si un rastreador ignora robots.txt y cambia de user agent, bloquea en el firewall las direcciones que usa (sustituye el rango de ejemplo):

Debian / Ubuntu con ufw
sudo ufw insert 1 deny from 198.51.100.0/24
Familia RHEL con firewalld
sudo firewall-cmd --permanent --zone=drop --add-source=198.51.100.0/24
sudo firewall-cmd --reload

Cómo gestiona InfraFence los rastreadores de IA

La gestión de bots de InfraFence lee los logs de acceso del servidor web y reconoce unos 1.500 bots a partir de listas públicas actualizadas a diario. Los rastreadores de IA forman una categoría propia.

  • Para cada categoría, o para un bot concreto, eliges: permitir, solo registrar o bloquear. Los cambios llegan a tus servidores en cuestión de segundos.
  • Cada bot viene con una explicación en lenguaje claro: quién lo gestiona, para qué sirve (entrenamiento, búsqueda, asistente, agente) y si declara que respeta robots.txt.
  • Cuando un bot configurado para bloquearse aparece en el log, su dirección se banea en el firewall. El baneo parte del log, así que la petición que lo delató ya ha recibido respuesta.
  • Los bots que dicen ser un buscador u otro rastreador conocido, como Googlebot, Bingbot o Applebot, se verifican con DNS inverso confirmado en sentido directo, y los falsos se notifican como suplantados.
  • Las peticiones que parecen de un bot pero no coinciden con ninguno conocido se notifican como bots desconocidos.

Los rastreadores de IA se reconocen por su user agent. Un scraper que oculta su nombre queda en manos del firewall web, que puntúa a cada visitante según lo que hace. InfraFence no modifica tu robots.txt: los pasos anteriores siguen siendo útiles junto a él.

Preguntas

¿Bloquear los rastreadores de IA perjudica mi posicionamiento en Google?
No, si bloqueas los nombres correctos. Según Google, Google-Extended en robots.txt no afecta a la Búsqueda de Google. Bloquear Googlebot, o un patrón que coincida con él, sí la afecta.
¿Basta con robots.txt?
Para los rastreadores que lo respetan, sí. No sirve de nada contra los que lo ignoran u ocultan su nombre, y por eso existen las reglas por user agent y los límites de peticiones.
¿Debo bloquear también los rastreadores de búsqueda con IA?
Depende de si quieres aparecer en las respuestas de IA. Bloquearlos deja tu contenido fuera de esas respuestas y te hace perder las visitas que generan. Muchos sitios bloquean los rastreadores de entrenamiento y permiten los de búsqueda.

Pruébalo gratis en 1 servidor

Starter es gratuito para un servidor, con protección completa y bloqueo automático. Sin tarjeta de crédito.

Instala el agente como root, con tu token en lugar de <TOKEN>:

curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>

El token se crea en el panel, en Servidores › Añadir servidor.