Konsul + iptables =: 3

Im Jahr 2010 hatte Wargaming 50 Server und ein einfaches Netzwerkmodell: Backend, Frontend und Firewall. Die Anzahl der Server wuchs, das Modell wurde komplizierter: Staging, isolierte VLANs mit ACLs, dann VPNs mit VRF, VLANs mit ACLs zu L2, VRFs von ACLs zu L3. Kopf dreht sich? Mehr wird mehr Spaß machen.

Als Server anfingen, 16.000 ohne Tränen mit so vielen heterogenen Segmenten zu arbeiten, wurde es unmöglich. Deshalb haben sie eine andere Lösung gefunden. Wir haben den Netfilter-Stack genommen, Consul als Datenquelle hinzugefügt und eine schnell verteilte Firewall erhalten. Sie ersetzten die ACL auf den Routern und wurden als externe und interne Firewall verwendet. Für das dynamische Werkzeugmanagement haben wir das BEFW-System entwickelt, das überall eingesetzt wird: von der Kontrolle des Benutzerzugriffs auf das Lebensmittelnetzwerk bis zur Isolierung der Netzwerksegmente voneinander.



Wie das alles funktioniert und warum Sie sich dieses System genauer ansehen sollten, sagt Ivan Agarkov (annmuor) - der Leiter der Infrastruktursicherheitsgruppe der Wartungseinheit im Minsker Unternehmensentwicklungszentrum. Ivan ist ein SELinux-Fan, liebt Perl, schreibt Code. Als Leiter der IB-Gruppe arbeitet er regelmäßig mit Protokollen, Backups und F & E, um Wargaming vor Hackern zu schützen und den Betrieb aller Spieleserver im Unternehmen sicherzustellen.


Geschichtsreferenz


Bevor ich erzähle, wie wir es gemacht haben, werde ich Ihnen sagen, wie wir dazu gekommen sind und warum es gebraucht wurde. Dazu übertragen wir vor 9 Jahren: 2010 erschien nur die World of Tanks. Wargaming hatte ungefähr 50 Server.


Wachstumsdiagramm der Unternehmensserver.

Wir hatten ein Netzwerkmodell. Für diese Zeit war es optimal.


Das Netzwerkmodell im Jahr 2010.

Am Frontend gibt es Bösewichte, die uns brechen wollen, aber es gibt eine Firewall darin. Es gibt keine Firewall im Backend, aber es gibt 50 Server, wir alle kennen sie. Alles funktioniert gut.

Seit 4 Jahren ist die Serverflotte um das 100-fache auf 5000 gewachsen. Die ersten isolierten Netzwerke erschienen - Phasen: Sie können nicht in Produktion gehen, und oft drehten sich dort Dinge, die gefährlich sein könnten.


Netzwerkmodell im Jahr 2014.

Aufgrund der Trägheit wurden dieselben Eisenstücke verwendet, und alle Arbeiten wurden an isolierten VLANs durchgeführt: ACLs werden in das VLAN geschrieben, die jede Verbindung zulassen oder verbieten.

Im Jahr 2016 erreichte die Anzahl der Server 8000. Wargaming absorbierte andere Studios, zusätzliche Affiliate-Netzwerke erschienen. Sie scheinen uns zu gehören, aber nicht ganz: VLAN funktioniert oft nicht für Partner, Sie müssen ein VPN mit VRF verwenden, die Isolation wird komplizierter. Eine Mischung von ACL-Isolaten wuchs.


Das Netzwerkmodell im Jahr 2016.

Zu Beginn des Jahres 2018 wuchs die Fahrzeugflotte auf 16.000. Es gab 6 Segmente, den Rest, einschließlich der geschlossenen, in denen Finanzdaten gespeichert waren, wurden nicht berücksichtigt. Es gibt Containernetzwerke (Kubernetes), DevOps, Cloud-Netzwerke, die beispielsweise über VPN über das IVS verbunden sind. Es gab viele Regeln - es tat weh.


Netzwerkmodell und Isolationsmethoden im Jahr 2018.

Zur Isolierung verwendeten wir: VLAN mit ACL auf L2, VRF mit ACL auf L3, VPN und vieles mehr. Zu viel.

Probleme


Jeder lebt mit ACLs und VLANs. Was ist im Allgemeinen falsch? Harold, der den Schmerz versteckt, wird diese Frage beantworten.



Es gab viele Probleme, aber es gab fünf massive.

  • Geometrische Preiserhöhungen für die neuen Regeln . Jede neue Regel wurde länger als die vorherige hinzugefügt, da Sie zuerst prüfen mussten, ob es bereits eine solche Regel gab.
  • Innerhalb der Segmente befindet sich keine Firewall . Segmente waren irgendwie voneinander getrennt, im Inneren gibt es bereits nicht genügend Ressourcen.
  • Die Regeln werden seit langem angewendet. Hände, die ein lokaler Regeloperator in einer Stunde schreiben könnte. Global hat mehrere Tage gedauert.
  • Schwierigkeiten bei der Prüfung der Regeln . Genauer gesagt war es nicht möglich. Die ersten Regeln wurden bereits 2010 geschrieben und die meisten ihrer Autoren arbeiteten nicht mehr für das Unternehmen.
  • Geringe Kontrolle über die Infrastruktur . Dies ist das Hauptproblem - wir wussten nicht genau, was mit uns los war.

So sah der Netzwerktechniker 2018 aus, als er hörte: „Wir brauchen noch mehr ACLs.“



Lösungen


Anfang 2018 wurde beschlossen, etwas dagegen zu unternehmen.

Der Preis für die Integration steigt ständig. Der Ausgangspunkt war, dass große Rechenzentren keine isolierten VLANs und ACLs mehr unterstützten, da der Speicher auf den Geräten knapp wurde.

Lösung: Entfernen Sie den Faktor Mensch und automatisieren Sie die Bereitstellung des maximalen Zugriffs.

Neue Regeln gelten seit langem. Lösung: Beschleunigen Sie die Anwendung der Regeln, machen Sie sie verteilt und parallel. Dazu benötigen Sie ein verteiltes System, damit die Regeln selbst ohne rsync oder SFTP pro tausend Systeme geliefert werden.

Das Fehlen einer Firewall innerhalb der Segmente.Die Firewall innerhalb der Segmente begann zu uns zu fliegen, als verschiedene Dienste innerhalb desselben Netzwerks angezeigt wurden. Lösung: Verwenden Sie eine hostbasierte Firewall. Fast überall haben wir Linux und iptables sind überall, das ist kein Problem.

Schwierigkeiten bei der Prüfung der Regeln. Lösung: Bewahren Sie alle Regeln zur Überprüfung und Verwaltung an einem einzigen Ort auf, damit wir alles prüfen können.

Geringe Kontrolle über die Infrastruktur. Lösung: Führen Sie eine Bestandsaufnahme aller Dienste und Zugriffe zwischen ihnen durch.

Dies ist eher ein administrativer als ein technischer Prozess. Manchmal haben wir 200-300 Neuerscheinungen pro Woche, besonders während Werbeaktionen und an Feiertagen. Dies gilt jedoch nur für ein Team unserer DevOps. Bei so vielen Releases ist es unmöglich zu erkennen, welche Art von Ports, IP und Integration erforderlich sind. Deshalb brauchten wir speziell ausgebildete Servicemanager, die die Teams interviewten: „Was gibt es und warum haben Sie es angesprochen?“

Nach all dem, was wir gestartet haben, sah der Netzwerktechniker 2019 so aus.



Konsul


Wir beschlossen, alles, was wir gefunden hatten, mithilfe von Servicemanagern in Consul zu platzieren und von dort aus iptables-Regeln zu schreiben.

Wie haben wir uns dazu entschieden?

  • Wir sammeln alle Dienste, Netzwerke und Benutzer.
  • Lassen Sie uns darauf basierende iptables-Regeln erstellen.
  • Steuerung automatisieren.
  • ...
  • PROFITIEREN.

Consul ist keine Remote-API, sondern kann auf jedem Knoten arbeiten und in iptables schreiben. Es bleibt nur eine automatische Steuerung zu entwickeln, die den Überschuss beseitigt, und die meisten Probleme werden gelöst! Wir werden den Rest des Prozesses abschließen.

Warum Konsul?


Gut etabliert. In den Jahren 2014-15 haben wir es als Backend für Vault verwendet, in dem wir Passwörter speichern.

Verliert keine Daten . Während des Gebrauchs hat Consul bei keinem Unfall Daten verloren. Dies ist ein großes Plus für das Firewall-Management-System.

P2P-Kommunikation beschleunigt die Verbreitung von Veränderungen . Mit P2P kommen alle Änderungen schnell und Sie müssen nicht stundenlang warten.

Praktische REST-API. Wir haben auch Apache ZooKeeper in Betracht gezogen, aber es gibt keine REST-API. Sie müssen Krücken setzen.

Es funktioniert als Keystore (KV) und als Verzeichnis (Service Discovery) . Sie können Services, Kataloge und Rechenzentren sofort speichern. Dies ist nicht nur für uns, sondern auch für benachbarte Teams praktisch, da wir beim Aufbau eines globalen Service groß denken.

Geschrieben in Go, das Teil des Wargaming-Stacks ist. Wir lieben diese Sprache, wir haben viele Go-Entwickler.

Leistungsstarkes ACL-System. In Consul können Sie mithilfe von ACLs verwalten, wer und was geschrieben werden soll. Wir garantieren, dass sich die Regeln der Firewall nicht mit anderen überschneiden und wir keine Probleme damit haben.

Aber der Konsul hat seine Nachteile.

  • Es wird nicht innerhalb des Rechenzentrums skaliert, wenn Sie keine Geschäftsversion haben. Es wird nur vom Verband skaliert.
  • Sehr abhängig von Netzwerkqualität und Serverlast. Consul funktioniert normalerweise nicht als Server auf einem ausgelasteten Server, wenn im Netzwerk Verzögerungen auftreten, z. B. ungleichmäßige Geschwindigkeit. Dies liegt an P2P-Verbindungen und Update-Verteilungsmodellen.
  • Schwierigkeiten bei der Überwachung der Zugänglichkeit . Im Status des Konsuls kann man sagen, dass alles in Ordnung ist, aber er ist schon lange gestorben.

Wir haben die meisten dieser Probleme während der Operation von Consul gelöst und uns dafür entschieden. Das Unternehmen hat Pläne für ein alternatives Backend, aber wir haben gelernt, mit Problemen umzugehen, und leben immer noch mit Consul zusammen.

Wie der Konsul funktioniert


Im bedingten Rechenzentrum installieren wir Server - von drei bis fünf. Ein oder zwei Server funktionieren nicht: Sie können kein Quorum organisieren und entscheiden, wer richtig und wer falsch ist, wenn die Daten nicht übereinstimmen. Mehr als fünf machen keinen Sinn, die Leistung wird sinken.



Clients stellen in beliebiger Reihenfolge eine Verbindung zu den Servern her: dieselben Agenten, nur mit einem Flag server = false.



Danach erhalten Clients eine Liste der P2P-Verbindungen und bauen Verbindungen untereinander auf.



Auf globaler Ebene verbinden wir mehrere Rechenzentren miteinander. Sie verbinden auch P2P und kommunizieren.



Wenn wir Daten von einem anderen Rechenzentrum sammeln möchten, geht die Anforderung von Server zu Server. Ein solches Schema wird als Serf-Protokoll bezeichnet . Das Serf-Protokoll wird wie Consul von HashiCorp entwickelt.

Einige wichtige Fakten zum Konsul


Der Konsul hat Unterlagen, die seine Arbeit beschreiben. Ich werde nur ausgewählte Fakten nennen, die es wert sind, kennengelernt zu werden.

Konsulenserver wählen Meister unter den Wählern aus . Consul wählt den Assistenten aus der Liste der Server für jedes Rechenzentrum aus, und alle Anforderungen werden unabhängig von der Anzahl der Server nur an diesen gesendet. Das Aufhängen des Assistenten führt nicht zur Wiederwahl. Wenn der Assistent nicht ausgewählt ist, werden die Anforderungen von niemandem bearbeitet.
Möchten Sie eine horizontale Skalierung? Entschuldigung, nein.
Eine Anfrage an ein anderes Rechenzentrum geht von Master zu Master, unabhängig davon, auf welchen Server sie gelangt ist. Der ausgewählte Master empfängt 100% der Last, mit Ausnahme der Last für die Weiterleitungsanforderungen. Alle Rechenzentrumserver verfügen über eine aktuelle Kopie der Daten, aber nur eine Antwort.
Die einzige Möglichkeit zur Skalierung besteht darin, den veralteten Modus auf dem Client zu aktivieren.
Im veralteten Modus können Sie ohne Quorum antworten. Dies ist ein Modus, in dem wir die Datenkonsistenz ablehnen, aber etwas schneller als gewöhnlich lesen und jeder Server antwortet. Die Aufnahme erfolgt natürlich nur über den Master.

Consul kopiert keine Daten zwischen Rechenzentren . Beim Sammeln von Verbänden hat jeder Server nur seine eigenen Daten. Für andere wendet er sich immer an jemand anderen.

Die Atomizität von Operationen ist außerhalb der Transaktion nicht garantiert . Denken Sie daran, dass nicht nur Sie etwas ändern können. Wenn Sie es anders wollen, führen Sie eine Transaktion mit einer Sperre durch.

Blockierungsvorgänge garantieren keine Blockierung . Die Anforderung geht von Master zu Master und nicht direkt. Daher gibt es keine Garantie dafür, dass die Sperre funktioniert, wenn Sie beispielsweise in einem anderen Rechenzentrum sperren.

ACLs garantieren auch keinen Zugriff (in vielen Fällen) . Die ACL funktioniert möglicherweise nicht, da sie in einem Rechenzentrum des Verbunds gespeichert ist - im ACL-Rechenzentrum (primärer DC). Wenn der DC Ihnen nicht antwortet, funktioniert die ACL nicht.

Ein schwebender Assistent friert den gesamten Verband ein . Zum Beispiel gibt es im Verband 10 Rechenzentren, und in einem gibt es ein schlechtes Netzwerk, und ein Master fällt aus. Jeder, der mit ihm kommuniziert, steckt im Kreis: Es wird eine Anfrage gestellt, es gibt keine Antwort darauf, der Faden hängt. Es wird nicht möglich sein herauszufinden, wann dies geschehen wird, nur in ein oder zwei Stunden wird der gesamte Verband fallen. Du kannst nichts dagegen tun.

Status, Quorum und Wahlen werden in einem separaten Thread verarbeitet. Eine erneute Auswahl erfolgt nicht, der Status zeigt nichts an. Sie denken, Sie haben einen lebenden Konsul, fragen Sie, und nichts passiert - es gibt keine Antwort. Darüber hinaus zeigt der Status, dass alles in Ordnung ist.

Wir waren mit diesem Problem konfrontiert und mussten bestimmte Teile von Rechenzentren neu erstellen, um dies zu vermeiden.

Die Business-Version von Consul Enterprise weist einige der oben genannten Nachteile nicht auf . Es hat viele nützliche Funktionen: Abstimmung, Verteilung, Skalierung. Es gibt nur ein "aber" - ein Lizenzsystem für ein verteiltes System ist sehr teuer.

Life Hack: rm -rf /var/lib/consul- ein Heilmittel für alle Krankheiten des Wirkstoffs. Wenn etwas für Sie nicht funktioniert, löschen Sie einfach Ihre Daten und laden Sie die Daten von der Kopie herunter. Der Konsul wird höchstwahrscheinlich arbeiten.

Befw


Lassen Sie uns nun darüber sprechen, was wir dem Konsul hinzugefügt haben.

BEFW - eine Abkürzung für Bed and ack E nd the F the ire of the W all. Es war notwendig, das Produkt irgendwie zu benennen, als ich das Repository erstellte, um die ersten Test-Commits darin zu platzieren. Dieser Name bleibt erhalten.

Regelvorlagen


Regeln werden in iptables-Syntax geschrieben.

  • -N BEFW
  • -P INPUT DROP
  • -A INPUT -m state - state RELATED, ESTABLISHED -j ACCEPT
  • -A EINGANG -i lo -j AKZEPTIEREN
  • -A EINGANG -j BEFW

Wir alle gehen zu BEFW Kette, mit der Ausnahme ESTABLISHED, RELATEDund localhost. Die Vorlage kann alles sein, dies ist nur ein Beispiel.

Wofür ist BEFW nützlich?

Dienstleistungen


Wir haben einen Dienst, er hat immer einen Port, den Knoten, auf dem er arbeitet. Von unserem Knoten aus können wir den Agenten vor Ort fragen und herausfinden, dass wir einen Service haben. Sie können auch Tags einfügen.



Jeder Dienst, der ausgeführt und bei Consul registriert wird, wird zu einer iptables-Regel. Wir haben SSH - Open Port 22. Das Bash-Skript ist einfach: Curl und Iptables, sonst wird nichts benötigt.

Kunden


Wie kann man den Zugang nicht für alle öffnen, sondern selektiv? Fügen Sie dem KV-Repository über den Namen des Dienstes IP-Listen hinzu.



Wir möchten beispielsweise, dass jeder aus dem zehnten Netzwerk auf den Dienst SSH_TCP_22 zugreifen kann. Ein kleines TTL-Feld hinzufügen? und jetzt haben wir zum Beispiel vorübergehende Berechtigungen für einen Tag.

Zugriffe


Wir verbinden Services und Kunden: Wir haben einen Service, denn jeder KV-Speicher ist bereit. Jetzt gewähren wir nicht jedem Zugang, sondern selektiv.



Gruppen


Wenn wir jedes Mal Tausende von IPs für Zugriffe schreiben, werden wir müde. Lassen Sie uns Gruppierungen erstellen - eine separate Teilmenge in KV. Wir werden es Alias ​​(oder Gruppen) nennen und dort Gruppen nach dem gleichen Prinzip speichern.



Verbinden: Jetzt können wir SSH nicht speziell für P2P öffnen, sondern für eine ganze Gruppe oder mehrere Gruppen. Ebenso gibt es TTL - Sie können der Gruppe hinzufügen und vorübergehend aus der Gruppe entfernen.



Integration


Unser Problem ist der menschliche Faktor und die Automatisierung. Bisher haben wir es so gelöst.



Wir arbeiten mit Puppet und übertragen alles, was mit dem System (Anwendungscode) zu tun hat, darauf. Puppetdb (reguläres PostgreSQL) speichert eine Liste der Dienste, die dort ausgeführt werden. Sie finden sie nach Ressourcentyp. Dort finden Sie, wer wohin geht. Wir haben auch ein Pull-Request- und Merge-Request-System dafür.

Wir haben befw-sync geschrieben, die einfachste Lösung, mit der Daten übertragen werden können. Zuerst gehen Synchronisierungs-Cookies zu Puppetdb. Dort ist die HTTP-API konfiguriert: Wir fragen, welche Dienste wir haben, was zu tun ist. Dann stellen sie eine Anfrage an den Konsul.

Gibt es Integration? Ja, sie haben die Regeln geschrieben und dürfen die Pull-Anfrage akzeptieren. Benötigen Sie einen Port oder fügen Sie einer Gruppe einen Host hinzu? Pull Request, Review - nicht mehr "Finde 200 andere ACLs und versuche etwas dagegen zu tun."

Optimierung


Localhost-Ping mit einer leeren Regelkette dauert 0,075 ms.



Fügen Sie dieser Kette 10.000 iptables hinzu. Infolgedessen erhöht sich der Ping um das Fünffache: iptables ist vollständig linear, die Verarbeitung jeder Adresse dauert einige Zeit.



Für die Firewall, in die wir Tausende von ACLs migrieren, gibt es viele Regeln, was zu einer Verzögerung führt. Für Spielprotokolle ist dies schlecht.

Wenn wir jedoch 10.000 Adressen in ipset ping eingeben, wird dies sogar abnehmen.



Der Punkt ist, dass das "O" (Algorithmuskomplexität) für ipset immer 1 ist, egal wie viele Regeln es gibt. Es stimmt, es gibt eine Einschränkung - es kann nicht mehr als 65535 Regeln geben. Im Moment leben wir damit: Sie können sie kombinieren, erweitern, zwei ipsets in einem erstellen.

Lager


Die logische Fortsetzung des Iterationsprozesses ist die Speicherung von Kundeninformationen für den Dienst in ipset.



Jetzt haben wir das gleiche SSH und schreiben nicht sofort 100 IP, sondern setzen den Namen ipset für die Kommunikation und die folgende Regel DROP. Sie können die Regel "Wer nicht hier ist, das ist DROP" wiederholen, aber klarer.

Jetzt haben wir Regeln und Sätze. Die Hauptaufgabe besteht darin, vor dem Schreiben der Regel einen Satz zu erstellen, da sonst iptables die Regel nicht schreibt.

Allgemeines Schema


In Form eines Diagramms sieht alles, was ich gesagt habe, so aus.



Commit to Puppet, alles wird an den Host gesendet, Dienste sind hier, ipset ist da und wer dort nicht registriert ist, ist nicht erlaubt.

Zulassen & verweigern


Um die Welt schnell zu retten oder jemanden schnell auszuschalten, haben wir am Anfang aller Ketten zwei ipset gemacht: rules_allowund rules_deny. Wie es funktioniert?

Zum Beispiel erzeugt jemand mit Bots eine Last in unserem Web. Zuvor war es erforderlich, die IP-Adresse anhand der Protokolle zu ermitteln und an die Netzwerktechniker weiterzuleiten, damit diese die Quelle des Datenverkehrs finden und verbieten konnten. Jetzt sieht es anders aus.



Wir versenden zum Konsul, warten 2,5 s und Sie sind fertig. Da sich Consul schnell über P2P verbreitet, funktioniert es überall und überall auf der Welt.

Einmal habe ich WOT irgendwie komplett gestoppt und einen Fehler mit der Firewall gemacht. rules_allow- Dies ist unsere Versicherung gegen solche Fälle. Wenn wir irgendwo einen Fehler mit der Firewall gemacht haben, irgendwo etwas blockiert ist, können wir immer eine Bedingung senden, 0.0/0um schnell alles zu erhöhen. Dann werden wir alles mit unseren Händen reparieren.

Andere Sätze


Sie können beliebige andere Sätze im Raum hinzufügen $IPSETS$.



Wozu? Manchmal benötigt jemand beispielsweise ein ipset, um die Trennung eines Teils des Clusters zu emulieren. Jeder kann irgendwelche Sets mitbringen, sie anrufen und sie werden vom Konsul genommen. Gleichzeitig können die Sets sowohl an den iptables-Regeln teilnehmen als auch wie ein Team sein NOOP: Die Konsistenz wird vom Daemon unterstützt.

Benutzer


Früher war es so: Ein Benutzer, der mit einem Netzwerk verbunden war und Parameter über eine Domäne empfing. Bis zur nächsten Generation von Firewalls konnte Cisco nicht verstehen, wo sich der Benutzer befindet und wo sich die IP befindet. Daher wurde der Zugriff nur über Hostnamen-Maschinen gewährt.

Was haben wir getan? Zum Zeitpunkt des Empfangs der Adresse eingeklemmt. Normalerweise ist es dot1x, Wi-Fi oder VPN - alles läuft über RADIUS. Erstellen Sie für jeden Benutzer eine Gruppe nach Benutzernamen und geben Sie eine IP mit TTL ein, die der dhcp.lease entspricht. Sobald diese abläuft, verschwindet die Regel.



Jetzt können wir den Zugriff auf Dienste sowie auf andere Gruppen über den Benutzernamen öffnen. Wir haben die Schmerzen mit dem Hostnamen beim Ändern beseitigt und die Netzwerktechniker entlastet, weil sie Cisco nicht mehr benötigten. Jetzt schreiben die Ingenieure selbst den Zugriff auf ihre Server vor.

Isolierung


Parallel dazu begannen wir, die Isolierung zu zerlegen. Service Manager haben eine Bestandsaufnahme durchgeführt und alle unsere Netzwerke analysiert. Wir zerlegen sie in dieselben Gruppen, und auf den erforderlichen Servern wurden die Gruppen hinzugefügt, um sie beispielsweise abzulehnen. Jetzt wird dieselbe Staging-Isolation in der Produktion in rules_deny ausgeführt, jedoch nicht in der Produktion selbst.



Das Schema funktioniert schnell und einfach: Entfernen Sie alle ACLs von den Servern, entladen Sie die Hardware und reduzieren Sie die Anzahl der isolierten VLANs.

Integritätskontrolle


Zuvor funktionierte für uns ein spezieller Auslöser, der informierte, wenn jemand die Firewall-Regel mit den Händen änderte. Ich habe einen riesigen Firewall-Regelprüfer geschrieben, es war schwierig. Jetzt kontrolliert die Integrität BEFW. Er sorgt eifrig dafür, dass sich die Regeln, die er aufstellt, nicht ändern. Wenn jemand die Regeln der Firewall ändert, gibt er alles zurück. „Ich habe hier schnell einen Proxy für die Arbeit von zu Hause aus eingerichtet“ - solche Optionen gibt es nicht mehr.

BEFW steuert das ipset über die Dienste und listet in befw.conf die Dienstregeln in der BEFW-Kette auf. Aber folgt nicht anderen Ketten und Regeln und anderen ipset.

Unfallschutz


BEFW speichert immer den letzten erfolgreichen Zustand direkt in der Binärstruktur von state.bin. Wenn etwas schief gelaufen ist, wird es immer in diesen Zustand zurückgesetzt.



Dies ist die instabile Versicherung von Consul, wenn er keine Daten gesendet hat oder jemand einen Fehler gemacht und Regeln verwendet hat, die nicht angewendet werden konnten. Damit wir nicht ohne Firewall bleiben, wird BEFW auf den letzten Status zurückgesetzt, wenn irgendwann ein Fehler auftritt.

In kritischen Situationen ist dies eine Garantie dafür, dass wir bei einer funktionierenden Firewall bleiben. Wir öffnen alle grauen Netzwerke in der Hoffnung, dass der Administrator kommt und das Problem behebt. Eines Tages werde ich es in Konfigurationen herausnehmen, aber jetzt haben wir nur drei graue Netzwerke: 10/8, 172/12 und 192.168 / 16. Als Teil unseres Konsuls ist dies ein wichtiges Merkmal, das zur Weiterentwicklung beiträgt.

: - BEFW. . GitHub.


Ich erzähle Ihnen von den Fehlern, auf die wir gestoßen sind.

ipset add set 0.0.0.0/0. Was passiert, wenn Sie zu ipset 0.0.0.0/0 hinzufügen? Werden alle IPs hinzugefügt? Wird der Internetzugang geöffnet?

Nein, wir bekommen einen Fehler, der uns zwei Stunden Ausfallzeit gekostet hat. Darüber hinaus funktioniert der Fehler seit 2016 nicht mehr, er liegt in RedHat Bugzilla unter der Nummer 1297092 und wir haben ihn zufällig gefunden - aus dem Bericht des Entwicklers.

Jetzt hat BEFW eine strenge Regel, die 0.0.0.0/0sich in zwei Adressen verwandelt: 0.0.0.0/1und 128.0.0.0/1.

ipset restore set <Datei. Was macht ipset, wenn Sie es sagen restore? Glaubst du, es funktioniert genauso wie iptables? Daten wiederherstellen?

Nichts dergleichen - er führt eine Zusammenführung durch und die alten Adressen verschwinden nicht, Sie schließen den Zugriff nicht.

Wir haben einen Fehler gefunden, als wir die Isolation getestet haben. Jetzt gibt es ein ziemlich kompliziertes System - anstatt restoreausgeführt zu werden create temp, dann restore flush tempund restore temp. Am Ende des Austauschs: Aus Gründen der Atomizität, denn wenn Sie das erste Mal ausführen flushund in diesem Moment ein Paket eintrifft, wird es verworfen und etwas wird schief gehen. Daher gibt es ein wenig schwarze Magie.

consul kv get -datacenter = other. Wie gesagt, wir denken, dass wir einige Daten anfordern, aber wir werden entweder Daten oder einen Fehler erhalten. Wir können dies durch den Konsul vor Ort tun, aber in diesem Fall hängen sowohl der eine als auch der andere.

Der lokale Consul-Client ist ein Wrapper über die HTTP-API. Aber es hängt nur und antwortet weder mit Strg + C noch mit Strg + Z, egal was passiertkill -9in der angrenzenden Konsole. Wir sind darauf gestoßen, als wir einen großen Cluster aufgebaut haben. Aber wir haben noch keine Lösung, wir bereiten uns darauf vor, diesen Fehler in Consul zu korrigieren.

Der Konsulführer antwortet nicht. Unser Master im Rechenzentrum antwortet nicht, wir denken: "Wahrscheinlich wird der Neuauswahlalgorithmus jetzt funktionieren?"

Nein, es wird nicht funktionieren und die Überwachung wird nichts zeigen: Der Konsul wird sagen, dass es einen Verpflichtungsindex gibt, ein Führer gefunden wurde, alles in Ordnung ist.

Wie bekämpfen wir das? service consul restartin cron jede stunde. Wenn Sie 50 Server haben - keine große Sache. Wenn es 16.000 geben wird, werden Sie verstehen, wie es funktioniert.

Fazit


Als Ergebnis haben wir folgende Vorteile erhalten:

  • 100% Abdeckung aller Linux-Maschinen.
  • Geschwindigkeit.
  • Automatisierung
  • Befreit Eisen- und Netzwerktechniker von der Sklaverei.
  • Es gibt nahezu unbegrenzte Integrationsmöglichkeiten: sogar mit Kubernetes, sogar mit Ansible, sogar mit Python.

Nachteile : Konsul, mit dem wir jetzt leben, und ein sehr hoher Fehlerpreis. Zum Beispiel habe ich einmal um 18 Uhr (Hauptsendezeit in Russland) etwas auf den Netzwerklisten geregelt. Wir haben gerade bei BEFW Dämmstoffe gebaut. Ich habe mich anscheinend irgendwo geirrt, ich habe die falsche Maske angegeben, aber alles fiel in zwei Sekunden. Die Überwachung leuchtet auf, der Dienstoffizier kommt herein: „Alles liegt bei uns!“ Der Abteilungsleiter wurde grau, als er dem Unternehmen erklärte, warum dies geschah.

Der Preis für den Fehler ist so hoch, dass wir unser eigenes kompliziertes Prophylaxeverfahren entwickelt haben. Wenn Sie es in einer großen Produktion implementieren, müssen Sie nicht jedem einen Master-Token über Consul geben. Es wird schlecht enden.

Kosten.Ich habe den Code allein 400 Stunden lang geschrieben. Um mein 4-köpfiges Team zu unterstützen, verbringe ich insgesamt 10 Stunden im Monat. Im Vergleich zum Preis einer Firewall der neuen Generation ist diese kostenlos.

Pläne. Der langfristige Plan ist die Suche nach alternativen Transportmitteln als Gegenleistung für oder zusätzlich zu Consul. Vielleicht ist es Kafka oder so ähnlich. Aber in den kommenden Jahren werden wir vom Konsul leben.

Sofortpläne: Integration mit Fail2ban, mit Überwachung, mit nftables, möglicherweise mit anderen Distributionen, Metriken, erweiterter Überwachung, Optimierung. Die Unterstützung von Kubernetes ist ebenfalls irgendwo in den Plänen, da wir derzeit mehrere Cluster und Wünsche haben.

Ein weiterer Plan:

  • Suche nach Verkehrsanomalien;
  • Netzwerkkartenverwaltung;
  • Kubernetes Unterstützung;
  • Montage von Paketen für alle Systeme;
  • Web-Benutzeroberfläche

Wir arbeiten ständig daran, die Konfiguration zu erweitern, die Metriken zu erhöhen und zu optimieren.

Treten Sie dem Projekt bei. Das Projekt erwies sich als cool, aber leider ist dies immer noch ein Projekt einer Person. Kommen Sie zu GitHub und versuchen Sie etwas zu tun: Festschreiben, testen, etwas anbieten, Ihre Bewertung abgeben.

In der Zwischenzeit bereiten wir uns auf Saint HighLoad ++ vor , das am 6. und 7. April in St. Petersburg stattfinden wird, und wir laden Entwickler hochgeladener Systeme ein , einen Bericht zu beantragen . Erfahrene Redner wissen bereits, was zu tun ist, und wir empfehlen Neulingen, es zumindest zu versuchen . Die Teilnahme an der Konferenz als Redner hat mehrere Vorteile. Was Sie zum Beispiel am Ende dieses Artikels lesen können .

Source: https://habr.com/ru/post/undefined/


All Articles