BGP: Filtrar por tamaño de la red en BGP, he ahí el dilema
Introducción
El equipo de I+D del área técnica y WARP redactaron en conjunto el presente artículo basado en algunos incidentes gestionados por el centro de respuestas de LACNIC.
En el mundo de BGP existen decenas de maneras para filtrar prefijos. El objetivo del presente post mostrar una serie de recomendaciones para tener una red más estable, no perder conectividad con ciertos destino y reducir el número de quejas en nuestro NOC.
Redactamos este artículo luego de realizar un análisis profundo de la situación basado en varios casos que hemos recibido desde la comunidad de LACNIC.
Situación identificada
Muchos ISPs no pueden recibir la full routing table de BGP (para el dia de hoy consta de ~610.000 prefijos IPv4) en sus enrutadores.
Lo anterior puede deberse a diversas razones:
- El enrutador no posee suficiente RAM para aprender todos los prefijos (además recordar que es posible que el router tenga varias sesiones BGP)
- Por ahorro de CPU
- Porque el upstream provider a su vez no entrega toda la tabla de enrutamiento
- Por simplicidad y sencillez
Entendiendo la situación e independientemente de la razón que sea, el enrutador no aprende toda la tabla de enrutamiento.
Problema
No aprender toda la tabla de enrutamiento puede traer algunos inconvenientes parciales pero que al final trae problemas de conectividad, quejas de los usuarios, inconvenientes de acceso a ciertos sitios, entre otros.
¿Por qué?
Imaginemos la siguiente situación:
- Tengo un router (propiedad de EXAMPLE) en Internet que solo aprende la tabla parcial de enrutamiento.
- El router propiedad de EXAMPLE quedó configurado solo para aprender redes “más grandes” que /21. Es decir, aprende redes /20, /19, /18, etc. (evidentemente estamos hablando de IPv4)
- Debido a la configuración establecida en el punto “b”, el router no aprenderá prefijos de tamaño /21, /22, /23 ni /24
- Mientras tanto en otra parte del mundo, le acaban de secuestrar su red /21 a la empresa ACME (planteamos el caso como un secuestro pero podría ser una mala configuración)
- ACME decide realizar anuncios más específicos de su red original /21, es decir, anuncia 8 redes /24
- Por causa de los filtros configurados por EXAMPLE, nunca verá dichos anuncios /24 de ACME
- EXAMPLE seguirá aprendiendo la red /21 del secuestrador de la red. Lo que puede ocasionar que el tráfico hacia ACME puede ser potencialmente secuestrado (repito, se entiende que esta situación es potencial, no necesariamente el tráfico irá hacia el atacante)
Diagrama
El siguiente diagrama representa la hipótesis planteada en el punto anterior de manera gráfica para facilitar su comprensión.
Recomendación
Realizaremos la siguiente recomendación en base a algunas experiencias vividas, teniendo en cuenta que solo aplican al caso de cuando no se pueda aprender/recibir la tabla completa de BGP:
- No filtrar permitiendo redes menos específicas. Es conveniente aprender redes más chicas, es decir: /24, /23, /22
- Filtrar por AS_PATH de profundidad
- Crear los ROAs respectivos a los prefijos (RPKI)
Algunos ejemplos (Cisco like)
1. Solo queremos aprender redes entre /22 y /24 (hay otras maneras de hacer esto)
router bgp 65002
neighbor 10.0.0.1 remote-as 65001
neighbor 10.0.0.1 route-map FILTRO-IN in
!
ip prefix-list REDESCHICAS seq 5 permit 0.0.0.0/0 ge 22 le 24
!
route-map FILTRO-IN permit 10
match ip address prefix-list REDESCHICAS
!
2. Solo queremos aprender dos AS de profundidad (hay otras maneras de hacer esto)
router bgp 65001
neighbor 10.0.0.2 remote-as 65002
neighbor 10.0.0.2 route-map ASFILTER-IN in
!
ip as-path access-list 5 permit ^[0-9]+_$
ip as-path access-list 5 permit ^[0-9]+ [0-9]+_$
!
route-map ASFILTER-IN permit 10
match as-path 5
!
Mas información
- Demostración de secuestro de prefijo 1/2: https://www.youtube.com/watch?v=X5RNSs8y8Ao&t=39s
- Demostración de secuestro de prefijo 2/2: https://www.youtube.com/watch?v=m51WtuEZOKI
- BGP Prefix-Based Outbound Route Filtering: http://www.cisco.com/c/en/us/td/docs/ios/12_2s/feature/guide/fsbgporf.html
- Ejemplo de configuración de BGP con dos prestadores de servicio diferentes (conexiones múltiples): http://www.cisco.com/cisco/web/support/LA/7/75/75930_27.html
- Certificación de Recursos (RPKI): http://www.lacnic.net/web/lacnic/certificacion-de-recursos-rpki
- Información General sobre Certificación de Recursos (RPKI): http://www.lacnic.net/web/lacnic/informacion-general-rpki