{"id":41051,"date":"2020-02-05T21:28:58","date_gmt":"2020-02-05T18:28:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/consul-iptables-3"},"modified":"2020-02-05T21:28:58","modified_gmt":"2020-02-05T18:28:58","slug":"consul-iptables-3","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/consul-iptables-3","title":{"rendered":"Consul + iptables = :3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>En 2010, la empresa <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/wargaming\/\">Wargaming<\/a><\/noindex> ten\u00eda 50 servidores y un modelo de red simple: backend, frontend y firewall. El n\u00famero de servidores creci\u00f3, el modelo se complic\u00f3: staging, VLANs aisladas con ACL, luego VPN con VRF, VLAN con ACL en L2, VRF con ACL en L3. \u00bfTe est\u00e1s mareando? Lo que viene ser\u00e1 m\u00e1s entretenido.<\/p>\n<p>Cuando el n\u00famero de servidores lleg\u00f3 a 16,000, trabajar sin l\u00e1grimas con tanta cantidad de segmentos heterog\u00e9neos se volvi\u00f3 imposible. Por eso, se ide\u00f3 otra soluci\u00f3n. Se utiliz\u00f3 la pila Netfilter, se a\u00f1adi\u00f3 Consul como fuente de datos, y se obtuvo un firewall distribuido r\u00e1pido. Se reemplazaron las ACL en los routers y se utiliz\u00f3 como firewall externo e interno. Para la gesti\u00f3n din\u00e1mica de la herramienta, se desarroll\u00f3 el sistema BEFW, que se aplic\u00f3 en todas partes: desde la gesti\u00f3n del acceso de usuarios a la red de producci\u00f3n hasta la aislamiento de segmentos de red entre s\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/246e74278f413749a676599b5ce986a5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC\u00f3mo funciona todo esto y por qu\u00e9 deber\u00edas considerar este sistema, lo contar\u00e1 <strong>Iv\u00e1n Agarvok<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2014 l\u00edder del grupo de seguridad de infraestructura del departamento de Mantenimiento en el centro de desarrollo de Minsk de la empresa. Iv\u00e1n es un fan\u00e1tico de SELinux, le gusta Perl y escribe c\u00f3digo. Como jefe del grupo de seguridad, trabaja regularmente con logs, backups y I+D para proteger a Wargaming de hackers y asegurar que todos los servidores de juego de la empresa funcionen correctamente.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"4zP67uYnsR4\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/4zP67uYnsR4\/hqdefault.jpg\" alt=\"Reproducir video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2>Nota hist\u00f3rica<\/h2>\n<p>\nAntes de contar c\u00f3mo lo hicimos, explicar\u00e9 c\u00f3mo llegamos a esto y por qu\u00e9 era necesario. Para ello, retrocedamos 9 a\u00f1os: 2010, cuando aparecieron por primera vez World of Tanks. La empresa Wargaming ten\u00eda aproximadamente 50 servidores.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/64e1c2839363dbdf59ba5f11bb13530e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Gr\u00e1fica de crecimiento de servidores de la empresa.<\/em><\/p>\n<p>Ten\u00edamos un modelo de red. Para esa \u00e9poca, era \u00f3ptimo.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/c0509324e2a83882a9792ba75612ceea.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Modelo de red en 2010.<\/em><\/p>\n<p>En el frontend viven los malos que quieren rompernos, pero hay un firewall. En el backend no hay firewall, pero hay 50 servidores que todos conocemos. Todo funciona bien.<\/p>\n<p>En 4 a\u00f1os, el parque de servidores creci\u00f3 100 veces, hasta 5,000. Aparecieron las primeras redes aisladas: stagings, que no pueden ir a producci\u00f3n, y ah\u00ed frecuentemente hab\u00eda elementos que pod\u00edan ser peligrosos.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/08e1d7670ce1a1346e49d87c67c4be1b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Modelo de red en 2014.<\/em><\/p>\n<p>Por inercia, se siguieron utilizando los mismos equipos, y todo el trabajo se llev\u00f3 a cabo en VLANs aisladas: a las VLANs se les escriben ACL que permiten o proh\u00edben alguna conexi\u00f3n.<\/p>\n<p>En 2016, el n\u00famero de servidores alcanz\u00f3 los 8000. Wargaming adquiri\u00f3 otros estudios, y surgieron redes de socios adicionales. Son como nuestros, pero no del todo: para los socios, VLAN a menudo no funciona, es necesario usar VPN con VRF, las aislamientos se complican. La mezcla de aislamientos ACL creci\u00f3.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/a6580c9551730447e16d7881eb102275.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Modelo de red en 2016.<\/em><\/p>\n<p>A principios de 2018, la flota de m\u00e1quinas creci\u00f3 a 16,000. Hab\u00eda 6 segmentos y no contamos los dem\u00e1s, incluidos los cerrados, donde se almacenaban datos financieros. Surgieron redes de contenedores (Kubernetes), DevOps, redes en la nube conectadas por VPN, por ejemplo, desde el I\u0421\u0421. Hab\u00eda muchas reglas, era doloroso.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ec44e6a60da98daa4bbf2bca2e3b2e1a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Modelo de red y m\u00e9todos de aislamiento en 2018.<\/em><\/p>\n<p>Para el aislamiento utilizamos: VLAN con ACL en L2, VRF con ACL en L3, VPN y muchas otras cosas. Demasiadas.<\/p>\n<h2>Problemas<\/h2>\n<p>\nTodos viven con ACL y VLAN. \u00bfQu\u00e9 est\u00e1 mal? Esta pregunta la responder\u00e1 Harold, ocultando su dolor.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4df5105af3bce515d80e8e5f3e14c027.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHubo muchos problemas, pero a gran escala, cinco.<\/p>\n<ul>\n<li><strong>Crecimiento geom\u00e9trico de precios para las nuevas reglas<\/strong>. Cada nueva regla tardaba m\u00e1s en a\u00f1adirse que la anterior, porque primero hab\u00eda que revisar si ya exist\u00eda una regla similar.<\/li>\n<li><strong>No hay firewall dentro de los segmentos<\/strong>. Los segmentos se separaron de alguna manera, pero ya no hay suficientes recursos en su interior.<\/li>\n<li><strong>Las reglas se aplicaban lentamente. <\/strong>A mano, un operador pod\u00eda escribir una regla local en una hora. Una global tomaba varios d\u00edas.<\/li>\n<li><strong>Dificultades con la auditor\u00eda de reglas<\/strong>. M\u00e1s bien, no era posible. Las primeras reglas se escribieron en 2010, y la mayor\u00eda de sus autores ya no trabajaban en la empresa.<\/li>\n<li><strong>Bajo nivel de control sobre la infraestructura<\/strong>. Este es el principal problema: no sab\u00edamos bien qu\u00e9 estaba sucediendo.<\/li>\n<\/ul>\n<p>\nAs\u00ed se ve\u00eda un ingeniero de red en 2018, cuando escuchaba: 'Necesitamos un poco m\u00e1s de ACL.'<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/8366d3092558ebb15a4ba6d8e5702032.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Soluciones<\/h2>\n<p>\nA principios de 2018, se decidi\u00f3 que hab\u00eda que hacer algo al respecto.<\/p>\n<p><strong>El costo de las integraciones sigue aumentando. <\/strong>El punto de partida fue que los grandes centros de datos dejaron de soportar VLAN y ACL aisladas, ya que se qued\u00f3 sin memoria en los dispositivos.<\/p>\n<p>Soluci\u00f3n: eliminar el factor humano y automatizar al m\u00e1ximo la provisi\u00f3n de acceso.<\/p>\n<p><strong>Nuevas reglas se aplican lentamente. <\/strong>Soluci\u00f3n: acelerar la aplicaci\u00f3n de reglas, hacerla distribuida y paralela. Para ello, se necesita un sistema distribuido para que las reglas se entreguen por s\u00ed solas, sin rsync o SFTP en mil sistemas.<\/p>\n<p><strong>Falta de firewall dentro de los segmentos. <\/strong>El firewall dentro de los segmentos comenz\u00f3 a llegar a nosotros cuando aparecieron diferentes servicios dentro de una misma red. Soluci\u00f3n: usar un firewall a nivel de host \u2014 firewalls basados en host. Pr\u00e1cticamente en todas partes tenemos Linux, y en todas partes hay iptables, no es un problema.<\/p>\n<p><strong>Dificultades con la auditor\u00eda de las reglas.<\/strong> Soluci\u00f3n: almacenar todas las reglas en un solo lugar para revisi\u00f3n y gesti\u00f3n, as\u00ed podremos auditar todo.<\/p>\n<p><strong>Bajo nivel de control sobre la infraestructura. <\/strong>Soluci\u00f3n: hacer un inventario de todos los servicios y accesos entre ellos.<\/p>\n<p>Es m\u00e1s un proceso administrativo que t\u00e9cnico. A veces tenemos de 200 a 300 nuevos lanzamientos por semana, especialmente durante promociones y fiestas. Esto solo para un equipo de nuestros DevOps. Con tal cantidad de lanzamientos es imposible ver o entender qu\u00e9 puertos, IP, integraciones son necesarias. Por eso necesitamos gerentes de servicio especialmente capacitados, que entrevistaran a los equipos: \"\u00bfQu\u00e9 hay y por qu\u00e9 lo han levantado?\"<\/p>\n<p>Despu\u00e9s de todo lo que lanzamos, el ingeniero de redes en 2019 ya se ve\u00eda as\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ccca25d7f7bb7f70638725addc6d99ed.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Consul<\/h2>\n<p>\nDecidimos que todo lo que encontramos con la ayuda de los gerentes de servicio lo pondr\u00edamos en Consul y desde all\u00ed escribir\u00edamos reglas de iptables.<\/p>\n<p>\u00bfC\u00f3mo decidimos hacerlo?<\/p>\n<ul>\n<li>Reuniremos todos los servicios, redes y usuarios.<\/li>\n<li>Crearemos reglas de iptables basadas en ellos.<\/li>\n<li>Automatizaremos el control.<\/li>\n<li>\u2026.<\/li>\n<li>PROFITS.<\/li>\n<\/ul>\n<p>\nConsul no es una API remota, puede funcionar en cada nodo y escribir en iptables. Solo queda idear medios autom\u00e1ticos de control que eliminen lo innecesario, \u00a1y la mayor parte de los problemas estar\u00e1 resuelta! Lo dem\u00e1s lo resolveremos en el proceso.<\/p>\n<h3>\u00bfPor qu\u00e9 Consul?<\/h3>\n<p>\n<strong>Ha demostrado ser eficaz. <\/strong>En 2014-15 lo utilizamos como backend para Vault, donde almacenamos contrase\u00f1as.<\/p>\n<p><strong>No pierde datos.<\/strong>. Durante el tiempo que hemos usado Consul, no ha perdido datos en ning\u00fan accidente. Esto es una gran ventaja para el sistema de gesti\u00f3n del firewall.<\/p>\n<p><strong>Las conexiones P2P aceleran la propagaci\u00f3n de cambios.<\/strong>. Con P2P todos los cambios llegan r\u00e1pidamente, no hay que esperar horas.<\/p>\n<p><strong>API REST conveniente.<\/strong> Tambi\u00e9n consideramos Apache ZooKeeper, pero no tiene API REST, tendr\u00edamos que poner costuras.<\/p>\n<p><strong>Funciona tanto como almacenamiento de claves (KV) como cat\u00e1logo (Descubrimiento de Servicios).<\/strong>. Se pueden almacenar servicios, cat\u00e1logos y centros de datos al mismo tiempo. Esto es conveniente no solo para nosotros, sino tambi\u00e9n para equipos vecinos, porque al construir un servicio global, pensamos de manera amplia.<\/p>\n<p><strong>Escrito en Go, que forma parte del stack de Wargaming. <\/strong>Amamos este lenguaje, tenemos muchos desarrolladores de Go.<\/p>\n<p><strong>Sistema ACL potente. <\/strong>Con ACL en Consul se puede gestionar qui\u00e9n y qu\u00e9 puede escribir. Garantizamos que las reglas del firewall no se cruzar\u00e1n con nada m\u00e1s y no tendremos problemas con esto.<\/p>\n<p>Pero Consul tambi\u00e9n tiene desventajas.<\/p>\n<ul>\n<li><strong>No se escala dentro del centro de datos, a menos que tenga la versi\u00f3n de empresa. <\/strong>Solo se escala a trav\u00e9s de federaciones.<\/li>\n<li><strong>Es muy dependiente de la calidad de la red y de la carga de los servidores. <\/strong>Consul no funcionar\u00e1 bien como servidor en un servidor cargado si hay lag en la red, por ejemplo, velocidad inestable. Esto se relaciona con conexiones P2P y modelos de propagaci\u00f3n de actualizaciones.<\/li>\n<li><strong>Dificultades con el monitoreo de la disponibilidad<\/strong>. El estado de Consul puede indicar que todo est\u00e1 bien, mientras que en realidad ya ha fallado.<\/li>\n<\/ul>\n<p>\nLa mayor\u00eda de estos problemas los resolvimos durante la operaci\u00f3n de Consul, por eso lo elegimos. La empresa tiene planes para un backend alternativo, pero hemos aprendido a lidiar con los problemas y, por ahora, vivimos con Consul.<\/p>\n<h3>C\u00f3mo funciona Consul<\/h3>\n<p>\nEn un centro de datos hipot\u00e9tico, instalaremos servidores: de tres a cinco. Uno o dos servidores no son suficientes: no podr\u00e1n organizar el qu\u00f3rum y decidir qui\u00e9n tiene raz\u00f3n y qui\u00e9n no cuando los datos no coinciden. M\u00e1s de cinco no tiene sentido, el rendimiento disminuir\u00e1.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/96153c4e9075b067b34a63ceba5b80f0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLos clientes se conectan a los servidores en cualquier orden: son los mismos agentes, solo con la bandera <code>server = false<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/0854d1286c18bb5e7c1130c6734154a9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n. Despu\u00e9s de esto, los clientes obtienen una lista de conexiones P2P y establecen relaciones entre ellos.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/2457cb7707c27cc23f6e13415119b91d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA nivel global, conectamos varios centros de datos entre s\u00ed. Tambi\u00e9n se conectan de manera P2P y se comunican.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/3b4ae922eb8d2a6a9a79425e769505d7.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCuando queremos obtener datos de otro centro de datos, la solicitud va de servidor a servidor. Este esquema se llama <strong>protocolo Serf<\/strong>. El protocolo Serf, al igual que Consul, es un desarrollo de HashiCorp.<\/p>\n<h3>Algunos hechos importantes sobre Consul<\/h3>\n<p>\nConsul tiene documentaci\u00f3n que describe su funcionamiento. Solo mencionar\u00e9 algunos hechos selectos que vale la pena conocer.<\/p>\n<p><strong>Los servidores de Consul eligen un maestro entre los votantes<\/strong>. Consul elige un maestro de la lista de servidores para cada centro de datos, y todas las solicitudes van solo a \u00e9l, independientemente del n\u00famero de servidores. La interrupci\u00f3n del maestro no conduce a nuevas elecciones. Si no se elige un maestro, las solicitudes no son atendidas.<\/p>\n<blockquote><p>\u00bfQuer\u00edas escalado horizontal? Lo siento, no.<\/p><\/blockquote>\n<p> La solicitud a otro centro de datos va de maestro a maestro, sin importar a qu\u00e9 servidor ha llegado. El maestro seleccionado recibe el 100% de la carga, excepto la carga de las solicitudes forward. Todos los servidores del centro de datos tienen una copia actual de los datos, pero solo uno responde.<\/p>\n<blockquote><p>La \u00fanica forma de escalar es activar el modo stale en el cliente.<\/p><\/blockquote>\n<p>En modo stale se puede responder sin qu\u00f3rum. Este es un modo en el que renunciamos a la consistencia de los datos, pero leemos un poco m\u00e1s r\u00e1pido de lo habitual, y cualquier servidor puede responder. Naturalmente, la escritura solo es a trav\u00e9s del maestro.<\/p>\n<p><strong>Consul no copia datos entre centros de datos<\/strong>. Al recolectar la federaci\u00f3n, cada servidor tendr\u00e1 solo sus propios datos. Para los otros, siempre se consulta a alguien m\u00e1s.<\/p>\n<p><strong>La atomicidad de las operaciones no est\u00e1 garantizada fuera de la transacci\u00f3n<\/strong>. Recuerde que no solo usted puede cambiar algo. Si desea hacerlo de otra manera, realice una transacci\u00f3n con bloqueo.<\/p>\n<p><strong>Las operaciones bloqueantes no garantizan el bloqueo<\/strong>. La solicitud va de maestro a maestro, y no directamente, as\u00ed que no hay garant\u00edas de que el bloqueo funcione cuando realice el bloqueo, por ejemplo, en otro centro de datos.<\/p>\n<p><strong>ACL tampoco garantiza el acceso (en muchos casos)<\/strong>. La ACL puede no funcionar porque se almacena en un centro de datos de la federaci\u00f3n: en el centro de datos de ACL (DC Primario). Si el DC no responde, la ACL no funcionar\u00e1.<\/p>\n<p><strong>Un maestro atascado provocar\u00e1 que toda la federaci\u00f3n se quede atascada<\/strong>. Por ejemplo, en una federaci\u00f3n de 10 centros de datos, y en uno hay una mala red, y un maestro se cae. Todos los que interact\u00faan con \u00e9l quedar\u00e1n atascados en un ciclo: se env\u00eda una solicitud, no hay respuesta, el hilo se queda atascado. No ser\u00e1 posible saber cu\u00e1ndo ocurrir\u00e1, simplemente, despu\u00e9s de una hora o dos, toda la federaci\u00f3n caer\u00e1. No podr\u00e1 hacer nada al respecto.<\/p>\n<p>El estado, el qu\u00f3rum y las elecciones son procesados por un hilo separado. No habr\u00e1 reevaluaci\u00f3n, el estado no mostrar\u00e1 nada. Usted cree que su Consul est\u00e1 activo, hace una solicitud y no pasa nada; no hay respuesta. A pesar de esto, el estado muestra que todo est\u00e1 bien.<\/p>\n<p>Nos hemos enfrentado a este problema, hemos tenido que reconstruir partes espec\u00edficas de los centros de datos para evitarlo.<\/p>\n<p><strong>En la versi\u00f3n empresarial de Consul Enterprise no hay algunas de las desventajas mencionadas anteriormente.<\/strong>Tiene muchas funciones \u00fatiles: selecci\u00f3n de votantes, distribuci\u00f3n, escalabilidad. Solo hay un 'pero': el sistema de licencias para un sistema distribuido es muy costoso.<\/p>\n<p>Consejo \u00fatil: <code>rm -rf \/var\/lib\/consul<\/code> \u2014 una medicina para todos los males del agente. Si algo no funciona, simplemente elimina tus datos y carga los datos de una copia. Lo m\u00e1s probable es que Consul funcione.<\/p>\n<h2>BEFW<\/h2>\n<p>\nAhora hablemos de lo que hemos agregado a Consul.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u2014 es un acr\u00f3nimo de <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>all. Ten\u00eda que nombrar el producto cuando cre\u00e9 el repositorio para poner los primeros commits de prueba. Ese nombre se mantuvo.<\/p>\n<h3>Plantillas de reglas<\/h3>\n<p>\nLas reglas est\u00e1n escritas en sintaxis de iptables.<\/p>\n<ul>\n<li>-N BEFW<\/li>\n<li>-P INPUT DROP<\/li>\n<li>-A INPUT -m state\u2014state RELATED,ESTABLISHED -j ACCEPT<\/li>\n<li>-A INPUT -i lo -j ACCEPT<\/li>\n<li>-A INPUT -j BEFW<\/li>\n<\/ul>\n<p>\nTodo se dirige a la cadena BEFW, excepto <code>ESTABLISHED<\/code>, <code>RELATED<\/code> y localhost. La plantilla puede ser cualquier cosa, este es solo un ejemplo.<\/p>\n<p>\u00bfQu\u00e9 utilidad tiene BEFW?<\/p>\n<h3>Servicios<\/h3>\n<p>\nTenemos un servicio, siempre hay un puerto, el nodo en el que se ejecuta. Desde nuestro nodo podemos preguntar localmente al agente y averiguar que tenemos alg\u00fan servicio. Tambi\u00e9n se pueden asignar etiquetas.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/6d8c74db37e2e1eed971cfa6947cc5c8.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCualquier servicio que est\u00e9 en funcionamiento y registrado en Consul se convierte en una regla iptables. Tenemos SSH \u2014 abrimos el puerto 22. El script Bash es simple: curl e iptables, no se necesita nada m\u00e1s.<\/p>\n<h3>Clientes<\/h3>\n<p>\n\u00bfC\u00f3mo brindar acceso no a todos, sino selectivamente? Almacenar listas de IP en el almacenamiento KV por el nombre del servicio.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/11a5af5aad9e848565458f168a1eee64.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor ejemplo, queremos que todos de la d\u00e9cima red puedan acceder al servicio SSH_TCP_22. Agregamos un peque\u00f1o campo TTL? y ahora tenemos permisos temporales, por ejemplo, por un d\u00eda.<\/p>\n<h3>Accesos<\/h3>\n<p>\nConectamos servicios y clientes: tenemos un servicio, para cada uno hay un almacenamiento KV listo. Ahora damos acceso no a todos, sino selectivamente.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/d1119fbb226595184cac8d9ce7a924e3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Grupos<\/h3>\n<p>\nSi cada vez vamos a escribir miles de IP para accesos, nos cansaremos. Vamos a inventar agrupaciones: un subset separado en KV. Lo llamaremos Alias (o grupos) y almacenaremos all\u00ed grupos bajo el mismo principio.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/67c6ab76cc25a3973739bdd44b69cef9.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nConectamos: ahora podemos abrir SSH no espec\u00edficamente en P2P, sino a todo un grupo o varios grupos. Igualmente hay TTL \u2014 se puede agregar y eliminar temporalmente de un grupo.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/a00b7db5087a96730c2725090f33e2b0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Integraci\u00f3n<\/h3>\n<p>\nNuestro problema\u2014el factor humano y la automatizaci\u00f3n. Por ahora, lo hemos resuelto as\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/ce7a0c16543d0624453e6bdada3b8f03.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTrabajamos con Puppet y transferimos todo lo relacionado con el sistema (c\u00f3digo de aplicaciones). En puppetdb (un PostgreSQL est\u00e1ndar) se almacena una lista de servicios que est\u00e1n en ejecuci\u00f3n, que se pueden encontrar por tipo de recurso. Tambi\u00e9n se puede ver a qui\u00e9n se est\u00e1 dirigiendo cada uno. Adem\u00e1s, tenemos un sistema de pull request y merge request para esto.<\/p>\n<p>Escribimos befw-sync, una soluci\u00f3n sencilla que ayuda a transferir datos. Primero, sync cookies se comunica con puppetdb. All\u00ed est\u00e1 configurada una API HTTP: solicitamos qu\u00e9 servicios tenemos y qu\u00e9 se necesita hacer. Luego se hace una solicitud a Consul.<\/p>\n<p>\u00bfHay integraci\u00f3n? S\u00ed: hemos escrito las reglas y permitido aceptar Pull Requests. \u00bfSe necesita alg\u00fan puerto o agregar un host a alg\u00fan grupo? Pull Request, revisi\u00f3n: no m\u00e1s \"Encuentra 200 otras ACL y trata de hacer algo con esto\".<\/p>\n<h3>Optimizaci\u00f3n<\/h3>\n<p>\nHacer ping a localhost con una cadena de reglas vac\u00eda toma 0,075 ms.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/39263844f79c4795af05dc3ecb734394.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAgregaremos 10,000 direcciones a la cadena de iptables. Como resultado, el ping aumentar\u00e1 5 veces: iptables es completamente lineal, el procesamiento de cada direcci\u00f3n toma un tiempo.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/e6c314155c3a34fdf61e40479ecb26c3.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara el firewall al que estamos migrando miles de ACL, tenemos muchas reglas, y eso introduce latencia. Esto es malo para protocolos de juego.<\/p>\n<p>Pero si colocamos <strong>10,000 direcciones en ipset,<\/strong> el ping incluso disminuir\u00e1.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/2dd844d9324d057ba9ab098e501a1e51.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl sentido es que \"O\" (la complejidad del algoritmo) para ipset siempre es igual a 1, sin importar cu\u00e1ntas reglas haya. Sin embargo, hay una limitaci\u00f3n: no puede haber m\u00e1s de 65,535 reglas. Por ahora convivimos con esto: se pueden combinar, ampliar, crear dos ipset en uno.<\/p>\n<h3>Almacenamiento<\/h3>\n<p>\nLa continuaci\u00f3n l\u00f3gica del proceso de iteraciones es almacenar informaci\u00f3n sobre los clientes para el servicio en ipset.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/126069799d95594be8611237e935189d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAhora tenemos el mismo SSH, y no escribimos inmediatamente 100 IP, sino que especificamos el nombre de ipset con el que hay que comunicarse, y la siguiente regla <code>ELIMINAR<\/code>. Se puede convertir en una sola regla \"Quien no est\u00e9 aqu\u00ed, que se descarte\", pero as\u00ed es m\u00e1s visual.<\/p>\n<p>Ahora tenemos reglas y conjuntos. La tarea principal es crear el conjunto antes de escribir la regla, porque de lo contrario iptables no registrar\u00e1 la regla.<\/p>\n<h3>Esquema general<\/h3>\n<p>\nEn forma de esquema, todo lo que he explicado se ve as\u00ed.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4046e921cb5f466f8af5a6af1fcd151c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHacemos commit en Puppet, todo se env\u00eda al host, los servicios est\u00e1n aqu\u00ed, ipset all\u00ed, y quien no est\u00e9 registrado all\u00ed, no es permitido.<\/p>\n<h3>Permitir y denegar<\/h3>\n<p>\nPara salvar el mundo r\u00e1pidamente o desconectar a alguien r\u00e1pidamente, al principio de todas las cadenas hemos creado dos ipsets: <code>rules_allow<\/code> y <code>rules_deny<\/code>. \u00bfC\u00f3mo funciona esto?<\/p>\n<p>Por ejemplo, alguien genera carga en nuestro Web con bots. Antes hab\u00eda que buscar su IP en los registros, llevarla a los ingenieros de red para que encontraran el origen del tr\u00e1fico y lo bloquearan. Ahora, esto se ve diferente.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/6e7f906919536cab2c283ba6ceb0472d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnviamos a Consul, esperamos 2.5 segundos, y est\u00e1 listo. Dado que Consul distribuye r\u00e1pidamente a trav\u00e9s de P2P, funciona en cualquier parte del mundo.<\/p>\n<p>Una vez, detuve completamente WOT, equivoc\u00e1ndome con el firewall. <code>rules_allow<\/code> \u2014 esta es nuestra p\u00f3liza contra tales casos. Si en alg\u00fan lugar cometimos un error con el firewall, que bloquea algo, siempre podemos enviar un condicional <code>0.0\/0<\/code>, para levantar todo r\u00e1pidamente. Luego, podremos repararlo manualmente.<\/p>\n<h3>Otros conjuntos<\/h3>\n<p>\nSe pueden a\u00f1adir otros conjuntos en el espacio <code>$IPSETS$<\/code>.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/4e1e337b35da81cd7324b2adc106b085.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00bfPor qu\u00e9? A veces, alguien necesita ipset, por ejemplo, para emular la desconexi\u00f3n de una parte del cl\u00faster. Cualquiera puede traer cualquier conjunto, nombrarlo y se recoger\u00e1n de Consul. Adem\u00e1s, los conjuntos pueden participar en las reglas de iptables, o ser como un comando <code>NOOP<\/code>: la consistencia ser\u00e1 mantenida por el demonio.<\/p>\n<h3>Usuarios<\/h3>\n<p>\nAntes era as\u00ed: el usuario se conectaba a la red y obten\u00eda par\u00e1metros a trav\u00e9s de un dominio. Hasta que aparecieron los firewalls de nueva generaci\u00f3n, Cisco no pod\u00eda entender d\u00f3nde estaba el usuario y d\u00f3nde estaba la IP. Por lo tanto, el acceso solo se otorgaba a trav\u00e9s del hostname de la m\u00e1quina.<\/p>\n<p>\u00bfQu\u00e9 hicimos? Interrumpimos en el momento de obtener la direcci\u00f3n. Generalmente, esto es dot1x, Wi-Fi o VPN \u2014 todo pasa a trav\u00e9s de RADIUS. Para cada usuario creamos un grupo bajo su nombre de usuario y colocamos en \u00e9l la IP con un TTL que equivale a su dhcp.lease \u2014 tan pronto como expire, la regla desaparecer\u00e1.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/04550475c6af49d094c18b1d5b89123a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAhora podemos otorgar acceso a los servicios, como a otros grupos, seg\u00fan el nombre de usuario. Nos hemos librado del dolor con los hostnames cuando cambian, y hemos aliviado la carga de los ingenieros de red, porque ya no necesitan Cisco. Ahora los ingenieros establecen los accesos en sus servidores.<\/p>\n<h3>\u26a0\ufe0f Limitado<\/h3>\n<p>\nParalelamente, comenzamos a desmantelar la aislamiento. Los gerentes de servicios hicieron un inventario y nosotros analizamos todas nuestras redes. Las organizamos en grupos similares, y en los servidores necesarios, agregamos grupos, por ejemplo, en deny. Ahora, el mismo aislamiento de staging se encuentra en rules_deny en producci\u00f3n, pero no en la producci\u00f3n misma.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/60fe7407013aa64b853791f8def627cc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl esquema funciona r\u00e1pido y simple: eliminamos todos los ACL de los servidores, reducimos la carga de hardware y disminuimos la cantidad de VLAN aisladas.<\/p>\n<h3>Control de integridad<\/h3>\n<p>\nAntes ten\u00edamos un desencadenador especial que avisaba cuando alguien cambiaba manualmente una regla del firewall. Yo escrib\u00ed un enorme linter para comprobar las reglas del firewall, fue complicado. Ahora la integridad la controla BEFW. Vigila celosamente que las reglas que \u00e9l establece no se modifiquen. Si alguien cambia las reglas del firewall, revertir\u00e1 todo. \"R\u00e1pidamente levant\u00e9 un proxy para trabajar desde casa\" \u2014 esa opci\u00f3n ya no existe.<\/p>\n<p>BEFW controla ipset desde los servicios y la lista en befw.conf, las reglas de los servicios en la cadena BEFW. Pero no monitorea otras cadenas y reglas ni otros ipsets.<\/p>\n<h3>Protecci\u00f3n contra fallos<\/h3>\n<p>\nBEFW siempre guarda el \u00faltimo estado exitoso directamente en la estructura binaria state.bin. Si algo sale mal, siempre retrocede a este state.bin.<\/p>\n<p><img decoding=\"async\" alt=\"Consul + iptables = :3\" src=\"\/wp-content\/uploads\/2020\/02\/724f3537c06a7135fa6397f9ddd5630f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsto es un seguro contra el funcionamiento inestable de Consul, cuando no envi\u00f3 datos o alguien cometi\u00f3 un error y utiliz\u00f3 reglas que no se pueden aplicar. Para que no nos quedemos sin firewall, BEFW revertir\u00e1 al \u00faltimo estado si en alg\u00fan momento ocurre un error.<\/p>\n<p>En situaciones cr\u00edticas, esto garantiza que mantengamos un firewall funcional. Abrimos todas las redes grises con la esperanza de que el administrador venga y lo repare. Alg\u00fan d\u00eda llevar\u00e9 esto a la configuraci\u00f3n, pero ahora solo tenemos tres redes grises: 10\/8, 172\/12 y 192.168\/16. Dentro de nuestro Consul, esta es una caracter\u00edstica importante que ayuda a avanzar.<\/p>\n<p><em>Demo: durante la presentaci\u00f3n, Iv\u00e1n demuestra el modo demo de funcionamiento de BEFW. Es m\u00e1s f\u00e1cil ver la demostraci\u00f3n en <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">videos<\/a><\/noindex>. El c\u00f3digo fuente de la demo est\u00e1 disponible <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\/tree\/master\/demo\">en GitHub<\/a><\/noindex>.<\/em><\/p>\n<h2>Puntos ocultos<\/h2>\n<p>\nLes hablar\u00e9 sobre los errores con los que nos encontramos.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>\u00bfQu\u00e9 suceder\u00e1 si agregas 0.0.0.0\/0 a ipset? \u00bfSe agregar\u00e1n todas las IP? \u00bfSe abrir\u00e1 el acceso a internet? <\/p>\n<p>No, obtendremos un error que nos cost\u00f3 dos horas de tiempo de inactividad. Adem\u00e1s, el error no se ha corregido desde 2016, est\u00e1 en RedHat Bugzilla bajo el n\u00famero #1297092, y lo encontramos por casualidad \u2014 a partir del informe del desarrollador.<\/p>\n<p>Ahora en BEFW existe una regla estricta que <code>0.0.0.0\/0<\/code> se convierte en dos direcciones: <code>0.0.0.0\/1<\/code> y <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; file. <\/strong>\u00bfQu\u00e9 hace ipset cuando le dices <code>restore?<\/code>? \u0412\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a iptables? \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435?<\/p>\n<p>Nada parecido \u2014 hace un merge, y las direcciones antiguas no desaparecen, no cierras el acceso.<\/p>\n<p>Encontramos el error cuando prob\u00e1bamos la isolaci\u00f3n. Ahora hay un sistema bastante complejo \u2014 en lugar de <code>restore?<\/code> se realiza <code>create temp<\/code>, luego <code>restore flush temp<\/code> y <code>restore temp<\/code>. Al final, swap: para la atomicidad, porque si primero se realiza <code>flush<\/code> Y en ese momento, si llega alg\u00fan paquete, ser\u00e1 rechazado y algo saldr\u00e1 mal. Por eso, hay un poco de magia negra.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>Como ya mencion\u00e9, pensamos que estamos solicitando algunos datos, pero recibiremos ya sea datos o un error. Podemos hacer esto a trav\u00e9s de Consul localmente, pero en este caso tanto uno como otro se congelar\u00e1n.<\/p>\n<p>El cliente local de Consul es una envoltura sobre la API HTTP. Pero simplemente se congela y no responde ni a Ctrl+C, ni a Ctrl+Z, ni a nada, solo a <code>, finalizar suavemente el proceso y detener el servidor (<\/code> en la consola vecina. Nos enfrentamos a esto cuando construimos un gran cl\u00faster. Pero a\u00fan no tenemos soluciones, estamos prepar\u00e1ndonos para corregir este error en Consul.<\/p>\n<p><strong>El l\u00edder de Consul no responde. <\/strong>Nuestro m\u00e1ster en el centro de datos no responde, pensamos: \"\u00bfQuiz\u00e1s ahora funcionar\u00e1 el algoritmo de reelecci\u00f3n?\" <\/p>\n<p>No, no funcionar\u00e1, y la vigilancia no mostrar\u00e1 nada: Consul dir\u00e1 que el \u00edndice de compromiso existe, el l\u00edder fue encontrado, todo est\u00e1 bien.<\/p>\n<p>\u00bfC\u00f3mo luchamos contra esto? <code>service consul restart<\/code> en cron cada hora. Si tienes 50 servidores, no hay problema. Cuando tenga 16,000, entender\u00e1s c\u00f3mo funciona.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>\nAl final, obtuvimos las siguientes ventajas:<\/p>\n<ul>\n<li>100% de cobertura de todas las m\u00e1quinas Linux.<\/li>\n<li>Velocidad.<\/li>\n<li>Automatizaci\u00f3n.<\/li>\n<li>Liberamos el hardware y a los ingenieros de redes de la esclavitud.<\/li>\n<li>Surgen posibilidades de integraci\u00f3n que son pr\u00e1cticamente ilimitadas: desde Kubernetes hasta Ansible, o Python.<\/li>\n<\/ul>\n<p>\n<strong>Desventajas<\/strong>: Consul, con el que ahora debemos vivir, y un precio de error muy alto. Por ejemplo, una vez a las 6 de la tarde (hora pico en Rusia) estaba ajustando algo en las listas de redes. Justo en ese momento est\u00e1bamos construyendo la aislamiento en BEFW. Comet\u00ed alg\u00fan error, parece que indiqu\u00e9 una m\u00e1scara equivocada, pero todo fall\u00f3 en dos segundos. La vigilancia se activa, el soporte acude: \"\u00a1Todo est\u00e1 ca\u00eddo!\" El jefe del departamento se volvi\u00f3 canoso mientras explicaba a la empresa por qu\u00e9 ocurri\u00f3 eso.<\/p>\n<p>El precio del error es tan alto que ideamos un complejo procedimiento de prevenci\u00f3n. Si vas a implementar esto en una gran producci\u00f3n, no des el token de m\u00e1ster sobre Consul a todo el mundo. Terminar\u00e1 mal.<\/p>\n<p><strong>Costo. <\/strong>Escrib\u00ed c\u00f3digo durante 400 horas en solitario. Mi equipo de 4 personas gasta 10 horas al mes en soporte para todos. En comparaci\u00f3n con el costo de cualquier firewall de nueva generaci\u00f3n, esto es gratis.<\/p>\n<p><strong>Planes. <\/strong>El plan a largo plazo es buscar un transporte alternativo en lugar de o adem\u00e1s de Consul. Podr\u00eda ser Kafka o algo similar. Pero en los pr\u00f3ximos a\u00f1os vivimos con Consul.<\/p>\n<p>Planes m\u00e1s cercanos: integraci\u00f3n con Fail2ban, monitoreo, nftables, posiblemente con otras distribuciones, m\u00e9tricas, monitoreo avanzado, optimizaci\u00f3n. El soporte para Kubernetes tambi\u00e9n est\u00e1 en nuestros planes, ya que actualmente tenemos varios cl\u00fasteres y el deseo de implementarlo.<\/p>\n<p>M\u00e1s planes:<\/p>\n<ul>\n<li>b\u00fasqueda de anomal\u00edas en el tr\u00e1fico;<\/li>\n<li>gesti\u00f3n del mapa de red;<\/li>\n<li>soporte para Kubernetes;<\/li>\n<li>compilaci\u00f3n de paquetes para todos los sistemas;<\/li>\n<li>Interfaz Web.<\/li>\n<\/ul>\n<p>\nConstantemente estamos trabajando en la expansi\u00f3n de la configuraci\u00f3n, aumento de m\u00e9tricas y optimizaci\u00f3n.<\/p>\n<p><i>\u00danete al proyecto. El proyecto es genial, pero, desafortunadamente, por ahora es un proyecto de una persona. Ven a <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>y trata de hacer algo: haz un commit, prueba algo, sugiere algo, dale tu opini\u00f3n.<\/i><\/p>\n<blockquote><p>Mientras tanto, nos estamos preparando para <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\">Saint HighLoad++<\/a><\/noindex>, que se llevar\u00e1 a cabo el 6 y 7 de abril en San Petersburgo, e invitamos a desarrolladores de sistemas de alta carga <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">a presentar propuestas de ponencias<\/a><\/noindex>. Los ponentes experimentados ya saben qu\u00e9 hacer, y recomendamos a los principiantes en presentaciones que al menos <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">probar<\/a><\/noindex>. Participar en la conferencia como ponente tiene varias ventajas. Puedes leer sobre cu\u00e1les son, por ejemplo, al final de <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486142\/\">de este art\u00edculo<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486842\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0440\u043e\u0441\u043b\u043e, \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u0430\u0441\u044c: \u0441\u0442\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0438, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 VLAN \u0441 ACL, \u043f\u043e\u0442\u043e\u043c VPN \u0441 VRF, VLAN c ACL \u043d\u0430 L2, VRF \u0441 ACL \u043d\u0430 L3. \u0417\u0430\u043a\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u0433\u043e\u043b\u043e\u0432\u0430? \u0414\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0435\u043b\u0435\u0435. \u041a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u0442\u0430\u043b\u043e 16 000 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u0441\u043b\u0435\u0437 \u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41052,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/consul-iptables-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Consul + iptables = :3 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/consul-iptables-3\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-05T18:28:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-05T18:28:58+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Consul + iptables = :3 | ProHoster","description":"En 2010, la empresa Wargaming ten\u00eda 50 servidores y un modelo de red simple: backend, frontend y firewall.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/consul-iptables-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Consul + iptables = :3 | ProHoster","og:description":"\u0412 2010 \u0433\u043e\u0434\u0443 \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Wargaming \u0431\u044b\u043b\u043e 50 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c: \u0431\u044d\u043a\u0435\u043d\u0434, \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u0438 \u0444\u0430\u0439\u0440\u0432\u043e\u043b.","og:url":"https:\/\/prohoster.info\/es\/blog\/consul-iptables-3","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-05T18:28:58+00:00","article:modified_time":"2020-02-05T18:28:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41051","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:24:42","updated":"2022-10-01 10:00:06","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/41051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=41051"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/41051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/41052"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=41051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=41051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=41051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}