Restringimos el tráfico de nuestros servidores virtuales de los F5, a través de una irule de throttle.
Básicamente, guardamos una subtabla con el número de peticiones en una ventana (1 hora), y cuando sobre pasa el límite, fijamos el estado de la IP a bloqueado.
La irule, se basa en el evento: when HTTP_REQUEST.
Hemos detectado, que se nos pasaban algunas peticiones.
Los que abren conexiones http 1.0 con el flag de keepalived. Estas conexiones, sólo lanzan el evento de HTTP_REQUEST en el primer Request (get o post).
- El primer GET por la conexión, lanza el evento, y se devuelve el código de error.
- Los siguientes, ya no aplica la irule, y se sirven.
Se añade a la lógica del programa el cierre TCP, para evitar que la conexión la mantengan abierta:
HTTP::respond 403 content “RequestLimit: THROTTLED”
TCP::close
Si usamos HTTP::Close, el cierre de http es demasiado brusco, y los navegadores no devuelven el error que enviamos desde los F5. Lo que se ve es “Connection reset by server”