F5 ltm 1600 Irules: Cerrando conexiones con http 1.0 y keepalived

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”

 

 

 

 

 

F5 Diferencias TCL entre versión 11.2.1 y 11.3

Comparador !

En 11.2.1, el operador !, sirve para

if  { ([HTTP::method] eq "POST") and
! (  [HTTP::header SOAPAction]  eq ""  ) }

 

En 11.3, lo tenemos que sustituir por:

if { ([HTTP::method] eq "POST") and
( [HTTP::header SOAPAction] ne "" ) }

Toda la información de los operadores en TCL (irule) está en la página de F5.

String map para quitar el identificador de vlan

Se puede quitar varios identificadores de vlan a la vez, con un único map:

# Remove vlan identifier
set my_client_ip [string map { "%123" "" "%512" "" } [IP::remote_addr]]

Depuración Errores TCL

grep -i  "tcl error"  ltm | cut -d' ' -f12-26 |uniq