MANRS

MANRS

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:

  1. Secuestro de prefijos.
  2. Fugas de ruta.
  3. 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:

  1. Validación: Publicar información de routing en lugares que se puedan validar por cualquiera.
  2. Filtrado: Filtrar para anunciar con exactitud los prefijos propios y de sus clientes, filtrando el resto.
  3. Antisuplantación: Impedir el tráfico desde IPs suplantadas.
  4. 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:

  1. uRPF.
  2. 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.