BGP FlowSpec

Qué es BGP FlowSpec

A nivel muy alto podemos decir que BGP Flowspec mecanismo que permite centralizar las políticas de control de tráfico.

Se pueden controlar las políticas de tráfico:

  • control de acceso o reglas de firewall
  • reglas de filtrado de rutas
  • rate limite de tráfico
  • reglas de marcado de qos

La idea es que en vez de configurar una regla de firewall en todos los dispositivos podamos defirnirla en un único punto y que utilizando BGP esta política se distribuya por toda la infraestructura.

La idea general es que esto funciona de una forma similar a una SDN donde tenemos un contolador y clientes. También tenemos que tener en cuenta que esto sólo afecta a tráfico entrante.

La definición de flow la verdad es que es, bajo mi punto de vista, poco clara.
“Una especificación de flujo es una n-tupla consitente en varios criterios que tienen que hacer match y que se pueden aplicar al tráfico IP” – RFC 5575

n-tupla: es una colección de elementos, en concreto n elementos.
(p.e. ip origen, ip destino, protocolo) -> Esto es una n-tupla donde n==3
(p.e. ip origen, ip destino, protocolo, puerto) -> Esto es una n-tupla donde n==4

En este caso deben de coincidir absolutamente todos los elementos en la tupla.

Estas reglas la gracia que tienen es que utilizan BGP para diseminarse por la red. Para hacer esto ha sido necesario definir un nuevo NLRI, igual que con evpn tal y como comentamos en el útlimo capítulo.
Vamos a definir un par de SAFIs, uno para BGP flowspect en el contexto global (Global Unicast) y que será el SAFI 133. Otro SAFI para cuando BGP flowspect se ejecute en el contexto de una VRF (L3VPN Unicast), este será el SAFI 134.

  • AFI: Address Family Indicator
  • SAFI: Subsequent Address Family Indicator.

En el caso del NLRI (Network Layer Reachability Information) utilizado para BGP flowspec es flexible porque así se precisa. Cada regla puede tener diferentes campos (protocolo, puerto, marcado de qos).

Los campos se llaman componentes, los cuales se codifican como TLV (Time Lenght Value).

¿Por qué utilizar BGP para distribuir esta información?

  • Porque se distribuye muy bien en el plano de control
  • Funciona entre varios dominio
  • Se integra de maravilla con al tabla de rutas

Componentes del NLRI (https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/configuration/xe-16/irg-xe-16-book/C3PL-BGP-Flowspec-Client.html):

  • Tipo 1: Prefijo de destino
  • Tipo 2: Prefijo de origen
  • Tipo 3: Protocolo IP
  • Tipo 4: Puerto (puede llevar un puerto, varios o un rango)
  • Tipo 5: Puerto Destino (puede llevar un puerto, varios o un rango)
  • Tipo 6: Puerto Origen (puede llevar un puerto, varios o un rango)
  • Tipo 7: Tipo ICMP
  • Tipo 8: Código ICMP
  • Tipo 9: Flags TCP
  • Tipo 10: Longitud paquete
  • Tipo 11: DSCP
  • Tipo 12: Fragment

Cada NLRI necesita al menos un componente
Ningún componente es obligatorio

La acción no viene definida en el NLRI, sino que el NLRI sirve para hacer el match

Foto de cottonbro en Pexels