{"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\/de\/blog\/consul-iptables-3","title":{"rendered":"Consul + iptables = :3","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Im Jahr 2010 hatte das Unternehmen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/wargaming\/\">Wargaming<\/a><\/noindex> 50 Server und ein einfaches Netzwerkmodell: Backend, Frontend und Firewall. Die Anzahl der Server wuchs, das Modell wurde komplexer: Staging, isolierte VLAN mit ACL, dann VPN mit VRF, VLAN mit ACL auf L2, VRF mit ACL auf L3. Schwindelig geworden? Es wird noch spannender.<\/p>\n<p>Als die Anzahl der Server auf 16.000 anstieg, wurde es unm\u00f6glich, ohne Tr\u00e4nen mit einer solchen Menge an heterogenen Segmenten zu arbeiten. Daher kam eine andere L\u00f6sung auf. Wir verwendeten den Netfilter-Stack, f\u00fcgten ihm Consul als Datenquelle hinzu, und erhielten eine schnelle verteilte Firewall. Diese ersetzte ACL auf den Routern und wurde sowohl als externe als auch interne Firewall genutzt. F\u00fcr die dynamische Verwaltung des Tools entwickelten wir das BEFW-System, das wir \u00fcberall anwendeten: von der Benutzerzugangsverwaltung im Produktivnetzwerk bis zur Isolation von Netzwerkssegmenten voneinander.<\/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 \/>\nWie das alles funktioniert und warum Sie diesem System Aufmerksamkeit schenken sollten, erkl\u00e4rt <strong>Iwan Agarokov<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2013 Leiter der Gruppe f\u00fcr Infrastruktur-Sicherheit der Maintenance-Abteilung im Entwicklungszentrum in Minsk des Unternehmens. Iwan ist ein Fan von SELinux, liebt Perl und schreibt Code. Als Leiter der IT-Sicherheitsgruppe arbeitet er regelm\u00e4\u00dfig mit Logs, Backups und R&amp;D, um Wargaming vor Hackern zu sch\u00fctzen und den Betrieb aller Spieleserver im Unternehmen sicherzustellen.<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=\"Video abspielen\" 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>Historisches Nachschlagewerk<\/h2>\n<p>\nBevor ich erkl\u00e4re, wie wir das gemacht haben, erz\u00e4hle ich, wie wir \u00fcberhaupt dazu gekommen sind und warum es notwendig war. Daf\u00fcr reisen wir 9 Jahre zur\u00fcck: Jahr 2010, World of Tanks just erschienen. Wargaming hatte etwa 50 Server.<\/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>Grafik des Serverwachstums des Unternehmens.<\/em><\/p>\n<p>Wir hatten ein Netzwerkmodell. Zu der Zeit war es optimal.<\/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>Das Netzwerkmodell im Jahr 2010.<\/em><\/p>\n<p>Im Frontend leben die B\u00f6sewichte, die uns kaputt machen wollen, aber es gibt eine Firewall. Im Backend gibt es keine Firewall, aber dort sind 50 Server, die wir alle kennen. Alles funktioniert gut.<\/p>\n<p>In 4 Jahren wuchs der Serverpark auf das 100-fache, auf 5000. Die ersten isolierten Netzwerke - Staging - wurden eingef\u00fchrt: sie k\u00f6nnen nicht in die Produktion gehen, dort drehte sich oft etwas, das gef\u00e4hrlich sein konnte.<\/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>Das Netzwerkmodell im Jahr 2014.<\/em><\/p>\n<p>Wir verwendeten aus Gewohnheit die gleichen Ger\u00e4te, und die gesamte Arbeit wurde auf isolierten VLAN durchgef\u00fchrt: zu den VLAN wurden ACL geschrieben, die eine Verbindung erlauben oder verweigern.<\/p>\n<p>Im Jahr 2016 erreichte die Anzahl der Server 8000. Wargaming \u00fcbernahm andere Studios, und es entstanden zus\u00e4tzliche Partnernetzwerke. Sie scheinen unsere zu sein, sind es aber nicht ganz: F\u00fcr Partner funktioniert VLAN oft nicht, es muss ein VPN mit VRF verwendet werden, die Isolierungen werden komplizierter. Eine Mischung aus Isolierungen von ACL nahm zu.<\/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>Das Netzwerkmodell im Jahr 2016.<\/em><\/p>\n<p>Anfang 2018 wuchs der Maschinenpark auf 16.000. Es gab 6 Segmente, die anderen haben wir nicht gez\u00e4hlt, einschlie\u00dflich der geschlossenen, in denen Finanzdaten gespeichert waren. Es entstanden Containernetzwerke (Kubernetes), DevOps, Cloud-Netzwerke, die per VPN verbunden waren, beispielsweise aus IWS. Es gab sehr viele Regeln \u2014 es war schmerzhaft.<\/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>Das Netzwerkmodell und die Isolationsmethoden im Jahr 2018.<\/em><\/p>\n<p>F\u00fcr die Isolierung verwendeten wir: VLAN mit ACL auf L2, VRF mit ACL auf L3, VPN und vieles andere. Viel zu viel.<\/p>\n<h2>Probleme<\/h2>\n<p>\nAlle leben mit ACL und VLAN. Was ist \u00fcberhaupt das Problem? Auf diese Frage wird Harold antworten, der den Schmerz verbirgt.<\/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 \/>\nEs gab viele Probleme, aber die massiven \u2014 f\u00fcnf.<\/p>\n<ul>\n<li><strong>Geometrisches Wachstum der Kosten f\u00fcr neue Regeln<\/strong>. Jede neue Regel wurde l\u00e4nger hinzugef\u00fcgt als die vorherige, weil zuerst gepr\u00fcft werden musste, ob es diese Regel bereits gab.<\/li>\n<li><strong>Kein Firewall innerhalb der Segmente<\/strong>. Die Segmente waren irgendwie voneinander getrennt, innen fehlten bereits die Ressourcen.<\/li>\n<li><strong>Die Regeln wurden lange angewendet. <\/strong>Manuell konnte ein Operateur eine lokale Regel in einer Stunde schreiben. Eine globale dauerte mehrere Tage.<\/li>\n<li><strong>Schwierigkeiten mit dem Audit der Regeln<\/strong>. Genauer gesagt, es war nicht m\u00f6glich. Die ersten Regeln wurden bereits 2010 geschrieben, und die meisten ihrer Autoren arbeiteten nicht mehr im Unternehmen.<\/li>\n<li><strong>Niedriges Kontrollniveau \u00fcber die Infrastruktur<\/strong>. Das ist das Hauptproblem \u2014 wir wussten schlecht, was bei uns \u00fcberhaupt vor sich ging.<\/li>\n<\/ul>\n<p>\nSo sah ein Netzwerkingenieur im Jahr 2018 aus, als er h\u00f6rte: \u201eWir brauchen noch etwas mehr ACL\u201c.<\/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>L\u00f6sungen<\/h2>\n<p>\nAnfang 2018 wurde beschlossen, etwas dagegen zu tun.<\/p>\n<p><strong>Die Kosten f\u00fcr Integrationen steigen kontinuierlich. <\/strong>Der Ausgangspunkt war, dass gro\u00dfe Rechenzentren aufh\u00f6rten, isolierte VLAN und ACL zu unterst\u00fctzen, da der Speicher auf den Ger\u00e4ten zur Neige ging.<\/p>\n<p>L\u00f6sung: Den menschlichen Faktor entfernt und den Zugang so weit wie m\u00f6glich automatisiert.<\/p>\n<p><strong>Neue Regeln werden lange angewendet. <\/strong>L\u00f6sung: Das Anwenden von Regeln beschleunigen, es dezentral und parallel gestalten. Daf\u00fcr ist ein verteiltes System erforderlich, damit die Regeln selbstt\u00e4tig verteilt werden, ohne rsync oder SFTP auf tausend Systeme.<\/p>\n<p><strong>Das Fehlen einer Firewall innerhalb der Segmente. <\/strong>Die Firewall innerhalb der Segmente begann, uns zu erreichen, als in einem Netzwerk verschiedene Dienste auftauchten. L\u00f6sung: Verwenden Sie Firewalls auf Host-Ebene - host-basierte Firewalls. \u00dcberall haben wir Linux und \u00fcberall gibt es iptables, das ist kein Problem.<\/p>\n<p><strong>Schwierigkeiten bei der \u00dcberpr\u00fcfung der Regeln.<\/strong> L\u00f6sung: Alle Regeln an einem Ort f\u00fcr die \u00dcbersicht und Verwaltung speichern, so k\u00f6nnen wir alles \u00fcberpr\u00fcfen.<\/p>\n<p><strong>Niedriges Niveau der Kontrolle \u00fcber die Infrastruktur. <\/strong>L\u00f6sung: Eine Inventarisierung aller Dienste und Zugriffe zwischen ihnen durchf\u00fchren.<\/p>\n<p>Das ist mehr ein administrativer Prozess als ein technischer. Manchmal haben wir 200-300 neue Releases pro Woche, besonders w\u00e4hrend von Aktionen und Feiertagen. Das ist nur f\u00fcr ein Team unserer DevOps. Mit so vielen Releases ist es unm\u00f6glich zu sehen, welche Ports, IPs, Integrationen ben\u00f6tigt werden. Daher ben\u00f6tigen wir speziell ausgebildete Service-Manager, die die Teams befragen: \u201eWas gibt es und warum habt ihr das hochgefahren?\u201c<\/p>\n<p>Nach allem, was wir in 2019 gestartet haben, sah der Netzwerkingenieur bereits so aus.<\/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>\nWir haben entschieden, alles, was wir mit Hilfe der Service-Manager gefunden haben, in Consul zu speichern und von dort die iptables-Regeln zu schreiben.<\/p>\n<p>Wie haben wir beschlossen, das zu tun?<\/p>\n<ul>\n<li>Alle Dienste, Netzwerke und Benutzer sammeln.<\/li>\n<li>Darauf basierend iptables-Regeln erstellen.<\/li>\n<li>Die Kontrolle automatisieren.<\/li>\n<li>\u2026.<\/li>\n<li>PROFIT.<\/li>\n<\/ul>\n<p>\nConsul ist keine entfernte API, es kann auf jedem Knoten arbeiten und in iptables schreiben. Es bleibt nur, automatische Kontrollmittel zu erfinden, die \u00dcberfl\u00fcssiges bereinigen, und der Gro\u00dfteil der Probleme wird gel\u00f6st! Den Rest werden wir im Prozess ausarbeiten.<\/p>\n<h3>Warum Consul?<\/h3>\n<p>\n<strong>Hat sich bew\u00e4hrt. <\/strong>In den Jahren 2014-15 haben wir es als Backend f\u00fcr Vault verwendet, in dem wir Passw\u00f6rter speichern.<\/p>\n<p><strong>Verliert keine Daten.<\/strong>. W\u00e4hrend der gesamten Nutzung hat Consul bei keinem Vorfall Daten verloren. Das ist ein gro\u00dfer Vorteil f\u00fcr das Firewallsystem.<\/p>\n<p><strong>P2P-Verbindungen beschleunigen die Verbreitung von \u00c4nderungen.<\/strong>. Mit P2P kommen alle \u00c4nderungen schnell, man muss nicht stundenlang warten.<\/p>\n<p><strong>Bequeme REST API.<\/strong> Wir haben auch Apache ZooKeeper in Betracht gezogen, aber es hat keine REST API, da m\u00fcsste man Kompromisse eingehen.<\/p>\n<p><strong>Funktioniert sowohl als Schl\u00fcsselwertspeicher (KV) als auch als Verzeichnis (Service Discovery).<\/strong>. Man kann gleichzeitig Dienste, Verzeichnisse und Rechenzentren speichern. Das ist nicht nur f\u00fcr uns praktisch, sondern auch f\u00fcr benachbarte Teams, denn beim Aufbau eines globalen Dienstes denken wir gro\u00df.<\/p>\n<p><strong>Ist in Go geschrieben, das zum Stack von Wargaming geh\u00f6rt. <\/strong>Wir lieben diese Sprache, wir haben viele Go-Entwickler.<\/p>\n<p><strong>Leistungsstarkes ACL-System. <\/strong>Mit ACL in Consul kann man steuern, wer was schreiben darf. Wir garantieren, dass die Firewall-Regeln sich nicht mit etwas anderem \u00fcberschneiden, und wir werden damit keine Probleme haben.<\/p>\n<p>Aber Consul hat auch Nachteile.<\/p>\n<ul>\n<li><strong>Skaliert nicht innerhalb des Rechenzentrums, wenn Sie nicht die Business-Version haben. <\/strong>Es skaliert nur \u00fcber F\u00f6deration.<\/li>\n<li><strong>Sehr abh\u00e4ngig von der Netzwerkqualit\u00e4t und der Serverlast. <\/strong>Consul wird nicht gut als Server auf einem stark belasteten Server laufen, wenn es im Netzwerk Verz\u00f6gerungen gibt, zum Beispiel eine unregelm\u00e4\u00dfige Geschwindigkeit. Dies h\u00e4ngt mit P2P-Verbindungen und den Verteilungsmodellen von Updates zusammen.<\/li>\n<li><strong>Schwierigkeiten bei der \u00dcberwachung der Verf\u00fcgbarkeit<\/strong>. Im Status von Consul kann stehen, dass alles gut ist, w\u00e4hrend er schon l\u00e4ngst down ist.<\/li>\n<\/ul>\n<p>\nDie meisten dieser Probleme haben wir w\u00e4hrend des Betriebs von Consul gel\u00f6st, weshalb wir uns daf\u00fcr entschieden haben. Es gibt Pl\u00e4ne f\u00fcr ein alternatives Backend, aber wir haben gelernt, mit den Problemen umzugehen und leben vorerst mit Consul.<\/p>\n<h3>Wie Consul funktioniert<\/h3>\n<p>\nWir installieren Server in einem hypothetischen Rechenzentrum \u2013 von drei bis f\u00fcnf. Ein oder zwei Server reichen nicht aus: sie k\u00f6nnen kein Quorum bilden und entscheiden, wer recht hat und wer nicht, wenn die Daten nicht \u00fcbereinstimmen. Mehr als f\u00fcnf sind nicht sinnvoll, die Leistung wird sinken.<\/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 \/>\nClients verbinden sich in beliebiger Reihenfolge mit den Servern: dieselben Agenten, nur mit dem Flag <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 \/>\nNach diesem Schritt erhalten die Clients eine Liste von P2P-Verbindungen und bauen untereinander Verbindungen auf.<\/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 \/>\nAuf globaler Ebene verbinden wir mehrere Rechenzentren miteinander. Diese verbinden sich ebenfalls P2P und kommunizieren.<\/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 \/>\nWenn wir Daten von einem anderen Rechenzentrum abrufen m\u00f6chten, geht die Anfrage von Server zu Server. Dieses Schema wird genannt <strong>Serf-Protokoll<\/strong>. Das Serf-Protokoll, wie auch Consul, ist eine Entwicklung von HashiCorp.<\/p>\n<h3>Einige wichtige Fakten \u00fcber Consul<\/h3>\n<p>\nConsul hat eine Dokumentation, die seine Funktionsweise beschreibt. Ich werde nur einige ausgew\u00e4hlte Fakten anf\u00fchren, die man wissen sollte.<\/p>\n<p><strong>Consul-Server w\u00e4hlen einen Master aus den abstimmenden<\/strong>. Consul w\u00e4hlt f\u00fcr jedes Rechenzentrum einen Master aus der Liste der Server, und alle Anfragen gehen nur an ihn, unabh\u00e4ngig von der Anzahl der Server. Ein H\u00e4nger des Masters f\u00fchrt nicht zu Neuwahlen. Wenn kein Master gew\u00e4hlt ist, werden keine Anfragen bearbeitet.<\/p>\n<blockquote><p>Wollten Sie horizontale Skalierung? Tut mir leid, nein.<\/p><\/blockquote>\n<p> Anfrage an ein anderes Rechenzentrum erfolgt von Master zu Master, unabh\u00e4ngig von dem Server, an den sie gesendet wurde. Der ausgew\u00e4hlte Master erh\u00e4lt 100% der Last, abgesehen von der Last der Weiterleitungsanfragen. Eine aktuelle Kopie der Daten befindet sich auf allen Servern des Rechenzentrums, aber nur einer antwortet.<\/p>\n<blockquote><p>Der einzige Weg zur Skalierung ist die Aktivierung des Stale-Modus auf dem Client.<\/p><\/blockquote>\n<p>Im Stale-Modus kann ohne Quorum geantwortet werden. Dies ist der Modus, in dem wir auf Konsistenz der Daten verzichten, aber etwas schneller lesen als gew\u00f6hnlich, und jeder Server antwortet. Nat\u00fcrlich erfolgt die Aufnahme nur \u00fcber den Master.<\/p>\n<p><strong>Consul kopiert keine Daten zwischen den Rechenzentren<\/strong>. Bei der Zusammenstellung einer F\u00f6deration hat jeder Server nur seine eigenen Daten. F\u00fcr andere wendet er sich immer an jemand anderen.<\/p>\n<p><strong>Die Atomarit\u00e4t von Operationen kann au\u00dferhalb von Transaktionen nicht gew\u00e4hrleistet werden<\/strong>. Denken Sie daran, dass nicht nur Sie etwas \u00e4ndern k\u00f6nnen. Wenn Sie es anders m\u00f6chten, f\u00fchren Sie eine Transaktion mit Sperre durch.<\/p>\n<p><strong>Blockierende Operationen garantieren keine Sperren<\/strong>. Die Anfrage geht von Master zu Master und nicht direkt, daher gibt es keine Garantien, dass die Sperre funktioniert, wenn Sie sie z.B. in einem anderen Rechenzentrum durchf\u00fchren.<\/p>\n<p><strong>ACL garantiert ebenfalls keinen Zugriff (in vielen F\u00e4llen)<\/strong>. ACL k\u00f6nnte nicht funktionieren, weil sie in einem der Rechenzentren der F\u00f6deration gespeichert wird \u2014 im ACL-Rechenzentrum (Prim\u00e4r-DC). Wenn das DC Ihnen nicht antwortet, wird die ACL nicht funktionieren.<\/p>\n<p><strong>Ein h\u00e4ngender Master f\u00fchrt zu einem H\u00e4ngen der gesamten F\u00f6deration<\/strong>. Zum Beispiel sind in einer F\u00f6deration 10 Rechenzentren, und eines hat ein schlechtes Netzwerk, und ein Master f\u00e4llt aus. Alle, die mit ihm kommunizieren, h\u00e4ngen im Kreis: Es wird eine Anfrage gesendet, es gibt keine Antwort, der Thread h\u00e4ngt. Es wird nicht m\u00f6glich sein, herauszufinden, wann dies passiert; einfach nach einer Stunde oder zwei wird die gesamte F\u00f6deration ausfallen. Sie werden nichts dagegen tun k\u00f6nnen.<\/p>\n<p>Status, Quorum und Wahlen werden von einem separaten Thread verarbeitet. Es wird keine Neuwahlen geben, der Status wird nichts zeigen. Sie denken, dass Sie einen aktiven Consul haben, fragen nach, und es passiert nichts \u2014 keine Antwort. Dabei zeigt der Status, dass alles in Ordnung ist.<\/p>\n<p>Wir sind auf dieses Problem gesto\u00dfen, wir mussten bestimmte Teile der Rechenzentren neu gestalten, um es zu vermeiden.<\/p>\n<p><strong>In der Business-Version von Consul Enterprise fehlen einige der oben genannten Nachteile.<\/strong>. Es gibt viele n\u00fctzliche Funktionen: Auswahl der Abstimmenden, Verteilung, Skalierung. Es gibt nur ein \u201eAber\u201c \u2013 das Lizenzierungssystem f\u00fcr das verteilte System ist sehr teuer.<\/p>\n<p>Lifehack: <code>rm -rf \/var\/lib\/consul<\/code> \u2013 das Heilmittel f\u00fcr alle Probleme des Agents. Wenn bei Ihnen etwas nicht funktioniert, l\u00f6schen Sie einfach Ihre Daten und laden Sie die Daten aus einer Kopie hoch. H\u00f6chstwahrscheinlich wird Consul wieder funktionieren.<\/p>\n<h2>BEFW<\/h2>\n<p>\nLassen Sie uns nun dar\u00fcber sprechen, was wir zu Consul hinzugef\u00fcgt haben.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u2013 das ist ein Akronym f\u00fcr <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>all. Ich musste dem Produkt irgendwie einen Namen geben, als ich das Repository erstellt habe, um die ersten Test-Commits abzulegen. Dieser Name ist geblieben.<\/p>\n<h3>Regelvorlagen<\/h3>\n<p>\nDie Regeln sind im iptables-Syntax geschrieben.<\/p>\n<ul>\n<li>-N BEFW<\/li>\n<li>-P INPUT DROP<\/li>\n<li>-A INPUT -m state \u2013state 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>\nAlles l\u00e4uft in die BEFW-Kette, au\u00dfer <code>ESTABLISHED<\/code>, <code>RELATED<\/code> und localhost. Die Vorlage kann beliebig sein, das ist nur ein Beispiel.<\/p>\n<p>Was ist n\u00fctzlich an BEFW?<\/p>\n<h3>Dienste<\/h3>\n<p>\nWir haben einen Dienst, der immer einen Port hat, und einen Knoten, auf dem er arbeitet. Von unserem Knoten aus k\u00f6nnen wir lokal den Agenten fragen und herausfinden, dass wir einen Dienst haben. Wir k\u00f6nnen auch Tags setzen.<\/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 \/>\nJeder Dienst, der l\u00e4uft und in Consul registriert ist, wird zu einer iptables-Regel. Wir haben SSH \u2013 wir \u00f6ffnen Port 22. Das Bash-Skript ist einfach: curl und iptables, mehr braucht man nicht.<\/p>\n<h3>Clients<\/h3>\n<p>\nWie gew\u00e4hren wir keinen allgemein, sondern selektiv Zugriff? Nach dem Dienstnamen IP-Listen im KV-Speicher ablegen.<\/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 \/>\nZum Beispiel m\u00f6chten wir, dass alle aus dem zehnten Netzwerk auf den Dienst SSH_TCP_22 zugreifen k\u00f6nnen. Wir f\u00fcgen ein kleines Feld TTL? hinzu und jetzt haben wir zeitlich begrenzte Berechtigungen, zum Beispiel f\u00fcr einen Tag.<\/p>\n<h3>Zugriffe<\/h3>\n<p>\nWir verbinden Dienste und Clients: wir haben einen Dienst, f\u00fcr jeden ist ein KV-Speicher bereit. Jetzt gew\u00e4hren wir den Zugriff nicht f\u00fcr alle, sondern selektiv.<\/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>Gruppen<\/h3>\n<p>\nWenn wir jedes Mal tausende IP f\u00fcr Zugriffe angeben, werden wir m\u00fcde. Lassen Sie uns Gruppierungen erfinden \u2013 einen separaten Subset im KV. Wir nennen ihn Alias (oder Gruppen) und speichern dort Gruppen nach dem gleichen Prinzip.<\/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 \/>\nVerkn\u00fcpfen: jetzt k\u00f6nnen wir SSH nicht spezifisch auf P2P \u00f6ffnen, sondern auf eine ganze Gruppe oder mehrere Gruppen. Ebenso gibt es TTL \u2013 man kann tempor\u00e4r in die Gruppe aufnehmen oder aus der Gruppe entfernen.<\/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>Integration<\/h3>\n<p>\nUnser Problem \u2013 der menschliche Faktor und die Automatisierung. Bisher haben wir es so gel\u00f6st.<\/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 \/>\nWir arbeiten mit Puppet und \u00fcbertragen alles, was mit dem System (Anwendungscode) zu tun hat. In puppetdb (normaler PostgreSQL) wird eine Liste der dort laufenden Dienste gespeichert, die nach Ressourcentyp gefunden werden kann. Hier kann man auch sehen, wer wo Anfragen stellt. Au\u00dferdem haben wir ein System f\u00fcr Pull-Requests und Merge-Requests daf\u00fcr.<\/p>\n<p>Wir haben befw-sync geschrieben \u2013 eine einfache L\u00f6sung, die hilft, Daten zu \u00fcbertragen. Zuerst wenden sich Sync-Cookies an puppetdb. Dort ist eine HTTP-API eingerichtet: Wir fragen, welche Dienste wir haben, was zu tun ist. Dann stellen sie eine Anfrage an Consul.<\/p>\n<p>Gibt es eine Integration? Ja: Wir haben Regeln geschrieben und erlaubt, Pull-Requests anzunehmen. Wird ein Port ben\u00f6tigt oder soll ein Host zu einer Gruppe hinzugef\u00fcgt werden? Pull-Request, \u00dcberpr\u00fcfung \u2013 keine weiteren \"Finde 200 andere ACLs und versuche, etwas damit zu machen\".<\/p>\n<h3>Optimierung<\/h3>\n<p>\nEin Ping an localhost mit einer leeren Regelkette dauert 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 \/>\nWir f\u00fcgen dieser Kette 10.000 Adressen von iptables hinzu. Infolgedessen erh\u00f6ht sich der Ping um das 5-fache: iptables ist vollst\u00e4ndig linear, die Verarbeitung jeder Adresse ben\u00f6tigt einige Zeit.<\/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 \/>\nF\u00fcr die Firewall, in die wir tausende von ACLs migrieren, haben wir viele Regeln, und das verursacht Verz\u00f6gerungen. F\u00fcr Spielerprotokolle ist das schlecht.<\/p>\n<p>Aber wenn wir <strong>10.000 Adressen in ipset bringen,<\/strong> wird der Ping sogar geringer.<\/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 \/>\nDer Sinn ist, dass \"O\" (Algorithmuskomplexit\u00e4t) f\u00fcr ipset immer 1 ist, egal wie viele Regeln es gibt. Allerdings gibt es eine Einschr\u00e4nkung \u2013 es k\u00f6nnen nicht mehr als 65535 Regeln sein. Damit leben wir vorerst: Man kann sie kombinieren, erweitern, zwei ipsets in einem erstellen.<\/p>\n<h3>Speicherung<\/h3>\n<p>\nEine logische Fortsetzung des Iterationsprozesses ist die Speicherung von Informationen \u00fcber Clients f\u00fcr den Dienst in 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 \/>\nJetzt haben wir dasselbe SSH, und wir schreiben nicht sofort 100 IPs, sondern geben den Namen des ipsets an, mit dem wir kommunizieren m\u00fcssen, und die n\u00e4chste Regel <code>DROP<\/code>. Man kann es in eine Regel umformen: \"Wer nicht hier ist, der wird DROP\", aber so ist es anschaulicher.<\/p>\n<p>Jetzt haben wir Regeln und Sets. Die Hauptaufgabe besteht darin, ein Set zu erstellen, bevor man eine Regel schreibt, denn sonst wird iptables die Regel nicht speichern.<\/p>\n<h3>Das allgemeine Schema<\/h3>\n<p>\nIn Form eines Schemas sieht alles, was ich erz\u00e4hlt habe, so aus.<\/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 \/>\nWir comitten in Puppet, alles wird an den Host gesendet, die Dienste hier, ipset dort, und wer dort nicht eingetragen ist, wird nicht hineingelassen.<\/p>\n<h3>Erlauben &amp; Verwehren<\/h3>\n<p>\nUm die Welt schnell zu retten oder jemand schnell abzuschalten, haben wir zu Beginn aller Ketten zwei ipsets erstellt: <code>rules_allow<\/code> und <code>rules_deny<\/code>. Wie funktioniert das?<\/p>\n<p>Zum Beispiel erzeugt jemand mit Bots eine Belastung f\u00fcr unser Web. Fr\u00fcher musste man seine IP in den Logs finden, zu den Netzwerkingenieuren bringen, damit sie die Quelle des Traffics finden und sie sperren. Heute sieht das anders aus.<\/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 \/>\nWir senden es an Consul, warten 2,5 Sekunden und sind bereit. Da Consul \u00fcber P2P schnell verteilt, funktioniert es \u00fcberall, in jedem Teil der Welt.<\/p>\n<p>Einmal habe ich WOT komplett angehalten, weil ich einen Fehler mit der Firewall gemacht habe. <code>rules_allow<\/code> \u2014 das ist unsere Versicherung gegen solche F\u00e4lle. Wenn wir irgendwo einen Fehler mit der Firewall gemacht haben und etwas irgendwo blockiert wird, k\u00f6nnen wir immer bedingt <code>0.0\/0<\/code>, um alles schnell wieder hochzufahren. Danach reparieren wir alles per Hand.<\/p>\n<h3>Andere Sets<\/h3>\n<p>\nMan kann beliebige andere Sets im Bereich hinzuf\u00fcgen <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 \/>\nWarum? Manchmal ben\u00f6tigt jemand ipset, beispielsweise um das Abschalten eines Teils des Clusters zu emulieren. Jeder kann beliebige Sets mitbringen, sie benennen und sie werden aus Consul abgerufen. Dabei k\u00f6nnen die Sets sowohl an den iptables-Regeln teilnehmen, als auch wie eine Art <code>NOOP<\/code>: Die Konsistenz wird durch den Daemon sichergestellt.<\/p>\n<h3>Benutzer<\/h3>\n<p>\nFr\u00fcher war es so: Der Benutzer schaute sich mit einem Dom\u00e4nnamen in das Netzwerk ein und erhielt Parameter. Bis zur Einf\u00fchrung der neuen Generation von Firewalls konnte Cisco nicht verstehen, wo der Benutzer war und wo die IP war. Daher wurde der Zugriff nur \u00fcber den Hostnamen der Maschine gew\u00e4hrt.<\/p>\n<p>Was haben wir gemacht? Wir haben uns in den Moment eingeschaltet, in dem die Adresse abgerufen wird. In der Regel geschieht dies \u00fcber dot1x, Wi-Fi oder VPN \u2014 alles l\u00e4uft \u00fcber RADIUS. F\u00fcr jeden Benutzer erstellen wir eine Gruppe mit dem Benutzernamen und f\u00fcgen die IP mit TTL hinzu, die gleich seiner dhcp.lease ist \u2014 sobald diese abl\u00e4uft, verschwindet die Regel.<\/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 \/>\nJetzt k\u00f6nnen wir den Zugang zu Dienstleistungen wie in andere Gruppen nach Benutzernamen \u00f6ffnen. Wir haben die Probleme mit Hostnames beseitigt, wenn sie sich \u00e4ndern, und die Last von den Netzwerkingenieuren genommen, da sie jetzt keine Cisco mehr ben\u00f6tigen. Jetzt tragen die Ingenieure selbst die Zug\u00e4nge auf ihren Servern ein.<\/p>\n<h3>Isolierung<\/h3>\n<p>\nParallel dazu haben wir begonnen, die Isolierung zu \u00fcberpr\u00fcfen. Die Service-Manager haben eine Inventur erstellt und wir haben alle unsere Netzwerke analysiert. Wir gruppieren sie in \u00e4hnliche Gruppen und haben auf den ben\u00f6tigten Servern diese Gruppen, zum Beispiel, in deny hinzugef\u00fcgt. Jetzt gelangt dieselbe Staging-Isolierung in rules_deny der Produktion, aber nicht in die eigentliche Produktion.<\/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 \/>\nDas Schema funktioniert schnell und einfach: Wir entfernen alle ACLs von den Servern, entlasten die Hardware und verringern die Anzahl der isolierten VLANs.<\/p>\n<h3>Integrit\u00e4tskontrolle<\/h3>\n<p>\nFr\u00fcher hatten wir einen speziellen Trigger, der meldete, wenn jemand manuell die Firewall-Regeln \u00e4nderte. Ich schrieb einen riesigen Linter zur \u00dcberpr\u00fcfung der Firewall-Regeln, das war kompliziert. Jetzt wird die Integrit\u00e4t von BEFW \u00fcberwacht. Er achtet darauf, dass die Regeln, die er erstellt, nicht ge\u00e4ndert werden. Wenn jemand die Firewall-Regeln \u00e4ndert, wird alles zur\u00fcckgesetzt. \u201eIch habe hier schnell einen Proxy eingerichtet, um von zu Hause aus zu arbeiten\u201c \u2014 solche M\u00f6glichkeiten gibt es nicht mehr.<\/p>\n<p>BEFW \u00fcberwacht die ipset aus den Diensten und der Liste in befw.conf, die Regeln der Dienste in der BEFW-Kette. Aber er \u00fcberwacht keine anderen Ketten oder Regeln und andere ipsets.<\/p>\n<h3>Schutz vor Ausf\u00e4llen<\/h3>\n<p>\nBEFW speichert immer den letzten erfolgreichen Zustand direkt in der Bin\u00e4rdatei state.bin. Wenn etwas schiefgeht, springt er immer auf diesen state.bin zur\u00fcck.<\/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 \/>\nDas ist eine Versicherung gegen instabile Arbeiten von Consul, wenn er keine Daten sendet oder jemand einen Fehler macht und Regeln verwendet, die nicht angewendet werden k\u00f6nnen. Damit wir nicht ohne Firewall dastehen, wird BEFW auf den letzten Zustand zur\u00fcckgesetzt, wenn an irgendeinem Punkt ein Fehler auftritt.<\/p>\n<p>In kritischen Situationen ist dies die Garantie, dass wir mit einer funktionierenden Firewall bleiben. Wir \u00f6ffnen alle grauen Netzwerke in der Hoffnung, dass der Admin kommt und es repariert. Irgendwann werde ich das in die Konfigurationen bringen, aber jetzt haben wir einfach drei graue Netze: 10\/8, 172\/12 und 192.168\/16. Im Rahmen unseres Consul ist dies eine wichtige Eigenschaft, die hilft, weiterzuentwickeln.<\/p>\n<p><em>Demo: W\u00e4hrend des Vortrags zeigt Ivan den Demomodus von BEFW. Die Demonstration l\u00e4sst sich am besten anschauen unter <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">das Video<\/a><\/noindex>. Der Quellcode der Demo ist verf\u00fcgbar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\/tree\/master\/demo\">auf GitHub<\/a><\/noindex>.<\/em><\/p>\n<h2>Herausforderungen<\/h2>\n<p>\nIch werde \u00fcber die Fehler sprechen, mit denen wir konfrontiert waren.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>Was passiert, wenn Sie 0.0.0.0\/0 in ipset hinzuf\u00fcgen? Werden alle IPs hinzugef\u00fcgt? Wird der Zugang zum Internet ge\u00f6ffnet? <\/p>\n<p>Nein, wir bekommen einen Fehler, der uns zwei Stunden Ausfall gekostet hat. Der Fehler besteht seit 2016 und liegt in der RedHat Bugzilla unter der Nummer #1297092. Wir haben ihn zuf\u00e4llig entdeckt \u2014 aus dem Bericht eines Entwicklers.<\/p>\n<p>Jetzt gibt es in BEFW eine strenge Regel, dass <code>0.0.0.0\/0<\/code> in zwei Adressen umgewandelt wird: <code>0.0.0.0\/1<\/code> und <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; file. <\/strong>Was macht ipset, wenn Sie ihm sagen <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>Nichts dergleichen \u2014 er f\u00fchrt einen Merge durch, und die alten Adressen verschwinden nicht, Sie schlie\u00dfen keinen Zugang.<\/p>\n<p>Den Fehler haben wir gefunden, als wir die Isolierung getestet haben. Jetzt gibt es dort ein ziemlich komplexes System \u2014 anstelle von <code>restore<\/code> wird durchgef\u00fchrt <code>create temp<\/code>, dann <code>restore flush temp<\/code> und <code>restore temp<\/code>. Am Ende swap: f\u00fcr Atomarit\u00e4t, denn wenn Sie zuerst <code>flush<\/code> Und in diesem Moment kommt ein Paket, das zur\u00fcckgewiesen wird und etwas wird schiefgehen. Deshalb gibt es ein wenig schwarze Magie da.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>Wie ich bereits gesagt habe, denken wir, dass wir einige Daten anfragen, aber entweder Daten oder einen Fehler erhalten. Wir k\u00f6nnen das lokal \u00fcber Consul tun, aber auch in diesem Fall wird beides h\u00e4ngen bleiben.<\/p>\n<p>Der lokale Consul-Client ist eine Wrapper \u00fcber das HTTP-API. Aber er h\u00e4ngt einfach und reagiert nicht auf Ctrl+C, Ctrl+Z oder irgendetwas, nur auf <code>kill -9<\/code> in der benachbarten Konsole. Wir haben damit zu k\u00e4mpfen gehabt, als wir ein gro\u00dfes Cluster aufgebaut haben. Aber bisher haben wir keine L\u00f6sung, wir bereiten uns vor, diesen Fehler im Consul zu beheben.<\/p>\n<p><strong>Der Consul-Leiter antwortet nicht. <\/strong>Unser Master im Rechenzentrum antwortet nicht, wir denken: \u201eWird der Wahlalgorithmus jetzt wahrscheinlich funktionieren?\u201c <\/p>\n<p>Nein, wird es nicht, und das Monitoring wird nichts anzeigen: Consul sagt, dass der Commitment-Index vorhanden ist, der Leiter gefunden wurde, alles ist in Ordnung.<\/p>\n<p>Wie gehen wir damit um? <code>service consul restart<\/code> in cron jede Stunde. Wenn Sie 50 Server haben, ist das nicht so schlimm. Wenn es 16.000 werden, werden Sie verstehen, wie das funktioniert.<\/p>\n<h2>Fazit<\/h2>\n<p>\nLetztendlich haben wir folgende Vorteile erhalten:<\/p>\n<ul>\n<li>100% Abdeckung aller Linux-Maschinen.<\/li>\n<li>Geschwindigkeit.<\/li>\n<li>Automatisierung.<\/li>\n<li>Wir haben die Hardware und die Netzwerkingenieure von der Knechtschaft befreit.<\/li>\n<li>Es gibt nahezu unbegrenzte Integrationsm\u00f6glichkeiten: sei es mit Kubernetes, Ansible oder Python.<\/li>\n<\/ul>\n<p>\n<strong>Nachteile<\/strong>: Consul, mit dem wir jetzt leben m\u00fcssen, und der Preis f\u00fcr Fehler ist sehr hoch. Zum Beispiel, einmal um 18 Uhr (Peak in Russland) habe ich etwas in den Netzlisten ge\u00e4ndert. Wir haben gerade Isolation auf BEFW aufgebaut. Ich habe irgendwo einen Fehler gemacht, wahrscheinlich die falsche Maske angegeben, und in zwei Sekunden war alles weg. Das Monitoring geht an, der Support ist da: \u201eBei uns liegt alles!\u201c Der Abteilungsleiter wurde grau, als er dem Management erkl\u00e4rte, warum das passiert ist.<\/p>\n<p>Der Preis f\u00fcr einen Fehler ist so hoch, dass wir ein eigenes komplexes Pr\u00e4ventionsverfahren entwickelt haben. Wenn Sie dies in einer gro\u00dfen Produktion einf\u00fchren wollen, sollten Sie nicht allen einfach so einen Master-Token \u00fcber Consul geben. Das endet schlecht.<\/p>\n<p><strong>Kosten. <\/strong>Ich habe 400 Stunden lang allein programmiert. F\u00fcr die Unterst\u00fctzung ben\u00f6tigt mein Team von 4 Personen 10 Stunden im Monat f\u00fcr alle. Im Vergleich zu den Kosten einer neuen Generation von Firewalls ist das kostenlos.<\/p>\n<p><strong>Pl\u00e4ne. <\/strong>Der langfristige Plan ist die Suche nach einem alternativen Transportmittel zus\u00e4tzlich oder anstelle von Consul. Vielleicht wird es Kafka oder etwas \u00c4hnliches sein. Aber in den n\u00e4chsten Jahren werden wir mit Consul leben.<\/p>\n<p>N\u00e4chste Pl\u00e4ne: Integration mit Fail2ban, mit Monitoring, mit nftables, m\u00f6glicherweise mit anderen Distributionen, Metriken, erweiterte \u00dcberwachung, Optimierung. Unterst\u00fctzung f\u00fcr Kubernetes steht ebenfalls in den Pl\u00e4nen, da wir derzeit mehrere Cluster und ein gewisses Interesse haben.<\/p>\n<p>Weitere Pl\u00e4ne:<\/p>\n<ul>\n<li>Anomalien im Datenverkehr suchen;<\/li>\n<li>Netzwerkkartenverwaltung;<\/li>\n<li>Unterst\u00fctzung f\u00fcr Kubernetes;<\/li>\n<li>Paketerstellung f\u00fcr alle Systeme;<\/li>\n<li>Web-UI.<\/li>\n<\/ul>\n<p>\nWir arbeiten st\u00e4ndig an der Erweiterung der Konfiguration, der Erh\u00f6hung der Metriken und der Optimierung.<\/p>\n<p><i>Schlie\u00dft euch dem Projekt an. Das Projekt ist gro\u00dfartig geworden, aber leider ist es bisher ein Projekt von einer Person. Kommt zu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>und versucht, etwas zu machen: committen, testen, Vorschl\u00e4ge machen, eure Meinung abgeben.<\/i><\/p>\n<blockquote><p>In der Zwischenzeit bereiten wir uns auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\">Saint HighLoad++<\/a><\/noindex>, der am 6. und 7. April in St. Petersburg stattfindet, und laden Entwickler hochbelasteter Systeme ein, <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">einen Vortrag einzureichen<\/a><\/noindex>. Erfahrene Sprecher wissen bereits, was zu tun ist, und f\u00fcr Anf\u00e4nger empfehlen wir zumindest, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">es auszuprobieren<\/a><\/noindex>. Die Teilnahme an der Konferenz als Sprecher hat einige Vorteile. Welche, kann man beispielsweise am Ende nachlesen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/486142\/\">dieses Artikels<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Quelle: <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.1.1 - 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\/de\/blog\/consul-iptables-3\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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":"Im Jahr 2010 hatte das Unternehmen Wargaming 50 Server und ein einfaches Netzwerkmodell: Backend, Frontend und Firewall.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/consul-iptables-3","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/41051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=41051"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/41051\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/41052"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=41051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=41051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=41051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}