{"id":3068,"date":"2021-02-12T20:02:15","date_gmt":"2021-02-13T00:02:15","guid":{"rendered":"http:\/\/arielantigua.com\/weblog\/?p=3068"},"modified":"2021-02-12T20:02:44","modified_gmt":"2021-02-13T00:02:44","slug":"rpki-con-gortr-de-cloudflare-en-kubernetes","status":"publish","type":"post","link":"https:\/\/arielantigua.com\/weblog\/2021\/02\/rpki-con-gortr-de-cloudflare-en-kubernetes\/","title":{"rendered":"RPKI con GoRTR de Cloudflare \u2013 en Kubernetes!"},"content":{"rendered":"<p>RPKI con GoRTR de Cloudflare \u2013 en Kubernetes !<\/p>\n<p>Hace un tiempo prob\u00e9 con RPKI, en esos d\u00edas estaba tomando unos entrenamientos de <a href=\"https:\/\/www.manrs.org\/\">MANRS<\/a>, con RPKI podemos asegurar que los prefijos que recibimos v\u00eda BGP con de quien realmente deber\u00edan ser, en otras palabras, si por alguna raz\u00f3n 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.<\/p>\n<p><a href=\"https:\/\/github.com\/cloudflare\/gortr\">https:\/\/github.com\/cloudflare\/gortr<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"575\" height=\"435\" class=\"wp-image-3069\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image.png 575w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-300x227.png 300w\" sizes=\"auto, (max-width: 575px) 100vw, 575px\" \/><\/p>\n<p><!--more--><\/p>\n<p>En este caso le estoy agregando a Kubernetes al asunto, porque no, compliqu\u00e9moslo un poco mas!<\/p>\n<p>Ya que gran parte de las herramientas que uso y que brindan servicios de infraestructura en mi red interna ya est\u00e1n corriendo en k8s, GoRTR no deber\u00eda de ser la excepci\u00f3n.<\/p>\n<p>Lo primero que necesitamos es un contenedor y Cloudflare provee uno listo para usarse en <a href=\"https:\/\/hub.docker.com\/r\/cloudflare\/gortr\">https:\/\/hub.docker.com\/r\/cloudflare\/gortr<\/a>, 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.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/aredan\/776b7f980227d4cd2bdf303410e26e1b\">https:\/\/gist.github.com\/aredan\/776b7f980227d4cd2bdf303410e26e1b<\/a> \u2013 aqu\u00ed est\u00e1 el deployment y service en un mismo yaml file.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"411\" class=\"wp-image-3070\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-1.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-1.png 921w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-1-300x135.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-1-768x343.png 768w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"618\" height=\"216\" class=\"wp-image-3071\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-2.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-2.png 618w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-2-300x105.png 300w\" sizes=\"auto, (max-width: 618px) 100vw, 618px\" \/><\/p>\n<p>Ya nuestro pod est\u00e1 corriendo y el servicio listo y escuchando en una IP p\u00fablica.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"854\" height=\"108\" class=\"wp-image-3072\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-3.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-3.png 854w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-3-300x38.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-3-768x97.png 768w\" sizes=\"auto, (max-width: 854px) 100vw, 854px\" \/><\/p>\n<p>Del lado del cliente, en mi caso es BIRD2 la configuraci\u00f3n es sencilla.<\/p>\n<pre># --- RPKI ---\n\nroa4 table RPKI4;\nroa6 table RPKI6;\n\nprotocol rpki {\n  roa4 { table RPKI4; };\n  roa6 { table RPKI6; };\n\n  remote \"rpki.aanetworks.org\" port 8282;\n\n  retry keep 90;\n  refresh keep 900;\n  expire keep 172800;\n}<\/pre>\n<p><a href=\"https:\/\/bird.network.cz\/?get_doc&amp;v=20&amp;f=prog-5.html#ss5.8\">https:\/\/bird.network.cz\/?get_doc&amp;v=20&amp;f=prog-5.html#ss5.8<\/a><\/p>\n<p>Una vez listo, podemos ver un nuevo protocolo el cual recibe rutas desde GoRTR y las guarda en una tabla dedicada a estos fines.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"839\" height=\"774\" class=\"wp-image-3073\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-4.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-4.png 839w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-4-300x277.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-4-768x709.png 768w\" sizes=\"auto, (max-width: 839px) 100vw, 839px\" \/><\/p>\n<p>Podemos ver el contenido de las tablas<\/p>\n<pre>show route protocol rpki1 table RPKI4<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"666\" height=\"453\" class=\"wp-image-3074\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-5.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-5.png 666w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-5-300x204.png 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/p>\n<pre>show route protocol rpki1 table RPKI6<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"715\" height=\"303\" class=\"wp-image-3075\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-6.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-6.png 715w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2021\/02\/word-image-6-300x127.png 300w\" sizes=\"auto, (max-width: 715px) 100vw, 715px\" \/><\/p>\n<p>El pr\u00f3ximo paso para esta configuraci\u00f3n es habilitar la opci\u00f3n de establecer la conexi\u00f3n usando SSH como transporte, aunque todo sucede en mi red protegida por algunas pol\u00edticas de firewall, no est\u00e1 de m\u00e1s configurar opciones de seguridad nativa en la soluci\u00f3n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>RPKI con GoRTR de Cloudflare \u2013 en Kubernetes ! Hace un tiempo prob\u00e9 con RPKI, en esos d\u00edas estaba tomando unos entrenamientos de MANRS, con RPKI podemos asegurar que los prefijos que recibimos v\u00eda BGP con de quien realmente deber\u00edan ser, en otras palabras, si por alguna raz\u00f3n un tercero mal intencionado se hace con [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,128,34],"tags":[110,139,144,143],"class_list":["post-3068","post","type-post","status-publish","format-standard","hentry","category-general","category-kubernetes","category-networking","tag-aanetworks","tag-kubernetes","tag-rpki","tag-seguridad"],"_links":{"self":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/comments?post=3068"}],"version-history":[{"count":0,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3068\/revisions"}],"wp:attachment":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/media?parent=3068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/categories?post=3068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/tags?post=3068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}