Start
Die Popularität moderner UTM-Lösungen hängt hauptsächlich mit ihrer Multifunktionalität zusammen. Die Fähigkeit, alle IT-Aufgaben eines Unternehmens schnell und sogar über eine einzige Webschnittstelle zu lösen, zieht viele Systemadministratoren an.
Unsere Lösung, Internet Control Server , gehört ebenfalls zur Klasse der UTM-Produkte und kombiniert die Funktionen Netzwerkschutz, Internetverbindungsmanagement, Inhaltsfilterung und viele andere.
Trotz der offensichtlichen Vorteile hat die Verwendung solcher Lösungen einen Nachteil: Sie sind häufig monolithisch und ermöglichen es nicht, flexibler auf Marktveränderungen zu reagieren.
Unter diesem Gesichtspunkt ist das UTM-Gateway ein interessanteres Produkt, das vom Benutzer selbst basierend auf den tatsächlichen Aufgaben des Unternehmens erstellt werden kann.
In diesem Fall erstellt der Systemadministrator sein Gateway aus den „Bausteinen“ der Komponenten und installiert nur die Module, die er benötigt. Alle Tools befinden sich in der Entwickler-Cloud, und der Benutzer lädt die erforderlichen Pakete herunter und installiert sie. Dieses Prinzip ist für unsere zukünftigen Entwicklungen von grundlegender Bedeutung geworden.
Das historische FreeBSD-Ökosystem war in Ordnung und gut verstanden. Wir haben das traditionelle FreeBSD-Paketinstallationsprogramm pkg als am besten geeignete Methode zum Verteilen von Paketen ausgewählt. Ein Repository wird in unserer Cloud gesammelt und der Zugriff darauf wird auf dem Client in der traditionellen pkg-Konfiguration vorgeschrieben.
Was wollten wir tun?
Das System sollte ein Konstruktor in Form eines Kerns sein, auf dem die Komponenten aufgereiht sind. Der Benutzer erhält ein Distributionskit, das nur die minimal erforderlichen Plugins (Router, Fierwall usw.) enthält. Der Rest wird nach Bedarf installiert.
Damit das System funktioniert, mussten die folgenden Komponenten implementiert werden:
- Systemmodifizierter FreeBSD-Kernel
- core - ein spezielles Paket mit Produkteinstellungen, das die übergeordnete Abhängigkeit für alle Plugins darstellt
- Plugins - jedes davon ist ein kompiliertes Paket, das regelmäßig mit dem Dienstprogramm pkg installiert wird
Plugin Struktur
Wie bereits erwähnt, ist ein Plugin ein reguläres Paket. Es kann mit dem Dienstprogramm pkg installiert werden.
Um die Abwärtskompatibilität aufrechtzuerhalten, wurde entschieden, dass die neue Hauptversion des Plugins ein separates Paket ist, das nicht mit der vorherigen Hauptversion zusammenhängt. Zum Beispiel Plugin-v1 und Plugin-v2 . Der Grund ist, dass sie möglicherweise völlig unterschiedliche Abhängigkeiten haben, die sich vielleicht sogar widersprechen.
Die Nebenversion ändert einfach die Versionsnummer des Pakets, hier ist alles wie gewohnt.
Arbeiten mit Plugins
Damit das System ordnungsgemäß funktioniert, wurde zusätzlich zu pkg ein Add-On-Dienstprogramm erstellt.
Die Hauptwerkzeuge für die Arbeit sind die Befehle pkg query und pkg rquery .
Der erste sammelt Informationen zu im System installierten Plugins, der zweite greift auf das Repository zu.
Damit das Dienstprogramm die korrekte Ausführung von Befehlen im System steuern kann, wird die Ausführung jedes Befehls auf einen Rückkehrcode überprüft. Wenn ein Rückkehrcode von 0 empfangen wird, wurde der Befehl ausgeführt, wenn etwas anderes, dann ist ein Fehler aufgetreten. So können Sie beispielsweise Netzwerkverbindungsprobleme verfolgen.
Hier entstand eine interessante Nuance.
Wenn Sie beispielsweise nach allen Paketen nach Muster suchen: Wenn kein installiertes Paket der Musterbedingung entspricht, wird Fehler 69 ohne Fehlermeldung zurückgegeben. Die Entwickler des Dienstprogramms waren der Ansicht, dass dies ein abnormales Verhalten ist, wenn die Suche nichts zurückgibt. Gut, ok. Ich musste einen solchen Fall auf besondere Weise behandeln.
Aktualisieren Sie Probleme
Dann beginnen Probleme mit der Versionierung beim Aktualisieren von Plugins.
Erstens aktualisiert das Dienstprogramm pkg beim Ausführen des Befehls pkg upgrade <pkg_name> auch ALLE direkten Paketabhängigkeiten. Dieses Verhalten wird von den Entwicklern entwickelt. In unserem Fall umfasst dies jedoch das Update und den Core, wenn eine Nebenversion dafür veröffentlicht wurde. Dies ist unerwünscht, da der Core die Systemparameter ändert und nach dem Update auch einen Neustart des Systems erfordert.
Das heißt, wenn wir bereits SP2 installiert haben - pkg-1 und PKG-2 , und je PKG-1 Set PKG-2 , wenn wir den Befehl ausführen pkg upgrade pkg-1 , dann wird auch pkg-2 aktualisiert .
Lass uns den anderen Weg gehen.
Lassen Sie uns den Paketabhängigkeitsbaum nach oben und unten erstellen.
Suchen Sie die Namen aller Pakete, von denen unser Paket abhängt:
pkg rquery% rn <pkg_name>
Jetzt alle Pakete, die von unserem Paket abhängen:
pkg rquery% dn <pkg_name>
Entfernen wir alle Entitäten, die vom Paket abhängen. Als nächstes werden wir beginnen, die Entitäten zu löschen, von denen unser Paket im Baum abhängt, bis wir uns im Kern befinden (wir werden es natürlich nicht löschen). Sie können den Baum jetzt wiederherstellen, indem Sie die neuesten Nebenversionen aller darin enthaltenen Pakete installieren.
Siehe zum Beispiel in dem Bild oben, können wir , dass das ics-plugin-a-v1 - Paket ist abhängig von der ics-plugin-b-v1 - Plugin . Wenn wir das Paket auf die Version ics-plugin-v2 aktualisieren müssen, müssen Sie auch das Paket ics-plugin-b-v1 aktualisieren , für das es zwei Hauptversionen gibt - ics-plugin-b-v2 und ics-plugin -b-v3 . Keiner von ihnen unterstützt jedoch das ics-plugin-c-v1-Plugin . Das heißt, das Update installiert zuerst das Paket ics-plugin-b-v2 oder -v3 und dann das Paket ics-plugin-a-v1und ics-plugin-c werden deinstalliert und nicht installiert.
Darüber hinaus kann Core eine Hauptversion haben. In diesem Fall muss der gesamte Satz von Plugins entsprechend aktualisiert werden.
Um das ics-plugin-a- Paket zu installieren , das von ics-core-v2 abhängt , müssen Sie ics-core aktualisieren. Danach werden nur die Hauptpakete installiert, die von ics-core-v2 abhängen .
Datenbanksicherung
Bei der Arbeit mit dem Repository kann es vorkommen, dass während des Updates die Verbindung unterbrochen wird (Systemfehlercode 70 oder 3 tritt auf). Um das Plugin korrekt zu deinstallieren, benötigt das System außerdem eine gültige pkg-Basis auf dem System. Wenn beim Ausführen des Befehls pkg update keine Verbindung besteht, meldet die Basis einen Fehler und führt ihre Funktionen auch lokal nicht aus, bis die Aktualisierung korrekt abgeschlossen ist.
Um solche Situationen zu vermeiden, verwenden wir das Dienstprogramm pkg backup . Speichern Sie vor jedem Vorgang, bei dem die Möglichkeit besteht, dass das gewünschte Ergebnis nicht
erzielt wird, die Datenbank: pkg backup -d <Sicherungsverzeichnis>
Wenn der Vorgang nicht ordnungsgemäß abgeschlossen wurde, geben Sie die Datenbank an ihren Speicherort zurück :
pkg backup -r <Sicherungsverzeichnis>
Ader
Bisher ist alles ganz einfach. Wenn es ein Update für den Kernel gibt, dann:
- Laden Sie das neue Kernel-Image im Archiv herunter
- Erstellen Sie einen neuen Datensatz in zfs
- Hängen Sie den Datensatz in das System ein
- Packen Sie das Bild aus
- Installieren Sie ein spezielles Paket mit den erforderlichen Kerneloptionen für den normalen Betrieb
- Registrieren Sie das neue Image als bootfähig
- ???
Profitieren?
Noch nicht.
Wir müssen die zuvor vom Benutzer installierten System-Plugins wiederherstellen (wenn sie natürlich vom neuen Kernel unterstützt werden). Dementsprechend müssen Sie für jede Kernelversion ein separates Plugin-Repository erstellen.
Aber (wie immer) gibt es eine Nuance.
Wir haben den Kernel der zukünftigen Version noch nicht installiert und können das Plugin für eine andere Version nicht installieren. Wenn wir das System von einem neuen Image booten, können wir nicht auf das Repository zugreifen (aus historischen und technischen Gründen ist Routing auch ein Plugin).
Was zu tun ist?
Wir erhöhen den Server mit der API, die das Archiv mit dem Plugin-Repository für die angegebene Kernel-Version bereitstellt.
Anschließend generiert unser Dienstprogramm eine Repository-Konfigurationsdatei mit dem Pfad zum Ordner mit dem entpackten Archiv.
Für FreeBSD ist dies die <repo_name> .conf- Datei in / usr / local / etc / repos oder / etc / repos . Hierbei ist zu beachten, dass der Pfad wie folgt geschrieben ist: url: “file: /// path_to_repo” ( 3 Schrägstriche! )
Speichern Sie Daten zu installierten Plugins und überprüfen Sie deren Kompatibilität mit der zukünftigen Version des Kernels (falls es nicht kompatible gibt) werden wir den Benutzer darüber informieren).
Jetzt können Sie neu starten.
Letztes Ding
Pkg erfordert nach dem System-Upgrade eine Initialisierung (Bootstrap). Wenn Sie einen Befehl ausführen, werden Sie daher dazu aufgefordert. In unserem Fall wird das Bindungsdienstprogramm nicht verstehen, dass es dies wünscht, und wird berücksichtigen, dass der Vorgang falsch ausgeführt wurde.
Zu diesem Zweck haben wir einen Initialisierungsfehler-Handler erstellt. Glücklicherweise hat er einen separaten Systemoperationscode 1. Wenn das Dienstprogramm auf einen solchen Code stößt, führt es einfach
pkg aus. -Y
Pkg erstellt einen Bootstrap, und Sie können dann normal arbeiten.
Gesamt
So haben wir unser Repository aufgebaut. Dies ist zwar ein Prototyp, und in Zukunft wird er sich höchstwahrscheinlich ändern und komplexer werden, aber die Designbasis wurde gelegt und wird unverändert bleiben.
Die beschriebene Technologie wird in neuen Entwicklungen von Internet Control Server angewendet, was den Einsatz in Unternehmensnetzwerken von Unternehmen noch komfortabler macht. Sie können die aktuellste Version des ICS unter dem Link herunterladen und testen .
Testzeitraum, kostenlose Version für 9 Benutzer, Online-Demo und reaktionsschneller technischer Support.
Folgen Sie den Nachrichten und bleiben Sie bei uns!