nw  

Konzipierung und Implementierung einer State-of-the-Art Serverapplikation im Sicherheitsumfeld

Zusammenfassung

Nach der Realisierung eines Prototyps für einen Netzwerkcontroller im Projekt 5 soll nun die komplette Architektur des bestehenden NeSeM-Servers neu konzipiert und teilweise implementiert werden. Der Server muss zukünftig in möglichst vielen Netzwerk-Architekturen von IT Providern für die Sicherung ihrer Kunden-Infrastrukturen eingesetzt werden können. Dabei sind Performance, Multitenancy und High Availabiliy die hauptsächlichen Anforderungen an die Architektur.

Schlüsselbegriffe

Netzwerksicherheit, NeSeM, Hochverfügbarkeit, Multitenancy, Docker, Go, RabbitMQ, PostgreSQL, React

Zielsetzung
Ausgangslage

In der Vorgängerarbeit wurde eine Beispielanwendung zur Steuerung von Netzwerkelementen geschrieben. Mit dem Ergebnis können Switches von Cisco über eine eigens erstellte REST-API angesteuert werden.

Der zentrale Server im Network Security Management Projekt (kurz NeSeM) des IMVS ist zurzeit ein in Go implementierter Monolith, welcher aus den folgenden grundlegenden Komponenten besteht:

Security Controller Zentrale Steuereinheit, kann Aktionen aufgrund von Agent-Events auslösen.
Network Controller Alte Steuereinheit für die Isolation von Netzwerkteilnehmer ohne 802.1X. Wird vom Proof-of-Concept ersetzt.
RADIUS Proxy Steuereinheit für die Isolation von 802.1X Netzwerkteilnehmer.
Agent Endpoint Kommunikationseinheit für die gRPC Kommunikation zwischen Agents und dem Server. Events werden von den Agents an den Server und Regel-Updates vom Server an Agents geschickt.

NeSeM Ausgangslage
Ergebnisse

Die monolithische Architektur von NeSeM wurde aufgebrochen und die einzelnen Komponenten zu Modulen unterschiedlicher Grösse gegliedert. Das Backend Modul besteht aus Security Controller, Netzwerk Controller und RADIUS Proxy. Während das Endpoint Modul einzig aus dem Agent Endpoint besteht. Das Backend kommuniziert mit dem Endpoint über Message Queues. Wobei RabbitMQ eingesetzt wird. Die umfangreiche Restrukturierung der Applikation beinhaltet auch die Einführung einer zusätzlichen Abstraktionsschicht zwischen Applikationslogik und Datenbank. Als Datenbank wird PostgreSQL eingesetzt.

Um Hochverfügbarkeit zu erreichen wurde sämtliche in-memory Zustände der Applikation in Message Queues und Datenbank ausgelagert. Wo dies nicht möglich war wurde eine Synchronisation der Zustände eingebaut. So kann sichergestellt werden, dass sämtliche gestarteten Nodes der Applikation sich immer in konsistentem Zustand befinden.

Multitenancy wurde durch einen radikalen Umbau des bestehenden Datenmodells realisiert. Es wurde eine zentrale Kunden Tabelle eingeführt. Zusätzlich wurde den übrigen Tabellen ‐ wo nötig ‐ ein Fremdschlüssel für die Kundenbeziehung angefügt. So können alle notwendigen Entitäten mit einem Kunden verknüpft werden.

Um mit der Applikation interagieren zu können wurde eine REST API implementiert. Auf Basis dieser Schnittstelle wurde zusätzlich ein grafisches Benutzerinterface mit React gebaut. Durch dieses Webinterface wurde das manuelle Testen der Applikation wesentlich vereinfacht.

Nebst der Beseitigung zahlreicher Code Smells und der Bereinigung der Codebase von totem Code wurden Unit- und Integrationstests zur Überprüfung der Implementation eingeführt. Ausserdem wurde auf der FHNW GitLab Plattform eine Pipeline für CI/CD konfiguriert. Zusätzlich wurde ein umfangreicher Testaufbau im Netzwerklabor der FHNW eingerichtet, womit die Applikation ständig auch manuell umfangreich getestet werden konnte.

Um mögliche Deployment Konstellationen zu eruieren wurde zusammen mit einem Partner aus der Industrie ein Meeting abgehalten. Dabei kristallisiert sich Docker als Lösung heraus. Somit wurde der Build-Prozess um das Bauen von Docker Container erweitert. Die frisch gebauten Container werden nach erfolgreichem Build auch gleich im Netzwerklabor zum Testen installiert.

Projektdaten

Projektdauer: 17. September 2020 ‐ 26. März 2021
Aufwand: 720 Personenstunden
Teamgrösse: 2 Personen
Bachelor Thesis

Auftraggeber

Prof. Dr. Peter Gysel
Institut für Mobile und Verteilte Systeme FHNW

Projektteam

Stephan Wagner, stephan.wagner@students.fhnw.ch
Oliver Fabel, oliver.fabel@students.fhnw.ch

Kontakt

Prof. Dr. Peter Gysel, peter.gysel@fhnw.ch
MAS Dominik Link, dominik.link@fhnw.ch

<< zurück