RPKI con GoRTR de Cloudflare – en Kubernetes!

RPKI con GoRTR de Cloudflare – en Kubernetes !

Hace un tiempo probé con RPKI, en esos días estaba tomando unos entrenamientos de MANRS, con RPKI podemos asegurar que los prefijos que recibimos vía BGP con de quien realmente deberían ser, en otras palabras, si por alguna razón un tercero mal intencionado se hace con un bloque de direcciones IP que no le pertenece, pero esta tiene ROA habilitado, el trabajo de RPKI es no permitir que esos bloques de direcciones IP sean insertados en nuestra tabla de enrutamiento.

https://github.com/cloudflare/gortr

En este caso le estoy agregando a Kubernetes al asunto, porque no, compliquémoslo un poco mas!

Ya que gran parte de las herramientas que uso y que brindan servicios de infraestructura en mi red interna ya están corriendo en k8s, GoRTR no debería de ser la excepción.

Lo primero que necesitamos es un contenedor y Cloudflare provee uno listo para usarse en https://hub.docker.com/r/cloudflare/gortr, eso quiere decir que estamos cubierto. Segundo, necesitamos un manifiesto para deployment y uno para el servicio por el cual haremos GoRTR accesible desde fuera de k8s.

https://gist.github.com/aredan/776b7f980227d4cd2bdf303410e26e1b – aquí está el deployment y service en un mismo yaml file.

Ya nuestro pod está corriendo y el servicio listo y escuchando en una IP pública.

Del lado del cliente, en mi caso es BIRD2 la configuración es sencilla.

# --- RPKI ---

roa4 table RPKI4;
roa6 table RPKI6;

protocol rpki {
  roa4 { table RPKI4; };
  roa6 { table RPKI6; };

  remote "rpki.aanetworks.org" port 8282;

  retry keep 90;
  refresh keep 900;
  expire keep 172800;
}

https://bird.network.cz/?get_doc&v=20&f=prog-5.html#ss5.8

Una vez listo, podemos ver un nuevo protocolo el cual recibe rutas desde GoRTR y las guarda en una tabla dedicada a estos fines.

Podemos ver el contenido de las tablas

show route protocol rpki1 table RPKI4

show route protocol rpki1 table RPKI6

El próximo paso para esta configuración es habilitar la opción de establecer la conexión usando SSH como transporte, aunque todo sucede en mi red protegida por algunas políticas de firewall, no está de más configurar opciones de seguridad nativa en la solución.

Autor: Ariel Antigua

Automation guy with a love for Containers!