28 Mar 23
El rate limit es el término anglosajón que se utiliza en la jerga técnica para limitar el número de peticiones HTTP que recibe un sitio web o una API en un periodo de tiempo determinado. Se conoce también como rate limiting o throttling. Esta restricción puede estar basada en la dirección IP del cliente (en Transparent Edge, la cabecera True-Client-IP), una cookie, una URL o cualquier otra opción que tenga sentido para tu site.
Limitar el tráfico sirve para bloquear usuarios o aplicaciones que están haciendo un uso excesivo de la plataforma y pueden, por ende, poner en riesgo la disponibilidad de los recursos y la seguridad de la web. Esto incluye la detección de determinados ataques de bots maliciosos que aumentan la presión sobre los servidores web.
El rate limit es fundamental para asegurar la continuidad del servicio. Además, ayuda a mitigar ataques de fuerza bruta y ataques de credential guessing. También evita sobrecostes a las empresas en las infraestructuras cloud. Durante nuestros ejercicios de pentest, de hecho, hemos detectado riesgos que habrían podido llevar a empresas a cerrar debido a esta ausencia de control.
No existe una cifra de referencia, ya que el tráfico no es igual para una página institucional que para la portada de un diario deportivo.
Nuestra recomendación es fijar un límite sobre el registro de tráfico habitual, evitando ser demasiado restrictivos para no dejar fuera a personas que están haciendo un uso responsable de la página.
Además, conviene revisar la regla si se prevé algún pico de tráfico como podría ser el periodo de rebajas para un e-commerce.
Twitter establece una tasa de uso responsable para aliviar la carga de su infraestructura. Sus límites incluyen acciones de todos los dispositivos, incluida la API. Si un usuario utiliza varias aplicaciones de terceros en su cuenta, como un software de gestión de contenidos, alcanzará el límite de forma más rápida que un usuario que solo accede desde la API oficial.
Precisamente, hace unos meses conocíamos el bloqueo de Tweetbot por incumplimiento de reglas de uso de la API de Twitter.
En el WAF de Transparent Edge, el rate limit se invoca en nuestro panel a través de TCDN-Command; así, debemos incluir el valor limit_rate
junto con el conjunto de parámetros, separados por el caracter dos puntos (:
).
limit_rate:<nombre>:<límite>:<periodo>[:<tiempo de bloqueo>][:captcha]. <nombre>
<límite>
determina el número máximo de peticiones que se aceptarán dentro del <periodo>
indicado. <tiempo de bloqueo>
y captcha son parámetros opcionales que nos van a permitir, respectivamente, establecer la duración durante la cual se denegarán peticiones una vez alcanzado el límite establecido y mostrar un CAPTCHA cuando este límite sea alcanzado.
Por ejemplo, si queremos limitar cada usuario a un máximo de 20 peticiones por segundo, discriminando este por su dirección IP y, una vez alcanzado dicho límite, bloquear dicho usuario durante 30 segundos y obligarle a validar un CAPTCHA, nos bastará con desplegar desde el panel una configuración VCL similar a esta:
# limit_rate
sub vcl_recv {
if (req.http.host == "www.mi-dominio.es") {
set req.http.TCDN-Command = "limit_rate:" + req.http.True-Client-IP + ":20:1s:30s:captcha";
}
}
De este modo, una vez alcanzado el límite fijado, las sucesivas peticiones del usuario afectado darán como respuesta bien un status code 429 (Too Many Requests) o bien un 418 (Robots are not allowed here!), si la validación del CAPTCHA hubiese sido incorrecta.Este es solo un pequeño ejemplo de la función rate limit, pero las posibilidades son muy variadas. Se puede considerar un límite por cuota de uso de peticiones por periodo por API key o permitir solo unas pocas peticiones POST o PUT por usuario, entre otras.