Podcast: Descargar (Duración: 27:47 — 25.9MB)
MANRS (Normas mutuamente acordadas para en encaminamiento seguro) son un conjunto de normas a las que puedes adherirte voluntariamente después de demostrar que cumples todos los requisitos. MANRS persigue eliminar las amenazas de encaminamiento más comunes:
- Secuestro de prefijos.
- Fugas de ruta.
- Suplantación de direccionamiento IP.
Aquí vamos a centrarnos en MANRS para proveedores de servicios, pero también se puede aplicar MANRS para IXP, redes de distribución de contenidos, proveedores en la nube o incluso fabricantes.
En cuanto a los proveedores de servicios de Internet (ISP) los beneficios de adherirse a MANRS son varios como por ejemplo:
- Reconocimiento por la comunidad como buenos ciudadanos de la red y contribuidores de la estabilidad en Internet.
- Demostrar competencia en seguridad y compromiso con clientes.
- Ofrecer un servicio de conectividad acorde a los estándares más altos.
- Contribuir a reducir los problemas de seguridad de routing.
Las fases para cumplir MANRS son cuatro:
- Validación: Publicar información de routing en lugares que se puedan validar por cualquiera.
- Filtrado: Filtrar para anunciar con exactitud los prefijos propios y de sus clientes, filtrando el resto.
- Antisuplantación: Impedir el tráfico desde IPs suplantadas.
- Coordinación: Mantener información de contacto actualizada.
Validación
Antes de nada contar que Internet se divide en 5 regiones, cada una de ellas funciona de forma similar, pero no exacta en cuanto a procedimientos y yo voy a centrarme en los que a mi zona respecta que comprende Europa, Oriente Medio, lo que era la Unión Soviética y Mongolia y su RIR (Registro Regional de Internet) que se llama RIPE (del francés Réseaux IP Européens) y el punto de coordinación es RIPE NCC.
Para realizar las tareas de validación es necesario que los operadores publiquen la información de su red en varios repositorios públicos:
- IRR (Registros de Encaminamiento de Internet): En mi caso RIPE NCC
- RPKI (Infraestructura de clave pública de recursos)
- PeeringDB
La información para mantener un estándar se sube utilizando el Lenguaje de especificación de políticas de enrutamiento (RPSL).
El RPSL nos sirva para almacenar la información relativa a los objetos como INETNUM, ROUTE / ROUTE6 o AS-SET dentro de la base de datos de un IRR (Registro de Routing de Internet):
Un objeto route de Tecnocrática
route: 31.47.72.0/21 descr: Tecnocratica Centro de Datos IPv4 network origin: AS15954 mnt-by: TECNOCRATICA-MNT created: 2018-05-22T14:48:50Z last-modified: 2018-05-22T14:51:19Z source: RIPE
Un objeto inetnum de Tecnocrática
inetnum: 31.47.77.0 - 31.47.77.255 netname: Neodigit-Managed-Hosting-4 descr: Managed Hosting Group 4 country: ES admin-c: TECN2-RIPE tech-c: TECN3-RIPE status: ASSIGNED PA mnt-by: TECNOCRATICA-MNT created: 2019-06-25T10:27:56Z last-modified: 2019-06-25T10:27:56Z source: RIPE # Filtered
Un objeto inet6num de Tecnocrática
inet6num: 2a01:a940::/31 netname: ES-TECNOCRATICA-20120822 country: ES org: ORG-NS101-RIPE admin-c: TECN2-RIPE tech-c: TECN3-RIPE status: ALLOCATED-BY-RIR remarks: For abuse/spam related issues please contact abuse@tecnocratica.net mnt-by: RIPE-NCC-HM-MNT mnt-by: TECNOCRATICA-MNT mnt-lower: TECNOCRATICA-MNT mnt-routes: TECNOCRATICA-MNT created: 2019-07-25T13:02:27Z last-modified: 2019-07-25T13:02:27Z source: RIPE # Filtered
Pero con agregar los objetos al IRR que nos corresponda nos es suficiente además necesitaremos objetos ROA (Autorización de Origen de Ruta) para asegurar que esas rutas son realmente nuestras. Para asegurar esto firmaremos critográficamente esa información y la depositaremos en un repositorio RPKI.
Y por último tenemos a PeeringDB que es donde podemos poner otra información, como por ejemplo los IXPs a los que estamos conectados, la velocidad de nuestros puertos de intercambio y otra información.
Filtrado
Con la información del IRR podemos obtener por cada Sistema Autónomo la lista de ASs con los que comparte información tanto entrante como saliente y con eso podemos construir unos filtros que impidan que un AS anuncie algo que no deba.
Por poner un ejemplo, si nos conectamos contra el AS65555 (es privado) y ese AS le da tránsito al 65554 podemos deducir que vamos a recibir prefijos del 65555 y del 65554, así que si recibimos prefijos del AS23454 significa que algo está mal porque ese AS no puede anunciar prefijos de ese AS pues no está conectado y no nos proporciona tránsito.
Esa información está en el objeto aut-num que se obtiene simplemente poniendo en la consola:
$ whois as65555
En el caso de Tecnocrática podemos obtener el siguiente:
aut-num: AS15954 as-name: Tecnocratica descr: Tecnocratica Centro de Datos, S.L. org: ORG-NS101-RIPE remarks: ---------------------------------------------- remarks: ------------------ IMPORTS ------------------- remarks: ---------------------------------------------- remarks: ---------------------------------------------- remarks: ------------------ TRANSITS ------------------ remarks: ---------------------------------------------- import: from AS174 accept ANY import: from AS2914 accept ANY import: from AS3257 accept ANY import: from AS8928 accept ANY mp-import: afi any from AS174 accept ANY mp-import: afi any from AS2914 accept ANY mp-import: afi any from AS3257 accept ANY mp-import: afi any from AS8928 accept ANY remarks: ---------------------------------------------- remarks: ------------------ PEERINGS ------------------ remarks: ---------------------------------------------- import: from AS42 accept AS-PCH import: from AS2906 accept AS-NFLX import: from AS3856 accept AS-PCH import: from AS6939 accept AS6939 import: from AS8075 accept AS-MICROSOFT import: from AS13030 accept AS-INIT7 import: from AS13335 accept AS-CLOUDFLARE import: from AS15169 accept AS-GOOGLE import: from AS15704 accept AS-MUNDI import: from AS16276 accept AS-OVH import: from AS16509 accept AS-AMAZON import: from AS20940 accept AS-AKAMAI import: from AS24768 accept AS24768 import: from AS33891 accept AS-CORE-BACKBONE import: from AS-DECIX-MAD accept AS-DECIX-MAD import: from AS-DECIX-MAD accept AS-DECIX-MAD mp-import: afi any from AS42 accept AS-PCH mp-import: afi any from AS2906 accept AS-NFLX mp-import: afi any from AS3856 accept AS-PCH mp-import: afi any from AS6939 accept AS6939 mp-import: afi any from AS8075 accept AS-MICROSOFT mp-import: afi any from AS13030 accept AS-INIT7 mp-import: afi any from AS13335 accept AS-CLOUDFLARE mp-import: afi any from AS15169 accept AS-GOOGLE mp-import: afi any from AS15704 accept AS-MUNDI mp-import: afi any from AS16276 accept AS-OVH mp-import: afi any from AS16509 accept AS-AMAZON mp-import: afi any from AS20940 accept AS-AKAMAI mp-import: afi any from AS24768 accept AS24768 mp-import: afi any from AS33891 accept AS-CORE-BACKBONE mp-import: afi ipv4.unicast from AS-DECIX-MAD accept AS-DECIX-MAD mp-import: afi ipv4.unicast from AS-DECIX-MAD accept AS-DECIX-MAD mp-import: afi ipv6.unicast from AS-DECIX-MAD-V6 accept AS-DECIX-MAD-V6 mp-import: afi ipv6.unicast from AS-DECIX-MAD-V6 accept AS-DECIX-MAD-V6 remarks: ---------------------------------------------- remarks: ------------------ CLIENTS ------------------- remarks: ---------------------------------------------- import: from AS6750 action pref=160; accept AS6750 import: from AS16134 action pref=160; accept AS16134 import: from AS20144 action pref=160; accept AS20144 import: from AS29117 action pref=160; accept AS29117 import: from AS43520 action pref=160; accept AS43520 import: from AS51718 action pref=160; accept AS51718 import: from AS197518 action pref=160; accept AS-RACKMARKT import: from AS201446 action pref=160; accept AS201446 import: from AS202207 action pref=160; accept AS-ASPA mp-import: afi any from AS6750 accept AS6750 mp-import: afi any from AS16134 accept AS16134 mp-import: afi any from AS20144 accept AS20144 mp-import: afi any from AS29117 accept AS29117 mp-import: afi any from AS43520 accept AS43520 mp-import: afi any from AS51718 accept AS51718 mp-import: afi any from AS197518 accept AS-RACKMARKT mp-import: afi any from AS201446 accept AS201446 mp-import: afi any from AS202207 accept AS-ASPA remarks: ---------------------------------------------- remarks: remarks: ---------------------------------------------- remarks: ------------------ EXPORTS ------------------- remarks: ---------------------------------------------- remarks: ---------------------------------------------- remarks: ------------------ TRANSITS ------------------ remarks: ---------------------------------------------- export: to AS174 announce AS-Tecnocratica export: to AS2914 announce AS-Tecnocratica export: to AS3257 announce AS-Tecnocratica export: to AS8928 announce AS-Tecnocratica mp-export: afi any to AS174 announce AS-Tecnocratica mp-export: afi any to AS2914 announce AS-Tecnocratica mp-export: afi any to AS3257 announce AS-Tecnocratica mp-export: afi any to AS8928 announce AS-Tecnocratica remarks: ---------------------------------------------- remarks: ------------------ PEERINGS ------------------ remarks: ---------------------------------------------- export: to AS42 announce AS-Tecnocratica export: to AS2906 announce AS-Tecnocratica export: to AS3856 announce AS-Tecnocratica export: to AS6939 announce AS-Tecnocratica export: to AS8075 announce AS-Tecnocratica export: to AS13030 announce AS-Tecnocratica export: to AS13335 announce AS-Tecnocratica export: to AS15169 announce AS-Tecnocratica export: to AS15704 announce AS-Tecnocratica export: to AS16276 announce AS-Tecnocratica export: to AS16509 announce AS-Tecnocratica export: to AS20940 announce AS-Tecnocratica export: to AS24768 announce AS-Tecnocratica export: to AS33891 announce AS-Tecnocratica export: to AS-DECIX-MAD announce AS-Tecnocratica export: to AS-DECIX-MAD announce AS-Tecnocratica mp-export: afi any to AS42 announce AS-Tecnocratica mp-export: afi any to AS2906 announce AS-Tecnocratica mp-export: afi any to AS3856 announce AS-Tecnocratica mp-export: afi any to AS6939 announce AS-Tecnocratica mp-export: afi any to AS8075 announce AS-Tecnocratica mp-export: afi any to AS13030 announce AS-Tecnocratica mp-export: afi any to AS13335 announce AS-Tecnocratica mp-export: afi any to AS15169 announce AS-Tecnocratica mp-export: afi any to AS15704 announce AS-Tecnocratica mp-export: afi any to AS16276 announce AS-Tecnocratica mp-export: afi any to AS16509 announce AS-Tecnocratica mp-export: afi any to AS20940 announce AS-Tecnocratica mp-export: afi any to AS24768 announce AS-Tecnocratica mp-export: afi any to AS33891 announce AS-Tecnocratica mp-export: afi ipv4.unicast to AS-DECIX-MAD announce AS-Tecnocratica mp-export: afi ipv4.unicast to AS-DECIX-MAD announce AS-Tecnocratica mp-export: afi ipv6.unicast to AS-DECIX-MAD-V6 announce AS-Tecnocratica mp-export: afi ipv6.unicast to AS-DECIX-MAD-V6 announce AS-Tecnocratica remarks: ---------------------------------------------- remarks: ------------------ CLIENTS ------------------- remarks: ---------------------------------------------- export: to AS6750 announce ANY export: to AS16134 announce ANY export: to AS29117 announce ANY export: to AS20144 announce ANY export: to AS43520 announce ANY export: to AS51718 announce ANY export: to AS197518 announce ANY export: to AS201446 announce ANY export: to AS202207 announce ANY mp-export: afi any to AS6750 announce ANY mp-export: afi any to AS16134 announce ANY mp-export: afi any to AS20144 announce ANY mp-export: afi any to AS29117 announce ANY mp-export: afi any to AS43520 announce ANY mp-export: afi any to AS51718 announce ANY mp-export: afi any to AS197518 announce ANY mp-export: afi any to AS201446 announce ANY mp-export: afi any to AS202207 announce ANY remarks: ---------------------------------------------- remarks: admin-c: TECN2-RIPE tech-c: TECN3-RIPE status: ASSIGNED mnt-by: RIPE-NCC-END-MNT mnt-by: TECNOCRATICA-MNT created: 1970-01-01T00:00:00Z last-modified: 2021-09-24T15:13:32Z source: RIPE # Filtered
Ahí lo que podemos ver es de quien se hace import, a quien se le hace export y qué es lo qué se espera recibir y transmitir. Por poner un ejemplo de lo que podemos ver ahí:
import: from AS15169 accept AS-GOOGLE mp-import: afi any from AS15169 accept AS-GOOGLE export: to AS15169 announce AS-Tecnocratica mp-export: afi any to AS15169 announce AS-Tecnocratica
Estas de arriba serían las políticas entre Google y nosotros, por un lado tenemos los import y export, que sólo son para IPv4 y el mp-import y mp-export que sirven para todo. Están duplicadas porque todavía hay gente no soporta los mp-import y mp-export, así que ante la duda duplicas y ya te quitas problemas, pero relamente con el mp-import y mp-export debería de servir.
Ahí lo que decimos es que aceptamos lo que vvena en el as-set AS-GOOGLE y nosotros le anunciamos lkoq ue venga en el as-set AS-Tecnocratica.
Para generar esos filtros podemos hacerlo a mano, pero no os lo aconsejo porque hay que ser un campeón y lo normal es que se te pasen cosas constantemente, así que lo mejor es usar una herramienta para ello como son: IRRToolset, BGPQ3, BGPQ4, IRRPT. Esas herramientas nos darán la configuración para copiar y pegar, muy facilito todo.
Todo lo que no esté debidamente documentado en el IRR debería de ser descartado y en un mundo ideal todo lo que no esté en RPKI también, pero es más complicado ya que por desgracia no está totalmente implementado por mucha gente por desconocimiento y por limitaciones del hardware que utilizan.
Antisuplantación
Para evitar la suplantación de direcciones IP podemos hacer básicamente dos cosas:
- uRPF.
- Bloqueo de IPs en interfaces que no deberían de estar.
El uRPF simplemente sería habilitar ip verify unicast reachable-via rx y ipv6 verify unicast reachable-via rx.
En cuanot al bloqueo de IPs en interfaces es simplemente aplicar un access list que no se acepta nada con la ip de origen fuera del rango del interfaz.