El scraping masivo puede poner en jaque el rendimiento y la seguridad de tu servidor web. Herramientas automatizadas como Scrapy, curl
, o python-requests
suelen utilizarse para recolectar contenido de forma no autorizada. Sin embargo, no todos los bots son maliciosos: Googlebot, por ejemplo, debe poder acceder para el SEO. Este artículo detalla cómo bloquear bots abusivos sin afectar a los rastreadores legítimos, aceptando un conjunto ampliado de IPs verificadas de Google.
✅ Para OpenLiteSpeed y Apache: .htaccess
avanzado
# Recomendaciones para bloquear bots que saturan tu web
# Cortesía de https://wpdirecto.com y https://administraciondesistemas.com
RewriteEngine On
# Bloquear User-Agent vacío
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteRule ^.* - [F,L]
# Bloquear agentes de scraping conocidos
RewriteCond %{HTTP_USER_AGENT} (scrapy|httpclient|python-requests|curl|wget|libwww|httpunit|nutch) [NC]
RewriteRule ^.* - [F,L]
# Bloquear HEAD y OPTIONS (opcionales)
RewriteCond %{REQUEST_METHOD} ^(HEAD|OPTIONS)$
RewriteRule ^.* - [F,L]
# Permitir solo Googlebot desde IPs válidas conocidas
RewriteCond %{HTTP_USER_AGENT} "Googlebot" [NC]
RewriteCond %{REMOTE_ADDR} !^66\.249\.
RewriteCond %{REMOTE_ADDR} !^192\.178\.
RewriteCond %{REMOTE_ADDR} !^34\.(100|101|118|126|147|151|152|154|155|165|175|176|22|64|65|80|88|89|96)\.
RewriteRule ^.* - [F,L]
Lenguaje del código: Apache (apache)
📌 Importante: asegúrate de tener habilitado el uso de
.htaccess
y reinicia el servicio tras aplicar cambios.
✅ Para Nginx: configuración segura en nginx.conf
server {
...
# Bloquea User-Agent vacío
if ($http_user_agent = "") {
return 403;
}
# Bloquea agentes de scraping
if ($http_user_agent ~* (scrapy|httpclient|python-requests|curl|wget|libwww|httpunit|nutch)) {
return 403;
}
# Solo permite Googlebot desde rangos IP válidos
if ($http_user_agent ~* "Googlebot") {
if ($remote_addr !~ ^66\.249\. &&
$remote_addr !~ ^192\.178\. &&
$remote_addr !~ ^34\.(100|101|118|126|147|151|152|154|155|165|175|176|22|64|65|80|88|89|96)\.) {
return 403;
}
}
...
}
Lenguaje del código: PHP (php)
🧪 Verifica el bloqueo
Ejecuta:
curl -A "Scrapy/2.9.0 (+https://scrapy.org)" -I https://wpdirecto.com
Lenguaje del código: JavaScript (javascript)
Y deberías obtener:
HTTP/1.1 403 Forbidden
Lenguaje del código: HTTP (http)
🧩 Recomendaciones extra
- ModSecurity (Apache/OpenLiteSpeed): Reglas automatizadas contra bots.
- Cloudflare WAF: Puedes implementar bloqueos de User-Agent desde la capa CDN.
- Iptables: Para reglas a nivel de red si los intentos persisten.
- Logs de acceso: Revisa IPs, patrones y nuevos User-Agents para ampliar protección.
Ese código lo que hace tambien, es bloquear las respuestas de los pedidos de redsys.
Lo habia aplicado en 3 ecommerce y lo he tenido que modificar, por esta linea requests|curl|wget|libwww|httpunit|nutch|java) [NC]
Bloque con 403.
Un saludo.
Gracias por el apunte Ángel, hemos quitado en el ejemplo la referencia a Java para evitar ese problema para futuros usuarios que lo copien.