{"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. Verwirrend? Es wird noch spannender.<\/p>\n<p>Als die Anzahl der Server auf 16.000 anstieg, wurde es unm\u00f6glich, mit so vielen heterogenen Segmenten ohne Schwierigkeiten zu arbeiten. Daher wurde eine andere L\u00f6sung entwickelt. Der Netfilter-Stack wurde genutzt und mit Consul als Datenquelle kombiniert, was zu einer schnellen verteilten Firewall f\u00fchrte. Damit wurden ACLs an Routern ersetzt und als externe sowie interne Firewall eingesetzt. F\u00fcr das dynamische Management des Werkzeugs wurde das BEFW-System entwickelt, das \u00fcberall angewendet wurde: von der Benutzerzugriffsverwaltung im Produktnetzwerk bis zur Isolierung von Netzwerksegmenten 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 dieses System in Betracht ziehen sollten, wird <strong>Ivan Agarov<\/strong> (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annmuor\/\" class=\"user_link\">annmuor<\/a><\/noindex>) \u2014 Leiter der Gruppe f\u00fcr Infrastruktur-Sicherheit bei der Maintenance-Abteilung im Entwicklungszentrum in Minsk. Ivan ist ein Fan von SELinux, liebt Perl und programmiert. Als Leiter der IS-Gruppe arbeitet er regelm\u00e4\u00dfig mit Logs, Backups und F&amp;E, um Wargaming vor Hackern zu sch\u00fctzen und den Betrieb aller Spielserver im Unternehmen zu gew\u00e4hrleisten.<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>Historischer Hintergrund<\/h2>\n<p>\nBevor ich erz\u00e4hle, wie wir das gemacht haben, m\u00f6chte ich erl\u00e4utern, wie wir \u00fcberhaupt dazu gekommen sind und warum das notwendig wurde. Dazu reisen wir 9 Jahre zur\u00fcck: ins Jahr 2010, als gerade World of Tanks aufkam. 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>Wachstumskurve der Server des Unternehmens.<\/em><\/p>\n<p>Wir hatten ein Netzwerkmodell. F\u00fcr die damalige 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>Frontend wird von b\u00f6sen Akteuren bewohnt, die uns besch\u00e4digen m\u00f6chten, aber es gibt eine Firewall. Im Backend gibt es keine Firewall, aber dort befinden sich 50 Server, die wir alle kennen. Alles funktioniert gut.<\/p>\n<p>Innerhalb von 4 Jahren hat sich der Serverpark auf das 100-fache vergr\u00f6\u00dfert, auf 5000. Es entstanden die ersten isolierten Netzwerke \u2013 Staging: sie d\u00fcrfen nicht ins Produktionsumfeld, da dort h\u00e4ufig potenziell gef\u00e4hrliche Dinge ablaufen.<\/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 haben aus Gewohnheit die gleichen Hardware-Ressourcen verwendet, und die gesamte Arbeit wurde auf isolierten VLANs durchgef\u00fchrt: F\u00fcr VLANs wurden ACLs geschrieben, die bestimmte Verbindungen erlauben oder verbieten.<\/p>\n<p>Im Jahr 2016 erreichte die Anzahl der Server 8000. Wargaming \u00fcbernahm andere Studios und es entstanden zus\u00e4tzliche Partnernetzwerke. Sie scheinen zwar zu uns zu geh\u00f6ren, funktionieren jedoch nicht immer: F\u00fcr Partner funktionieren die VLANs oft nicht, und es muss auf VPN mit VRF zur\u00fcckgegriffen werden, was die Isolierung komplizierter macht. Das Mischungsverh\u00e4ltnis der ACL-Isolierungen wuchs.<\/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>Netzwerkmodell im Jahr 2016.<\/em><\/p>\n<p>Bis Anfang 2018 wuchs der Fuhrpark auf 16.000 Maschinen. Es gab 6 Segmente, die anderen z\u00e4hlten wir nicht, einschlie\u00dflich der gesch\u00fctzten, in denen Finanzdaten gespeichert waren. Container-Netzwerke (Kubernetes), DevOps, und cloudbasierte Netzwerke, die beispielsweise \u00fcber VPN aus dem Rechenzentrum verbunden sind, kamen hinzu. Es gab unz\u00e4hlige Regeln \u2013 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>Netzwerkmodell und Isolierungsmethoden im Jahr 2018.<\/em><\/p>\n<p>Zur Isolierung verwendeten wir: VLAN mit ACL auf L2, VRF mit ACL auf L3, VPN und vieles mehr. Viel zu viel.<\/p>\n<h2>Die Probleme<\/h2>\n<p>\nAlle arbeiten mit ACL und VLAN. Was ist also das Problem? Diese Frage beantwortet Harold, 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 nur f\u00fcnf davon waren massenhaft.<\/p>\n<ul>\n<li><strong>Geometrisches Wachstum der Kosten f\u00fcr neue Regeln<\/strong>. Jede neue Regel dauerte l\u00e4nger als die vorherige, da zuerst gepr\u00fcft werden musste, ob es nicht bereits eine solche Regel gab.<\/li>\n<li><strong>Es gibt keine Firewall innerhalb der Segmente.<\/strong>. Die Segmente wurden irgendwie voneinander getrennt, es mangelte bereits an Ressourcen.<\/li>\n<li><strong>Die Regeln wurden langsam angewendet. <\/strong>Ein lokales Regelwerk konnten die Operatoren von Hand in einer Stunde schreiben. Ein globales dauerte mehrere Tage.<\/li>\n<li><strong>Schwierigkeiten bei der Pr\u00fcfung der Regeln.<\/strong>. Genauer gesagt, eine Pr\u00fcfung war nicht m\u00f6glich. Die ersten Regeln wurden bereits 2010 verfasst, und die meisten ihrer Autoren arbeiteten nicht mehr im Unternehmen.<\/li>\n<li><strong>Niedriges Niveau der Infrastrukturkontrolle.<\/strong>. Das ist das Hauptproblem \u2013 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 ein bisschen 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 unternehmen.<\/p>\n<p><strong>Die Kosten f\u00fcr Integrationen steigen kontinuierlich. <\/strong>Ausgangspunkt war, dass gro\u00dfe Rechenzentren die Unterst\u00fctzung f\u00fcr isolierte VLANs und ACLs eingestellt hatten, weil der Speicher auf den Ger\u00e4ten ersch\u00f6pft war.<\/p>\n<p>L\u00f6sung: Der menschliche Faktor wurde beseitigt und der Zugang so weit wie m\u00f6glich automatisiert.<\/p>\n<p><strong>Neue Regeln werden langsam angewendet. <\/strong>L\u00f6sung: Die Anwendung von Regeln beschleunigen und parallelisieren. Dazu ist ein verteiltes System erforderlich, damit die Regeln selbstst\u00e4ndig ohne rsync oder SFTP auf tausend Systeme geliefert werden.<\/p>\n<p><strong>Fehlender Firewall innerhalb der Segmente. <\/strong>Die Firewall in den Segmenten wurde notwendig, als in einem Netzwerk verschiedene Dienste auftauchten. L\u00f6sung: Verwendung von Host-basierten 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 zentralen Ort f\u00fcr \u00dcberwachung und Verwaltung speichern, so k\u00f6nnen wir alles auditen.<\/p>\n<p><strong>Niedriger Kontrollgrad \u00fcber die Infrastruktur. <\/strong>L\u00f6sung: Eine Bestandsaufnahme aller Dienste und Zugriffe zwischen diesen durchf\u00fchren.<\/p>\n<p>Es handelt sich mehr um einen administrativen Prozess als um einen technischen. Manchmal haben wir 200-300 neue Releases pro Woche, insbesondere w\u00e4hrend Aktionen und Feiertagen. Dies gilt nur f\u00fcr ein Team unserer DevOps. Bei dieser Anzahl an Releases ist es unm\u00f6glich zu erkennen, welche Ports, IPs und Integrationen erforderlich sind. Daher ben\u00f6tigten wir speziell geschulte Service-Manager, die die Teams befragten: \"Was gibt es \u00fcberhaupt und warum habt ihr das hochgezogen?\"<\/p>\n<p>Nach allem, was wir gestartet haben, sieht ein Netzwerkingenieur im Jahr 2019 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 beschlossen, alles, was wir mit Hilfe der Service-Manager gefunden haben, in Consul zu speichern und von dort aus die iptables-Regeln zu schreiben.<\/p>\n<p>Wie haben wir uns entschieden, das zu tun?<\/p>\n<ul>\n<li>Wir sammeln alle Services, Netzwerke und Nutzer.<\/li>\n<li>Auf dieser Basis erstellen wir iptables-Regeln.<\/li>\n<li>Wir automatisieren die \u00dcberwachung.<\/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 entwickeln, die \u00dcberfl\u00fcssiges beseitigen, und der Gro\u00dfteil der Probleme wird gel\u00f6st sein! Den Rest kl\u00e4ren wir im Prozess.<\/p>\n<h3>Warum Consul?<\/h3>\n<p>\n<strong>Hat sich gut bew\u00e4hrt. <\/strong>In den Jahren 2014-2015 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 Nutzung hat Consul bei keinem einzigen Vorfall Daten verloren. Das ist ein gro\u00dfer Vorteil f\u00fcr das Firewall-Management-System.<\/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>Benutzerfreundliche REST API.<\/strong> Wir haben auch Apache ZooKeeper in Betracht gezogen, aber es hat keine REST API, also m\u00fcssten wir eine workaround-L\u00f6sung implementieren.<\/p>\n<p><strong>Funktioniert sowohl als Schl\u00fcsselwertspeicher (KV) als auch als Katalog (Service Discovery)<\/strong>. Man kann sowohl Services, Kataloge als auch Rechenzentren speichern. Das ist nicht nur f\u00fcr uns praktisch, sondern auch f\u00fcr benachbarte Teams, denn beim Aufbau eines globalen Services denken wir gro\u00df.<\/p>\n<p><strong>In Go geschrieben, das Teil des Tech-Stacks von Wargaming ist. <\/strong>Wir lieben diese Sprache, wir haben viele Go-Entwickler.<\/p>\n<p><strong>Leistungsstarkes ACL-System. <\/strong>Mit ACL in Consul k\u00f6nnen wir steuern, wer was schreiben darf. Wir garantieren, dass die Firewall-Regeln nichts \u00fcberlappen und wir damit keine Probleme haben.<\/p>\n<p>Aber Consul hat auch Nachteile.<\/p>\n<ul>\n<li><strong>Skaliert nicht innerhalb des Rechenzentrums, es sei denn, Sie haben die Business-Version. <\/strong>Es kann nur durch F\u00f6deration skaliert werden.<\/li>\n<li><strong>Sehr abh\u00e4ngig von der Netzwerkqualit\u00e4t und der Serverauslastung. <\/strong>Consul wird nicht richtig funktionieren, wenn es als Server auf einem \u00fcberlasteten Server l\u00e4uft und es Netzwerkprobleme gibt, wie beispielsweise eine inkonstante Geschwindigkeit. Dies steht im Zusammenhang mit P2P-Verbindungen und den Modellen zur Verbreitung von Updates.<\/li>\n<li><strong>Schwierigkeiten bei der \u00dcberwachung der Verf\u00fcgbarkeit<\/strong>. Der Status von Consul kann anzeigen, dass alles in Ordnung ist, w\u00e4hrend es bereits ausgefallen ist.<\/li>\n<\/ul>\n<p>\nDie meisten dieser Probleme haben wir w\u00e4hrend des Betriebs von Consul gel\u00f6st, weshalb wir uns f\u00fcr ihn entschieden haben. Das Unternehmen hat Pl\u00e4ne f\u00fcr ein alternatives Backend, aber wir haben gelernt, mit Problemen umzugehen und leben derzeit weiterhin mit Consul.<\/p>\n<h3>Wie Consul funktioniert<\/h3>\n<p>\nIn einem hypothetischen Rechenzentrum installieren wir Server \u2014 zwischen drei und f\u00fcnf. Eins oder zwei Server sind unzureichend: Sie k\u00f6nnen kein Quorum bilden und entscheiden, wer recht hat, wenn die Daten nicht \u00fcbereinstimmen. Mehr als f\u00fcnf macht keinen Sinn, die Leistung w\u00fcrde abnehmen.<\/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 \/>\nDie Server k\u00f6nnen in beliebiger Reihenfolge mit den Clients verbunden werden: 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 \/>\nDanach erhalten die Clients eine Liste der P2P-Verbindungen und bauen Verbindungen untereinander 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 sind ebenfalls \u00fcber P2P verbunden 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, erfolgt die Anfrage serverseitig. Dieses Verfahren wird genannt <strong>Serf-Protokoll<\/strong>. Das Serf-Protokoll, \u00e4hnlich wie Consul, wurde von HashiCorp entwickelt.<\/p>\n<h3>Ein paar wichtige Fakten \u00fcber Consul<\/h3>\n<p>\nConsul verf\u00fcgt \u00fcber eine Dokumentation, die seine Funktionsweise beschreibt. Ich werde nur einige ausgew\u00e4hlte Fakten anf\u00fchren, die wichtig sind.<\/p>\n<p><strong>Consul-Server w\u00e4hlen aus den Abstimmenden einen Master aus<\/strong>. Consul w\u00e4hlt den Master aus der Liste der Server f\u00fcr jedes Rechenzentrum aus, und alle Anfragen laufen nur \u00fcber ihn, unabh\u00e4ngig von der Anzahl der Server. Ein Ausfall des Masters f\u00fchrt nicht zu einer Neuwahl. Wenn kein Master gew\u00e4hlt ist, werden Anfragen von niemandem bearbeitet.<\/p>\n<blockquote><p>Sie wollten horizontale Skalierung? Tut uns leid, das gibt es nicht.<\/p><\/blockquote>\n<p> Die Anfrage an ein anderes Rechenzentrum erfolgt von Master zu Master, unabh\u00e4ngig davon, auf welchem Server sie ankommt. Der ausgew\u00e4hlte Master \u00fcbernimmt 100% der Last, abgesehen von der Last f\u00fcr die Weiterleitung von Anfragen. Eine aktuelle Kopie der Daten befindet sich auf allen Servern des Rechenzentrums, aber nur einer antwortet.<\/p>\n<blockquote><p>Der einzige Weg zu skalieren, besteht darin, den stale-Modus auf dem Client zu aktivieren.<\/p><\/blockquote>\n<p>Im Stale-Modus kann ohne Quorum geantwortet werden. Dies ist ein Modus, in dem wir auf Datenkonsistenz verzichten, aber schneller lesen k\u00f6nnen als gew\u00f6hnlich, und jeder Server antwortet. Nat\u00fcrlich erfolgt das Schreiben 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 Daten fragt er immer bei einem anderen nach.<\/p>\n<p><strong>Die Atomarit\u00e4t von Operationen ist au\u00dferhalb einer Transaktion nicht garantiert.<\/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 Sperre.<\/strong>Die Anfrage geht vom Master zum Master und nicht direkt, daher gibt es keine Garantien, dass die Sperre funktioniert, wenn Sie beispielsweise in einem anderen Rechenzentrum eine Sperre vornehmen.<\/p>\n<p><strong>ACL garantiert ebenfalls keinen Zugriff (in vielen F\u00e4llen).<\/strong>ACL kann fehlschlagen, da es in einem Rechenzentrum der F\u00f6deration gespeichert ist \u2013 im ACL-Rechenzentrum (Prim\u00e4res Rechenzentrum). Wenn das Rechenzentrum Ihnen nicht antwortet, funktioniert die ACL nicht.<\/p>\n<p><strong>Ein h\u00e4ngender Master f\u00fchrt dazu, dass die gesamte F\u00f6deration h\u00e4ngt.<\/strong>. Zum Beispiel in einer F\u00f6deration mit 10 Rechenzentren, von denen eines ein schlechtes Netzwerk hat und ein Knotenpunkt ausf\u00e4llt. Alle, die mit diesem verbunden sind, h\u00e4ngen im Kreis: eine Anfrage wird gesendet, aber es gibt keine Antwort, der Thread h\u00e4ngt. Man kann nicht vorhersagen, wann es passiert, nach einer Stunde oder zwei wird die gesamte F\u00f6deration ausfallen. Sie k\u00f6nnen dagegen nichts unternehmen.<\/p>\n<p>Der Status, das Quorum und die Wahlen werden von einem separaten Thread verarbeitet. Es wird keine Neuwahl stattfinden, der Status wird nichts anzeigen. Sie denken, Sie haben einen aktiven Consul, stellen Anfragen, und es passiert nichts \u2013 es gibt keine Antwort. W\u00e4hrenddessen zeigt der Status an, dass alles in Ordnung ist.<\/p>\n<p>Wir sind auf dieses Problem gesto\u00dfen und mussten bestimmte Teile der Rechenzentren neu konfigurieren, um es zu vermeiden.<\/p>\n<p><strong>In der Business-Version von Consul Enterprise sind einige der oben genannten M\u00e4ngel nicht vorhanden.<\/strong>. Es bietet viele n\u00fctzliche Funktionen: W\u00e4hlerauswahl, Verteilung, Skalierung. Es gibt nur einen Haken \u2013 das Lizenzierungssystem f\u00fcr die verteilte Infrastruktur ist sehr teuer.<\/p>\n<p>Life Hack: <code>rm -rf \/var\/lib\/consul<\/code> \u2013 das Allheilmittel f\u00fcr alle Probleme des Agenten. Wenn bei Ihnen etwas nicht funktioniert, l\u00f6schen Sie einfach Ihre Daten und laden Sie sie aus einer Sicherung wieder hoch. Wahrscheinlich wird Consul dann wieder funktionieren.<\/p>\n<h2>BEFW<\/h2>\n<p>\nJetzt sprechen wir dar\u00fcber, was wir zu Consul hinzugef\u00fcgt haben.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">BEFW<\/a><\/noindex> \u2014 ist ein Akronym f\u00fcr <strong>B<\/strong>ack<strong>E<\/strong>nd<strong>F<\/strong>ire<strong>W<\/strong>alle. Ich musste einen Namen f\u00fcr das Produkt finden, als ich das Repository erstellt habe, um die ersten Testcommits darin abzulegen. So blieb der Name bestehen.<\/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\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>\nAlles flie\u00dft in die Kette BEFW, au\u00dfer <code>ETABLISHED<\/code>, <code>RELATED<\/code> und localhost. Die Vorlage kann beliebig sein, das ist nur ein Beispiel.<\/p>\n<p>Was ist der Nutzen von BEFW?<\/p>\n<h3>Dienste<\/h3>\n<p>\nWir haben einen Service, bei dem es immer einen Port gibt, auf dem die Node l\u00e4uft. Von unserer Node k\u00f6nnen wir lokal den Agenten fragen und herausfinden, dass wir einen bestimmten Service haben. Au\u00dferdem k\u00f6nnen Tags gesetzt werden.<\/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 Service, der l\u00e4uft und in Consul registriert ist, wird zu einer iptables-Regel. Wir haben SSH \u2014 wir \u00f6ffnen den Port 22. Das Bash-Skript ist einfach: curl und iptables, mehr braucht man nicht.<\/p>\n<h3>Windows XP, Vista, 7, 8, 10, Server 2003, Server 2008, Server 2012<\/h3>\n<p>\nWie \u00f6ffnet man den Zugang nicht f\u00fcr alle, sondern selektiv? Man speichert die IP-Listen im KV-Speicher nach dem Servicenamen.<\/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 Netz auf den SSH_TCP_22-Service zugreifen k\u00f6nnen. Wir f\u00fcgen ein kleines Feld TTL? hinzu und jetzt haben wir tempor\u00e4re Berechtigungen, zum Beispiel f\u00fcr einen Tag.<\/p>\n<h3>Zugriffe<\/h3>\n<p>\nWir verbinden Dienste und Kunden: F\u00fcr jeden Dienst haben wir ein bereitgestelltes KV-Storage. Jetzt gew\u00e4hren wir den Zugang 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-Adressen f\u00fcr Zugriffe schreiben, werden wir m\u00fcde. Wir entwickeln Gruppierungen \u2013 ein separates Subset im KV. Wir nennen es Alias (oder Gruppen) und speichern dort Gruppen nach demselben 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 \/>\nWir verbinden: Jetzt k\u00f6nnen wir SSH nicht nur konkret f\u00fcr P2P, sondern f\u00fcr eine ganze Gruppe oder mehrere Gruppen \u00f6ffnen. Ebenso gibt es TTL \u2013 man kann Gruppen tempor\u00e4r hinzuf\u00fcgen oder 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 \u2014 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 zum System geh\u00f6rt (Anwendungscode). In puppetdb (normaler PostgreSQL) wird eine Liste der dort laufenden Dienste gespeichert, die man anhand des Ressourcentyps finden kann. Dort kann man ebenfalls sehen, wer wohin zugreift. Zudem haben wir ein System f\u00fcr Pull- und Merge-Requests daf\u00fcr.<\/p>\n<p>Wir haben befw-sync geschrieben \u2013 eine einfache L\u00f6sung, die hilft, Daten zu \u00fcbertragen. Zuerst greifen die Sync-Cookies auf puppetdb zu. Dort ist ein HTTP API eingerichtet: Wir fragen, welche Dienste wir haben und was zu tun ist. Danach erfolgt die Anfrage an Consul.<\/p>\n<p>Gibt es eine Integration? Ja: Wir haben die Regeln geschrieben und Pull Requests genehmigt. Brauchen wir einen bestimmten Port oder m\u00fcssen wir einen Host zu einer Gruppe hinzuf\u00fcgen? Pull Requests, Reviews \u2013 keine weiteren \u201eFinde 200 andere ACLs und versuche etwas damit zu machen\u201c mehr.<\/p>\n<h3>Optimierung<\/h3>\n<p>\nDer Ping zu localhost mit einer leeren Regelkette betr\u00e4gt 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 werden dieser Kette 10.000 Adressen in iptables hinzuf\u00fcgen. In der Folge wird sich der Ping verf\u00fcnffachen: iptables ist vollst\u00e4ndig linear, die Verarbeitung jeder Adresse ben\u00f6tigt eine gewisse 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, was zu Verz\u00f6gerungen f\u00fchrt. F\u00fcr Spieleprotokolle ist das schlecht.<\/p>\n<p>Aber wenn wir <strong>10.000 Adressen in ipset packen,<\/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 Punkt ist, dass \"O\" (Algorithmuskomplexit\u00e4t) f\u00fcr ipset immer 1 betr\u00e4gt, egal wie viele Regeln es gibt. Es gibt allerdings eine Beschr\u00e4nkung \u2013 die Anzahl der Regeln darf 65.535 nicht \u00fcberschreiten. Aktuell leben wir damit: Man kann sie kombinieren, erweitern und zwei ipsets in einem erstellen.<\/p>\n<h3>Speicherung<\/h3>\n<p>\nEin logischer n\u00e4chster Schritt im Prozess der Iterationen ist die Speicherung von Kundeninformationen 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 schreiben nicht sofort 100 IPs, sondern geben den Namen des ipset an, mit dem wir kommunizieren m\u00fcssen, sowie die n\u00e4chste Regel. <code>L\u00d6SCHEN<\/code>. Man k\u00f6nnte es in eine Regel umformulieren: \u201eWer nicht hier ist, wird ausgeschlossen\u201c, aber so ist es anschaulicher.<\/p>\n<p>Jetzt haben wir Regeln und Sets. Die Hauptaufgabe besteht darin, ein Set zu erstellen, bevor die Regel geschrieben wird, denn sonst wird iptables die Regel nicht speichern.<\/p>\n<h3>\u00dcbersicht<\/h3>\n<p>\nIn Diagrammform sieht alles, was ich erkl\u00e4rt 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 committen in Puppet, alles wird auf den Host gesendet, die Dienste sind hier, ipset dort, und wer dort nicht eingetragen ist, wird nicht hereingelassen.<\/p>\n<h3>Erlauben &amp; verbieten<\/h3>\n<p>\nUm die Welt schnell zu retten oder um schnell jemanden auszuschalten, haben wir am Anfang aller Ketten zwei ipsets erstellt: <code>rules_allow<\/code> und <code>rules_deny<\/code>. Wie funktioniert das?<\/p>\n<p>Wenn jemand mit Bots Last auf unser Web erzeugt. Fr\u00fcher musste man seine IP in den Logs suchen, zu den Netzwerkingenieuren gehen, damit sie die Quelle des Datenverkehrs finden und sie sperren. Jetzt 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 es ist erledigt. Da Consul aufgrund von P2P schnell verteilt, funktioniert es \u00fcberall, egal wo auf der Welt.<\/p>\n<p>Einmal habe ich v\u00f6llig WOT gestoppt, weil ich einen Fehler mit der Firewall gemacht habe. <code>rules_allow<\/code> - das ist unsere Versicherung gegen solche F\u00e4lle. Wenn wir irgendwo einen Fehler mit der Firewall gemacht haben und etwas blockiert wird, k\u00f6nnen wir immer einen sogenannten <code>0.0\/0<\/code>, um alles schnell wieder in Betrieb zu nehmen. Danach werden wir alles manuell reparieren.<\/p>\n<h3>Andere Sets<\/h3>\n<p>\nEs k\u00f6nnen beliebige andere Sets im Raum hinzugef\u00fcgt werden <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, um beispielsweise das Abschalten eines Teils des Clusters zu simulieren. 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 als eine Art Befehl fungieren. <code>NOOP<\/code>: die Konsistenz wird durch einen Daemon aufrechterhalten.<\/p>\n<h3>Benutzer<\/h3>\n<p>\nFr\u00fcher war es so: Der Benutzer stellte eine Verbindung zum Netzwerk her und erhielt die Einstellungen \u00fcber die Domain. Bis zur Einf\u00fchrung neuer Firewall-Generation konnte Cisco nicht verstehen, wo sich der Benutzer und wo die IP befand. Daher wurde der Zugang nur \u00fcber den Hostnamen der Maschine gew\u00e4hrt.<\/p>\n<p>Was haben wir gemacht? Wir haben uns in den Moment des Adressabrufs eingeklinkt. Normalerweise geschieht dies \u00fcber dot1x, WLAN oder VPN \u2013 alles l\u00e4uft \u00fcber RADIUS. F\u00fcr jeden Benutzer erstellen wir eine Gruppe mit dem Benutzernamen und f\u00fcgen die IP mit einer TTL hinzu, die der dhcp.lease entspricht \u2013 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 Diensten wie in anderen Gruppen \u00fcber den Benutzernamen \u00f6ffnen. Wir haben die Probleme mit Hostnamen, die sich \u00e4ndern, beseitigt und die Last von Netzwerkingenieuren genommen, da sie nun nicht mehr auf Cisco angewiesen sind. Jetzt schreiben die Ingenieure selbstst\u00e4ndig die Zugriffsrechte auf ihren Servern.<\/p>\n<h3>Isolierung<\/h3>\n<p>\nParallel dazu haben wir mit der \u00dcberpr\u00fcfung der Isolation begonnen. Die Service-Manager haben eine Bestandsaufnahme erstellt, und wir haben alle unsere Netzwerke analysiert. Wir teilen sie in dieselben Gruppen auf, und auf den erforderlichen Servern wurden diese Gruppen beispielsweise in die Deny-Listen hinzugef\u00fcgt. Jetzt gelangt dasselbe Staging-Isolationsschema in die rules_deny der Produktionsumgebung, jedoch nicht in die Produktionsumgebung selbst.<\/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 System 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\u00e4ts\u00fcberwachung<\/h3>\n<p>\nFr\u00fcher hatten wir einen speziellen Trigger, der informierte, wenn jemand manuell eine Firewall-Regel \u00e4nderte. Ich habe einen umfangreichen Linter zur \u00dcberpr\u00fcfung der Firewall-Regeln geschrieben, was kompliziert war. Jetzt \u00fcberwacht die BEFW die Integrit\u00e4t. Sie sorgt gewissenhaft daf\u00fcr, dass die Regeln, die sie erstellt, nicht ge\u00e4ndert werden. Wenn jemand die Firewall-Regeln \u00e4ndert, wird alles zur\u00fcckgesetzt. \u201aIch habe hier schnell einen Proxy eingerichtet, um von zu Hause zu arbeiten\u2018 \u2013 solche Optionen gibt es nicht mehr.<\/p>\n<p>Die BEFW \u00fcberwacht das IP-Set aus den Services und der Liste in befw.conf sowie die Service-Regeln in der BEFW-Kette. Sie \u00fcberwacht jedoch nicht andere Ketten und Regeln sowie andere IP-Sets.<\/p>\n<h3>Havarie-Schutz<\/h3>\n<p>\nBEFW speichert immer den letzten funktionierenden Zustand direkt in der bin\u00e4ren Struktur state.bin. Wenn etwas schiefgeht, wird er immer zu diesem state.bin zur\u00fcckkehren.<\/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 Arbeitsweise von Consul, wenn keine Daten gesendet wurden oder jemand einen Fehler gemacht hat und Regeln verwendet hat, 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 das eine Garantie, dass wir mit einer funktionierenden Firewall bleiben. Wir \u00f6ffnen alle grauen Netze in der Hoffnung, dass der Administrator kommt und es repariert. Irgendwann werde ich das in die Konfigurationen aufnehmen, aber momentan haben wir einfach drei graue Netze: 10\/8, 172\/12 und 192.168\/16. In unserem Consul ist das eine wichtige Eigenschaft, die uns hilft, weiter zu wachsen.<\/p>\n<p><em>Demo: W\u00e4hrend der Pr\u00e4sentation zeigt Ivan den Demomodus von BEFW. Die Demo l\u00e4sst sich am besten ansehen auf <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/4zP67uYnsR4?t=1663\">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 m\u00f6chte \u00fcber die Bugs berichten, mit denen wir konfrontiert wurden.<\/p>\n<p><strong>ipset add set 0.0.0.0\/0. <\/strong>Was passiert, wenn ich 0.0.0.0\/0 in ipset hinzuf\u00fcge? Werden alle IPs hinzugef\u00fcgt? Wird der Zugang zum Internet ge\u00f6ffnet? <\/p>\n<p>Nein, wir bekommen einen Bug, der uns zwei Stunden Ausfall gekostet hat. Dieser Bug existiert seit 2016, ist unter der Nummer #1297092 in RedHat Bugzilla vermerkt, und wir haben ihn zuf\u00e4llig entdeckt \u2013 durch den Bericht eines Entwicklers.<\/p>\n<p>Jetzt gibt es in BEFW eine strikte Regel, dass <code>0.0.0.0\/0<\/code> es zu zwei Adressen wird: <code>0.0.0.0\/1<\/code> und <code>128.0.0.0\/1<\/code>.<\/p>\n<p><strong>ipset restore set &lt; datei. <\/strong>Was macht ipset, wenn Sie ihm sagen, dass er <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>Nein, das Gegenteil ist der Fall \u2013 es wird zusammengef\u00fchrt, und die alten Adressen verschwinden nicht, der Zugang wird nicht geschlossen.<\/p>\n<p>Wir haben den Bug entdeckt, als wir die Isolation getestet haben. Jetzt gibt es dort ein recht komplexes System \u2013 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 die Atomarit\u00e4t, denn wenn zun\u00e4chst <code>flush<\/code> ein Paket ankommt, wird es verworfen und etwas geht schief. Daher gibt es dort ein bisschen schwarze Magie.<\/p>\n<p><strong>consul kv get -datacenter=other. <\/strong>Wie ich bereits erw\u00e4hnt habe, denken wir, dass wir einige Daten abfragen, aber wir erhalten entweder Daten oder einen Fehler. Wir k\u00f6nnen das lokal \u00fcber Consul machen, aber auch in diesem Fall werden beide Systeme einfrieren.<\/p>\n<p>Der lokale Consul-Client ist eine Wrapper \u00fcber das HTTP-API. Aber er friert einfach ein und reagiert weder auf Ctrl+C noch auf Ctrl+Z, nichts, nur auf <code>kill -9<\/code> in der benachbarten Konsole. Das haben wir festgestellt, als wir einen gro\u00dfen Cluster aufgebaut haben. Aber bisher haben wir noch keine L\u00f6sung, wir bereiten uns darauf vor, diesen Fehler in Consul zu beheben.<\/p>\n<p><strong>Der Consul-Leiter antwortet nicht. <\/strong>Unser Master im Rechenzentrum reagiert nicht, wir denken: \u201eWird der Wahlalgorithmus jetzt wohl funktionieren?\u201c <\/p>\n<p>Nein, es wird nicht funktionieren, und das Monitoring wird nichts anzeigen: Consul wird sagen, dass der Commitment-Index existiert, ein Leiter gefunden wurde, alles in Ordnung.<\/p>\n<p>Wie gehen wir damit um? <code>service consul restart<\/code> im Cron jede Stunde. Wenn Sie 50 Server haben, ist das nicht schlimm. Wenn es 16.000 werden, werden Sie verstehen, wie das funktioniert.<\/p>\n<h2>Fazit<\/h2>\n<p>\nAm Ende haben wir folgende Vorteile erzielt:<\/p>\n<ul>\n<li>100% Abdeckung aller Linux-Maschinen.<\/li>\n<li>Geschwindigkeit.<\/li>\n<li>Automatisierung.<\/li>\n<li>Wir haben Hardware und Netzwerkingenieure von ihrer Last befreit.<\/li>\n<li>Die Integrationsm\u00f6glichkeiten, die sich ergeben, sind praktisch unbegrenzt: 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 extrem hoch. Zum Beispiel habe ich einmal um 18 Uhr (Hauptzeit in Russland) etwas an den Netzwerkliste ge\u00e4ndert. Genau zu diesem Zeitpunkt haben wir die Isolation auf BEFW gebaut. Ich habe irgendwo einen Fehler gemacht, anscheinend die falsche Maske angegeben, und innerhalb von zwei Sekunden war alles down. Das Monitoring springt an, der Support-Mitarbeiter kommt gerannt: \u201eBei uns l\u00e4uft nichts!\u201c Der Abteilungsleiter wurde grau, als er dem Gesch\u00e4ft erkl\u00e4ren musste, warum das passiert ist.<\/p>\n<p>Der Preis f\u00fcr Fehler ist so hoch, dass wir ein eigenes komplexes Pr\u00e4ventionsverfahren entwickelt haben. Wenn Sie dies in einer gro\u00dfen Produktionsumgebung implementieren, sollten Sie nicht den Master-Token f\u00fcr Consul an alle weitergeben. Das w\u00fcrde schlecht enden.<\/p>\n<p><strong>Kosten. <\/strong>Ich habe 400 Stunden allein Code geschrieben. Mein vierk\u00f6pfiges Team ben\u00f6tigt jeden Monat 10 Stunden f\u00fcr den Support f\u00fcr alle. Im Vergleich zu den Kosten f\u00fcr eine beliebige Next-Gen-Firewall ist das kostenlos.<\/p>\n<p><strong>Pl\u00e4ne. <\/strong>Der langfristige Plan besteht darin, nach einem alternativen Transportmittel statt oder zus\u00e4tzlich zu Consul zu suchen. M\u00f6glicherweise wird es Kafka oder etwas \u00c4hnliches sein. Aber in den n\u00e4chsten Jahren werden wir mit Consul leben.<\/p>\n<p>Zuk\u00fcnftige Pl\u00e4ne: Integration mit Fail2ban, inklusive Monitoring, mit nftables, eventuell auch mit anderen Distributionen, Metriken, erweitertem Monitoring und Optimierung. Unterst\u00fctzung f\u00fcr Kubernetes steht ebenfalls auf der Agenda, da wir derzeit \u00fcber mehrere Cluster verf\u00fcgen und den Wunsch haben.<\/p>\n<p>Weitere Pl\u00e4ne:<\/p>\n<ul>\n<li>Anomalien im Verkehr erkennen;<\/li>\n<li>Netzwerkkartenverwaltung;<\/li>\n<li>Kubernetes-Unterst\u00fctzung;<\/li>\n<li>Paketerstellung f\u00fcr alle Systeme;<\/li>\n<li>Web-UI.<\/li>\n<\/ul>\n<p>\nWir arbeiten kontinuierlich an der Erweiterung der Konfiguration, der Erh\u00f6hung der Metriken und der Optimierung.<\/p>\n<p><i>Schlie\u00dfen Sie sich dem Projekt an. Es ist ein gro\u00dfartiges Projekt geworden, leider ist es derzeit jedoch nur ein Projekt einer Person. Kommen Sie zu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wgnet\/befw\">GitHub <\/a><\/noindex>und versuchen Sie, etwas zu tun: committen, testen, Vorschl\u00e4ge machen oder Ihr Feedback geben.<\/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++ sehen.<\/a><\/noindex>, das am 6. und 7. April in St. Petersburg stattfinden wird, vor und laden Entwickler von hochbelasteten Systemen ein, <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose?conference=hl2020-spb\">einen Vortrag einzureichen<\/a><\/noindex>. Erfahrene Referenten wissen bereits, was zu tun ist, w\u00e4hrend wir neuen Sprechern empfehlen, zumindest <noindex><a rel=\"nofollow\" href=\"https:\/\/www.highload.ru\/spb\/2020\/speakers\">es zu versuchen<\/a><\/noindex>. Die Teilnahme an der Konferenz als Redner bietet verschiedene Vorteile. Welche das sind, kann man beispielsweise am Ende lesen. <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 4.9.10 - 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. \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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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 verf\u00fcgte Wargaming \u00fcber 50 Server und ein einfaches Netzwerkmodell: Backend, Frontend und Firewall. Die Anzahl der Server wuchs, das Modell wurde komplexer: Staging-Umgebungen, isolierte VLANs mit ACL, dann VPN mit VRF, VLAN mit ACL auf L2 und VRF mit ACL auf L3. Schwindelig? Es wird noch interessanter. Als die Anzahl der Server auf 16.000 anwuchs, wurde die Arbeit ohne Probleme mit","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. \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","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"},"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}]}}