Rate limiting por dirección IP: cómo diseñar límites en entornos con IP compartidas
Aplicar rate limiting por dirección IP no es trivial cuando muchas personas comparten la misma IP. En este artículo vemos cómo diseñar límites más sólidos frente a proxies, VPN y NAT.
El rate limiting es un mecanismo de defensa esencial para proteger aplicaciones web y API frente a abusos, agotamiento de recursos y ataques de denegación de servicio. El enfoque más sencillo, y también el más habitual, consiste en contabilizar las solicitudes por dirección IP. Sin embargo, este modelo se queda corto muy rápido ante una realidad de red cada vez más común: las IP compartidas.
Las IP compartidas están en todas partes: NAT corporativos, redes de operadores móviles, Wi-Fi públicas, VPN, proxies y nodos de salida de TOR. Confiar únicamente en la IP de origen para identificar a un usuario o una entidad acaba provocando dos problemas: bloquear a usuarios legítimos (falsos positivos) o permitir que atacantes más sofisticados esquiven los límites rotando entre IP compartidas (falsos negativos).
En este artículo repasamos estrategias para diseñar límites de uso más resistentes en entornos con IP compartidas, yendo más allá del simple recuento por IP /32 o /128.
El problema de fondo: dirección IP != usuario
Durante años, una dirección IP solía estar bastante asociada a un único usuario, o a un pequeño grupo de usuarios detrás de un NAT estático. Hoy, esa suposición ya no se sostiene:
- Operadores móviles: Miles, o incluso decenas de miles, de usuarios pueden compartir una única dirección IPv4 pública mediante Carrier-Grade NAT (CGNAT).
- Redes corporativas: Las grandes organizaciones suelen concentrar todo el tráfico saliente en un conjunto reducido de IP públicas.
- Wi-Fi públicas/hotspots: Muchos usuarios se conectan al mismo tiempo a través de una única IP de pasarela.
- Proxies, VPN, TOR: Estos servicios agrupan deliberadamente a múltiples usuarios detrás de IP compartidas por motivos de privacidad o para eludir restricciones. Los atacantes los aprovechan para ganar anonimato y repartir la carga entre muchas IP.
- Proveedores cloud/centros de datos: Las cargas de trabajo que se ejecutan en entornos cloud o data centers suelen originarse desde rangos de IP amplios y conocidos, compartidos por numerosos clientes.
Cuando un gran número de usuarios legítimos comparte una IP, un límite simple por IP se activa enseguida y termina bloqueándolos a todos. En el caso contrario, un atacante puede rotar entre un conjunto de IP de proxy, cada una aparentemente por debajo del umbral, y superar en conjunto el límite que se quería imponer.
Más allá de la IP: enriquecer las señales del rate limiting
Para construir límites más robustos, conviene incorporar señales adicionales además de la IP de origen inmediata.
1. Identificadores centrados en el usuario
Cuando sea posible y tenga sentido, asocia los límites a un ID de usuario en lugar de depender solo de la IP. Es el enfoque ideal para acciones autenticadas.
- ID de sesión/cookie: Controla las solicitudes por sesión. Esto ayuda a identificar acciones repetidas desde el mismo
