Compare commits
6 Commits
main
...
rndmisc-44
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3cf643bc1b | ||
|
|
9361a08689 | ||
|
|
d782a96f15 | ||
|
|
7216c5f3d1 | ||
|
|
a3c9148e1e | ||
|
|
0a0dd58c94 |
6
abk.tex
6
abk.tex
@@ -43,6 +43,12 @@
|
|||||||
\acro{SSH}[SSH]{Secure Shell}
|
\acro{SSH}[SSH]{Secure Shell}
|
||||||
\acro{TTL}[TTL]{Time to live}
|
\acro{TTL}[TTL]{Time to live}
|
||||||
\acro{DRY}[DRY]{Don't repeat yourself}
|
\acro{DRY}[DRY]{Don't repeat yourself}
|
||||||
|
\acro{AAA}[AAA]{Arrange Act Assert}
|
||||||
|
\acro{RND}[RND]{Research and Development}
|
||||||
|
\acro{HTTP}[HTTP]{Hyper Text Transfer Protocol}
|
||||||
|
\acro{iBGP}[iBGP]{Internal BGP}
|
||||||
|
\acro{eBGP}[eBGP]{Exterior BGP}
|
||||||
|
\acro{ISP}[ISP]{Internet Service Provider}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -144,3 +144,4 @@ YEAR = 2002
|
|||||||
month = oct,
|
month = oct,
|
||||||
abstract = {This document describes the use of a well-known Border Gateway Protocol (BGP) community for destination-based blackholing in IP networks. This well-known advisory transitive BGP community named "BLACKHOLE" allows an origin Autonomous System (AS) to specify that a neighboring network should discard any traffic destined towards the tagged IP prefix.},
|
abstract = {This document describes the use of a well-known Border Gateway Protocol (BGP) community for destination-based blackholing in IP networks. This well-known advisory transitive BGP community named "BLACKHOLE" allows an origin Autonomous System (AS) to specify that a neighboring network should discard any traffic destined towards the tagged IP prefix.},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
bericht.pdf
BIN
bericht.pdf
Binary file not shown.
23
bericht.tex
23
bericht.tex
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
|
|
||||||
\usepackage{bericht}
|
\usepackage{bericht}
|
||||||
|
\usepackage{color}
|
||||||
|
|
||||||
%% ACHTUNG, wenn man eine eigene Formatdatei (bericht.fmt) benutzt, werden Änderungen an bericht.sty
|
%% ACHTUNG, wenn man eine eigene Formatdatei (bericht.fmt) benutzt, werden Änderungen an bericht.sty
|
||||||
%% erst wirksam, wenn die Format-Datei neu erzeugt wurde!!!
|
%% erst wirksam, wenn die Format-Datei neu erzeugt wurde!!!
|
||||||
@@ -74,7 +75,7 @@
|
|||||||
\newcommand{\Titel}{Route Injection}
|
\newcommand{\Titel}{Route Injection}
|
||||||
\newcommand{\AbgabeDatum}{18. September 2023}
|
\newcommand{\AbgabeDatum}{18. September 2023}
|
||||||
|
|
||||||
\newcommand{\Dauer}{27 Wochen}
|
\newcommand{\Dauer}{25 Wochen}
|
||||||
|
|
||||||
% \newcommand{\Abschluss}{Bachelor of Engineering}
|
% \newcommand{\Abschluss}{Bachelor of Engineering}
|
||||||
\newcommand{\Abschluss}{Bachelor of Science}
|
\newcommand{\Abschluss}{Bachelor of Science}
|
||||||
@@ -145,17 +146,17 @@ Gutachter der Studienakademie & \BetreuerDHBW \\
|
|||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\begin{abstract}
|
\begin{abstract}
|
||||||
Ein \ac{DDoS}-Angriff kann eine starke Auslastung der betroffenen Systeme verursachen.
|
Ein \ac{DDoS} Angriff kann eine starke Auslastung der betroffenen Systeme verursachen.
|
||||||
Dies kann einen Absturz zur Folge haben, oder den Zugriff auf die Systeme verhindern.
|
Dies kann einen Absturz zur Folge haben, oder den Zugriff auf die Systeme verhindern.
|
||||||
Um dieses Problem zu lösen wurde der Route Injection Service entwickelt, mit welchem ein Nutzer in der Lage ist, Netzwerkroute über \ac{BGP}-Communities zu manipulieren.
|
Um dieses Problem zu lösen wurde der Route Injection Service entwickelt, mit welchem ein Nutzer in der Lage ist, Netzwerkrouten über \ac{BGP} Communities zu manipulieren.
|
||||||
Ein \ac{DDoS}-Angriff kann daher in ein Blackhole geroutet, und eine Belastung der Zielsysteme verhindert werden.
|
Ein \ac{DDoS}-Angriff kann daher in ein Blackhole geroutet, und eine Belastung der Zielsysteme verhindert werden.
|
||||||
|
|
||||||
\vspace{2cm}
|
\vspace{2cm}
|
||||||
\begin{flushleft}
|
\begin{flushleft}
|
||||||
\emph{A \ac{DDoS}-Attack can cause a high load on the attacked systems.
|
\emph{A \ac{DDoS} attack can cause a high load on the attacked systems.
|
||||||
As a result, the systems might be inaccessible or crash.
|
As a result, the systems may become inaccessible or crash.
|
||||||
To solve this problem, we developed the route injection service, which enables a user to manipulate network routes via \ac{BGP}-Communities.
|
To solve this problem, we developed the route injection service, which enables a user to manipulate network routes via \ac{BGP} communities.
|
||||||
A \ac{DDoS}-Attack can then be routed into a blackhole, and a strain on the target systems can be avoided.}
|
A \ac{DDoS} attack can then be routed into a blackhole, and an impact on the target systems can be avoided.}
|
||||||
\end{flushleft}
|
\end{flushleft}
|
||||||
|
|
||||||
\end{abstract}
|
\end{abstract}
|
||||||
@@ -183,8 +184,8 @@ Gutachter der Studienakademie & \BetreuerDHBW \\
|
|||||||
% Ab hier beginnt der Anhang
|
% Ab hier beginnt der Anhang
|
||||||
|
|
||||||
|
|
||||||
\addcontentsline{toc}{chapter}{Index}
|
%\addcontentsline{toc}{chapter}{Index}
|
||||||
\printindex
|
%\printindex
|
||||||
|
|
||||||
\addcontentsline{toc}{chapter}{Literaturverzeichnis}
|
\addcontentsline{toc}{chapter}{Literaturverzeichnis}
|
||||||
|
|
||||||
@@ -205,8 +206,8 @@ Gutachter der Studienakademie & \BetreuerDHBW \\
|
|||||||
\def\refname{Literaturverzeichnis}
|
\def\refname{Literaturverzeichnis}
|
||||||
\printbibliography
|
\printbibliography
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
|
||||||
\appendix
|
%\appendix
|
||||||
\addcontentsline{toc}{chapter}{Anhang}
|
%\addcontentsline{toc}{chapter}{Anhang}
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
BIN
images/network-normal.png
Normal file
BIN
images/network-normal.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
BIN
images/network-under-attack-with-blackholing.png
Normal file
BIN
images/network-under-attack-with-blackholing.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 152 KiB |
BIN
images/network-under-attack.png
Normal file
BIN
images/network-under-attack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 154 KiB |
BIN
images/staging_architecture.png
Normal file
BIN
images/staging_architecture.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 903 KiB |
@@ -42,7 +42,7 @@ Mit dieser Funktion können Key-Value [\ldots] Paare über das Netzwerk in Consu
|
|||||||
\subsection{Docker}
|
\subsection{Docker}
|
||||||
|
|
||||||
Docker ist Platform zur Containerisierung von Anwendungen.
|
Docker ist Platform zur Containerisierung von Anwendungen.
|
||||||
Hierdurch wird die Möglichkeit geschaffen eine isoliertes und leichtgewichtige Umgebung zu schaffen, welche sonst lediglich mittels \acp{VM} möglich wäre.
|
Hierdurch wird die Möglichkeit geschaffen eine isolierte und leichtgewichtige Umgebung zu schaffen, welche sonst lediglich mittels \acp{VM} möglich wäre.
|
||||||
Durch Docker wird auf produktiven System durch die zusätzliche Isolationsschicht der Containerisierung eine weitere Sicherheitsstufe hinzugefügt, welche potenziellen Angreifern den Zugriff auf das Hostsystem erschwert.
|
Durch Docker wird auf produktiven System durch die zusätzliche Isolationsschicht der Containerisierung eine weitere Sicherheitsstufe hinzugefügt, welche potenziellen Angreifern den Zugriff auf das Hostsystem erschwert.
|
||||||
|
|
||||||
\subsection{Bird}
|
\subsection{Bird}
|
||||||
@@ -58,8 +58,8 @@ Durch den Export von \ac{BGP}-Routen ermöglicht Bird eine effiziente und zuverl
|
|||||||
|
|
||||||
\section{Stand der Technik}
|
\section{Stand der Technik}
|
||||||
|
|
||||||
Das \ac{BGP} ist ein Protokoll des Internet-Routings, das die \emph{besten} Wege für den Datenverkehr zwischen \acp{AS} bestimmt.
|
Das \ac{BGP} ist ein Protokoll des Internet-Routings, das die Wege für den Datenverkehr zwischen \acp{AS} bestimmt.
|
||||||
Im ursprünglichen Sinne war mit einem \ac{AS} eine Organisation mit einem Standort gemeint, welche intern über ein internes routing Protokoll verfügte.
|
Im ursprünglichen Sinne war mit einem \ac{AS} eine Organisation mit einem Standort gemeint, welche intern über ein internes Routing Protokoll verfügte.
|
||||||
Mit der Zeit hat sich die Bedeutung eines \ac{AS} abgewandelt und eine \ac{ASN} kann von einer Organisation Standortübergreifend verwendet werden bzw. eine Organisation kann über mehrere \acp{ASN} verfügen.
|
Mit der Zeit hat sich die Bedeutung eines \ac{AS} abgewandelt und eine \ac{ASN} kann von einer Organisation Standortübergreifend verwendet werden bzw. eine Organisation kann über mehrere \acp{ASN} verfügen.
|
||||||
Es verwendet Peering-Verbindungen zwischen Routern, um Informationen über erreichbare Netzwerke auszutauschen und die optimalen Pfade für den Datenaustausch zu ermitteln.
|
Es verwendet Peering-Verbindungen zwischen Routern, um Informationen über erreichbare Netzwerke auszutauschen und die optimalen Pfade für den Datenaustausch zu ermitteln.
|
||||||
Anders als bei herkömmlichen Routing Protokollen wie dem \ac{RIP} oder \ac{OSPF}, wird hier eine direkte \ac{TCP} Verbindung zwischen Routern(Neighbours/Nachbarn) hergestellt.
|
Anders als bei herkömmlichen Routing Protokollen wie dem \ac{RIP} oder \ac{OSPF}, wird hier eine direkte \ac{TCP} Verbindung zwischen Routern(Neighbours/Nachbarn) hergestellt.
|
||||||
@@ -131,9 +131,6 @@ Andere \ac{AS} können dann diese Community-Markierungen verwenden, um spezifisc
|
|||||||
\item Pfadwahl beeinflussen: Durch das Zuweisen von Communities zu bestimmten Präfixen können Netzwerkbetreiber festlegen, wie andere \ac{AS} ihre Routen interpretieren sollen.
|
\item Pfadwahl beeinflussen: Durch das Zuweisen von Communities zu bestimmten Präfixen können Netzwerkbetreiber festlegen, wie andere \ac{AS} ihre Routen interpretieren sollen.
|
||||||
Dies kann dazu verwendet werden, den bevorzugten Weg für den Datenverkehr zu beeinflussen.
|
Dies kann dazu verwendet werden, den bevorzugten Weg für den Datenverkehr zu beeinflussen.
|
||||||
|
|
||||||
\item Traffic-Engineering: Netzwerkbetreiber können Communities verwenden, um den Datenverkehrsfluss zu steuern.
|
|
||||||
Durch Markieren von Präfixen können sie bestimmte \ac{AS} dazu anleiten, den Datenverkehr auf bestimmten Wegen zu leiten, um Netzwerkressourcen effizienter zu nutzen.
|
|
||||||
|
|
||||||
\item Blackhole-Routing: \ac{BGP} Communities können dazu genutzt werden, bestimmte Präfixe zu markieren und den Datenverkehr über Blackholes zu lenken, um Angriffe oder Überlastungen zu bewältigen.
|
\item Blackhole-Routing: \ac{BGP} Communities können dazu genutzt werden, bestimmte Präfixe zu markieren und den Datenverkehr über Blackholes zu lenken, um Angriffe oder Überlastungen zu bewältigen.
|
||||||
Spezielle für Blackholing wurde eine eigene Community definiert: \verb|65535:666|~\cite[Vgl.][]{rfc7999}
|
Spezielle für Blackholing wurde eine eigene Community definiert: \verb|65535:666|~\cite[Vgl.][]{rfc7999}
|
||||||
|
|
||||||
|
|||||||
43
kapitel3.tex
43
kapitel3.tex
@@ -18,6 +18,12 @@ Die Architektur des Route Injection Service besteht aus drei wesentlichen Bestan
|
|||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
|
\section{Anexia Engine}
|
||||||
|
|
||||||
|
Mit der Anexia Engine können Benutzer über ein Webportal verschiedene von der Anexia zur Verfügung gestellte Services steuern.
|
||||||
|
Die Engine verfügt auch über eine \ac{API}, mit welcher Entwickler Ihre eigenen Applikationen, an Anexia Services koppeln können.
|
||||||
|
Intern kommuniziert die Engine wiederum mit den \ac{API}s der einzelnen Services.
|
||||||
|
|
||||||
\section{\ac{API}}
|
\section{\ac{API}}
|
||||||
|
|
||||||
Die \ac{API} ist dafür verantwortlich die Eingaben des Users, welche über die Engine übermittelt wurden zu überprüfen und zu validieren.
|
Die \ac{API} ist dafür verantwortlich die Eingaben des Users, welche über die Engine übermittelt wurden zu überprüfen und zu validieren.
|
||||||
@@ -40,6 +46,43 @@ Anschließend wird über das 'Bird Controlsocket' der Befehl zum Neuladen der Ko
|
|||||||
Als Router wird der Bird Routingdaemon eingesetzt.
|
Als Router wird der Bird Routingdaemon eingesetzt.
|
||||||
Dieser stellt eine \ac{BGP}-Session mit einem physischen Router her, welcher die von Bird zu Verfügung gestellten Router importiert und innerhalb des \ac{BGP}-Netzwerks weitergibt.
|
Dieser stellt eine \ac{BGP}-Session mit einem physischen Router her, welcher die von Bird zu Verfügung gestellten Router importiert und innerhalb des \ac{BGP}-Netzwerks weitergibt.
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
\section{Router Architektur}
|
||||||
|
|
||||||
|
Ist kein Blackholing aktiv, sieht die Netzwerkinfrastruktur in stark vereinfachter Form wie folgt aus:
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{images/network-normal}
|
||||||
|
\caption{\label{blackholing-normal}Normalbetrieb: Blackholing inaktiv}
|
||||||
|
\centering{Quelle: Eigene Abbildung}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Wird eine \ac{VM} oder ein Server aus dem Internet über einen \ac{DDoS}-Angriff angegriffen, wird die Netzwerkinfrastruktur stark belastet.
|
||||||
|
Dies kann zur Folge haben, dass das attackierte Ziel nicht mehr erreichbar ist, oder gänzlich den Dienst verweigert.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{images/network-under-attack}
|
||||||
|
\caption{\label{network-under-attack}Aktiver Angriff: Blackholing inaktiv}
|
||||||
|
\centering{Quelle: Eigene Abbildung}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Wird nun über den Route Injection Service eine Blackhole Route angelegt, injiziert ein Injector diese in den angebundenen internen Router.
|
||||||
|
Dieser gibt die Routeninformationen dann über \ac{iBGP} an den Edge Router weiter.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{images/network-under-attack-with-blackholing}
|
||||||
|
\caption{\label{network-under-attack-with-blackholing}Aktiver Angriff: Blackholing aktiv}
|
||||||
|
\centering{Quelle: Eigene Abbildung}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Der grüne Pfeil stellt das Injizieren der Routen dar.
|
||||||
|
Idealerweise wird der boshafte Datenverkehr schon am Router des \ac{ISP} verworfen.
|
||||||
|
Dies setzt jedoch voraus, dass dieser RFC7999 implementiert hat und ein solches Routen Announcement zulässt.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\endinput
|
\endinput
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|||||||
99
kapitel4.tex
99
kapitel4.tex
@@ -246,8 +246,17 @@ def generate_bird_files(v4_routes, v6_routes, pybird, pybird6):
|
|||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
Die Methode \verb|bird_config|, welche um eine gute Struktur zu wahren zu einer gesonderten Datei und Klasse angehört, ruft die \verb|get_communities| Methode der Route Dataclass auf, um die Routen in einer von Bird lesbares Format zu wandeln.
|
Die Methode \verb|bird_config|, welche um eine gute Struktur zu wahren zu einer gesonderten Datei und Klasse angehört, ruft die \verb|get_communities| Methode der Route Dataclass auf, um die Routen in ein von Bird lesbares Format zu wandeln.
|
||||||
Des Weiteren wird hier die tatsächliche Konfiguration auf das Dateisystem geschrieben.
|
Hier wurde das Prinzip des `Separation of Concerns` nicht eingehalten.
|
||||||
|
Im Idealfall sollte die Routenlogik und Birdlogik vollkommen voneinander getrennt sein.
|
||||||
|
Durch die Aufteilung des Codes in abgegrenzte Bereiche wird der Code übersichtlicher und leichter verständlich.
|
||||||
|
Entwickler können sich auf einen spezifischen Teil der Anwendung konzentrieren, ohne sich um die Komplexität anderer Teile kümmern zu müssen.
|
||||||
|
Dies erhöht die Wartbarkeit des Programmcodes um ein Vielfaches, da Änderungen eines Teiles wenig bis keinen Einfluss auf einen anderen haben.
|
||||||
|
Eine mögliche Lösung wäre hier, entweder die Communities schon vor der Übergabe an die Birdlogik in ein von Bird lesbares Format zu wandeln, oder dies in der Birdlogik selbst zu tun.
|
||||||
|
Dadurch dass die Birdlogik hier jedoch eine Methode aus der Routenlogik aufruft, wird unnötige Kopplung geschaffen.
|
||||||
|
Dies sollte in einer zukünftigen Revision des Codes gelöst werden.
|
||||||
|
|
||||||
|
Des Weiteren wird in der Birdlogik die tatsächliche Konfiguration auf das Dateisystem geschrieben.
|
||||||
|
|
||||||
\begin{lstlisting}[language=python,
|
\begin{lstlisting}[language=python,
|
||||||
frame=single, % Ein Rahmen um den Code
|
frame=single, % Ein Rahmen um den Code
|
||||||
@@ -524,7 +533,7 @@ def create_heartbeat(consul, injector_id):
|
|||||||
return session_id
|
return session_id
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Nach dem initialen Anlegen des Heartbeateintrages wird dieser alle fünf Sekunden erneuert und sicherzustellen, dass die \ac{TTL} des Eintrages nicht abläuft.
|
Nach dem initialen Anlegen des Heartbeateintrages wird dieser alle fünf Sekunden erneuert um sicherzustellen, dass die \ac{TTL} des Eintrages nicht abläuft.
|
||||||
|
|
||||||
\subsection{Emergency-Mode} %TODO RNDMISC-363
|
\subsection{Emergency-Mode} %TODO RNDMISC-363
|
||||||
|
|
||||||
@@ -535,7 +544,7 @@ Der Emergency-Mode fungiert als eine Art Sicherheitsvorkehrung, die sicherstellt
|
|||||||
Der Namensteil `Mode` lässt vermuten, dass es sich um einen tatsächlichen Operationsmodus handelt.
|
Der Namensteil `Mode` lässt vermuten, dass es sich um einen tatsächlichen Operationsmodus handelt.
|
||||||
Dies ist allerdings nicht ganz korrekt.
|
Dies ist allerdings nicht ganz korrekt.
|
||||||
Der Emergency-Mode ist eher als Funktionalitätserweiterung zu sehen und kann selbst dann aktiviert werden, wenn die Kommunikation zwischen \ac{API} und Injector intakt ist.
|
Der Emergency-Mode ist eher als Funktionalitätserweiterung zu sehen und kann selbst dann aktiviert werden, wenn die Kommunikation zwischen \ac{API} und Injector intakt ist.
|
||||||
Dies ist insbesondere nützlich, wenn dringende Änderungen an den Routingeinstellungen erforderlich sind, die nicht auf die normale Kommunikation warten können.
|
%Dies ist insbesondere nützlich, wenn dringende Änderungen an den Routingeinstellungen erforderlich sind, die nicht auf die normale Kommunikation warten können.
|
||||||
Um Zugriff auf die Kommandozeile zu erhalten, muss ein Nutzer sich über \ac{SSH} auf den Injector einloggen.
|
Um Zugriff auf die Kommandozeile zu erhalten, muss ein Nutzer sich über \ac{SSH} auf den Injector einloggen.
|
||||||
Firmeninterne Automatismen stellen sicher, dass nur befugte Nutzer Zugriff auf das System haben.
|
Firmeninterne Automatismen stellen sicher, dass nur befugte Nutzer Zugriff auf das System haben.
|
||||||
|
|
||||||
@@ -627,7 +636,7 @@ Zur Vermeidung des Dirty read Problems, welches in der Vorlesung Datenbanken erl
|
|||||||
So kann ein zweiter Prozess das Emergency File erst lesen, wenn der erste Prozess den Schreibvorgang abgeschlossen hat.
|
So kann ein zweiter Prozess das Emergency File erst lesen, wenn der erste Prozess den Schreibvorgang abgeschlossen hat.
|
||||||
Dies dient nicht nur zur Mehrbenutzersynchronisation von mehreren Menschen, sondern hauptsächlich, dass der Hauptprozess nicht versucht das Emergency File zu lesen, während ein Operator mittels des Emergency Mode Änderungen vornimmt.
|
Dies dient nicht nur zur Mehrbenutzersynchronisation von mehreren Menschen, sondern hauptsächlich, dass der Hauptprozess nicht versucht das Emergency File zu lesen, während ein Operator mittels des Emergency Mode Änderungen vornimmt.
|
||||||
|
|
||||||
Da Python, beziehungsweise die benutze \ac{JSON} Bibliothek Probleme damit hatte verschachtelte \ac{JSON}s zu de- und enkodieren, wurde eine weitere Dataclass angelegt.
|
Da Python, beziehungsweise die benutzte \ac{JSON} Bibliothek Probleme damit hatte verschachtelte \ac{JSON}s zu de- und enkodieren, wurde eine weitere Dataclass angelegt.
|
||||||
Diese Dataclass dient nur als Container, um eine Liste an Routenobjekten anzulegen.
|
Diese Dataclass dient nur als Container, um eine Liste an Routenobjekten anzulegen.
|
||||||
|
|
||||||
\begin{lstlisting}[language=python,
|
\begin{lstlisting}[language=python,
|
||||||
@@ -757,6 +766,86 @@ def write_emergency_file(routes: RouteContainer, emergency_route_file: str):
|
|||||||
|
|
||||||
\section{Testen}
|
\section{Testen}
|
||||||
|
|
||||||
|
Unit-Testing ist ein essenzieller Bestandteil der Entwicklung des Route Injection Service.
|
||||||
|
Es dient dazu, die Qualität, Verlässlichkeit und Korrektheit des Codes sicherzustellen.
|
||||||
|
Dieser Abschnitt erläutert die Bedeutung und den Prozess des Unit-Testings für den entwickelten Service.
|
||||||
|
|
||||||
|
Die Verwendung von Unit-Tests bietet mehrere Vorteile.
|
||||||
|
Sie ermöglichen die frühzeitige Erkennung von Fehlern und Unstimmigkeiten im Code.
|
||||||
|
Darüber hinaus dienen sie als Form der Dokumentation und unterstützen Refactoring-Bemühungen, um sicherzustellen, dass Änderungen das erwarteten Verhalten nicht beeinträchtigen.
|
||||||
|
Unit-Tests schaffen Vertrauen in die Software, da sie Fehler und Probleme offenlegen, bevor sie zu potenziell schwerwiegenden Problemen werden können.
|
||||||
|
Im Fall des Route Injection Service wurde pytest als Testwerkzeug eingesetzt.
|
||||||
|
Die Testabdeckung ist von zentraler Bedeutung, da sie sicherstellt, dass jeder relevante Teil des Codes getestet wird.
|
||||||
|
Über den gesamten Route Injection Service wurde hier eine Codeabdeckung von 97\% erreicht.
|
||||||
|
Die Automatisierung von Unit-Tests gewährleistet, dass Tests konsistent und wiederholbar durchgeführt werden können.
|
||||||
|
Dies ist besonders wichtig, wenn Codeänderungen vorgenommen werden, da Tests automatisch in die CI/CD-Pipeline integriert werden und bei jeder Änderung ausgeführt werden.
|
||||||
|
|
||||||
|
Zusätzlich zur Testautomatisierung wird ein Testbericht erstellt, welcher als Artifact in GitLab hochgeladen wird.
|
||||||
|
Dies ermöglicht es auch in Zukunft, vergangene Testergebnisse nachvollziehen zu können.
|
||||||
|
|
||||||
|
Unit Testing ist ein fortlaufender Prozess, der die Qualität und Stabilität des Route Injection Service sicherstellt.
|
||||||
|
Die regelmäßige Aktualisierung und Erweiterung der Test Suite ist unerlässlich, um sicherzustellen, dass der Service den sich ändernden Anforderungen gerecht wird und robust bleibt.
|
||||||
|
Insgesamt trägt das Unit Testing maßgeblich zur Zuverlässigkeit und Leistungsfähigkeit des Route Injection Service bei.
|
||||||
|
|
||||||
|
Die Überprüfung der Funktionalität einer einzelnen Methode ist eine der Hauptaufgaben von Unit-Testing.
|
||||||
|
Da viele Methoden jedoch voneinander oder anderen Komponenten abhängig sind, müssen diese über `Mocks` ersetzt werden.
|
||||||
|
Mittels der Python `unittest` Bibliothek ist dies sehr einfach möglich.
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
Beim Erstellen der Tests wurde nach der \ac{AAA} Struktur gearbeitet.
|
||||||
|
|
||||||
|
\begin{lstlisting}[language=python,
|
||||||
|
frame=single, % Ein Rahmen um den Code
|
||||||
|
framexleftmargin=15pt, % Rahmen link von den Zahlen
|
||||||
|
style=algoBericht,
|
||||||
|
label={lst:test-respond-state-to-consul},
|
||||||
|
captionpos=b, % Caption unter den Code setzen
|
||||||
|
caption={Test für respond\_state\_to\_consul Methode}]
|
||||||
|
class TestRespondStateToConsul(TestCase):
|
||||||
|
@mock.patch("injector.PyBird")
|
||||||
|
@mock.patch("injector.get_bird_communities")
|
||||||
|
@mock.patch("injector.ckv")
|
||||||
|
def test_respond_state_to_consul(
|
||||||
|
self, mock_consul, mock_get_bird_communities, mock_pybird
|
||||||
|
):
|
||||||
|
mock_pybird.get_routes.return_value = [
|
||||||
|
{
|
||||||
|
"community": "47147:3200 12345:12345",
|
||||||
|
"prefix": "1.1.1.1/32",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
mock_get_bird_communities.return_value = ["47147:3200", "12345:12345"]
|
||||||
|
|
||||||
|
route = Route(
|
||||||
|
prefix="1.1.1.1/32",
|
||||||
|
encode="IPv4",
|
||||||
|
communities='{"communities": ["47147:3200", "12345:12345"]}',
|
||||||
|
)
|
||||||
|
injector_id = "0"
|
||||||
|
respond_state_to_consul(mock_consul, mock_pybird, route, injector_id)
|
||||||
|
|
||||||
|
mock_consul.kv.put.assert_called_once_with(
|
||||||
|
f"v1/state/{injector_id}/IPv4/1.1.1.1_32",
|
||||||
|
'{"communities": ["47147:3200", "12345:12345"]}',
|
||||||
|
)
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
Die Mocks werden hier als Decorator übergeben, da die Methode anderen Methoden des Injectors aufruft und externe Abhängigkeiten wie die Consul oder Pybird Bibliothek besitzt.
|
||||||
|
|
||||||
|
\textbf{Arrange (Vorbereiten):}
|
||||||
|
|
||||||
|
In Zeile 8--21 werden die Rückgabewerte der Mocks und Parameter der zu überprüfenden Methode festgelegt.
|
||||||
|
|
||||||
|
\textbf{Act (Ausführen):}
|
||||||
|
|
||||||
|
In Zeile 22 wird die zu überprüfende Methode aufgerufen.
|
||||||
|
|
||||||
|
\textbf{Assert (Überprüfen):}
|
||||||
|
|
||||||
|
In Zeile 24--27 wird das tatsächliche Ergebnis mit dem zu erwartenden Ergebnis überprüft.
|
||||||
|
Wenn die Ergebnisse ungleich sind, schlägt der Test und somit auch die Pipeline in Gitlab fehl.
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\endinput
|
\endinput
|
||||||
|
|||||||
49
kapitel5.tex
49
kapitel5.tex
@@ -9,8 +9,57 @@
|
|||||||
|
|
||||||
\section{Planung} %TODO RNDSUP-423
|
\section{Planung} %TODO RNDSUP-423
|
||||||
|
|
||||||
|
Um die Prozesse der \ac{RND} Abteilung einzuhalten, musste vor der Umsetzung eine Planung erstellt werden.
|
||||||
|
Dies dient dazu, eine chaotische unstrukturierte Umsetzung zu vermeiden und somit sowohl Zeit zu sparen, als auch ein besseres Resultat zu erhalten.
|
||||||
|
Des Weiteren kann durch eine gute Planung, weiteres Feedback von Kollegen eingeholt werden, welche oftmals mit einer anderen Perspektive neue Erkenntnisse und Ideen einbringen können.
|
||||||
|
Somit kann vermieden werden, dass die Umsetzung mittendrin unterbrochen wird, da Komponenten noch nicht bereit sind, oder konkrete Einzelheiten noch ungeklärt sind.
|
||||||
|
|
||||||
|
Im Route Injection Projekt musste hier speziell noch geklärt werden, wie die \ac{BGP}-Sessions konfiguriert werden und welcher Router sich hierfür eignen würde.
|
||||||
|
|
||||||
|
\newpage
|
||||||
|
|
||||||
|
Das folgende Diagramm stellt die Struktur und Verbindungen der verschiedenen Komponenten dar.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\fbox{\includegraphics[width=\textwidth]{images/staging_architecture}}
|
||||||
|
\caption{\label{fig:staging-architecture}Route Injection Staging Architektur}
|
||||||
|
\centering{Quelle: Eigene Abbildung}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Die \ac{API}, der Injector und Bird sind hierbei direkte Komponenten des Route Injection Service.
|
||||||
|
Zu Testzwecken und um Resourcen zu sparen, wird die \ac{API} auf derselben Maschine wie Consul betrieben.
|
||||||
|
Da dies jedoch eine starke Abweichung von der Produktivumgebung ist, sollte dies nur als provisorische Zwischenlösung angesehen werden.
|
||||||
|
Der Injector und Bird werden ebenfalls auf derselben Maschine betrieben, dies ist jedoch so beabsichtigt und wird auch in der Produktivumgebung so umgesetzt werden.
|
||||||
|
Durch die \textcolor{blue}{blaue} Markierung soll symbolisiert werden, dass die sich darin befindlichen Komponenten innerhalb desselben Netzwerks betrieben werden.
|
||||||
|
Das `Test System 01` befindet sich in einem eigenen, \textcolor{orange}{orange} markierten Netzwerk, um vom Route Injection Service getrennt werden.
|
||||||
|
|
||||||
|
Des Weiteren wurde festgelegt wie der Route Injection Service überwacht werden soll.
|
||||||
|
Eine gute Überwachung (Monitoring) kann viele Vorteile, wie zum Beispiel das frühe Erkennen von einer Überlast oder der Erkennung, dass ein Teil des Service nicht mehr erreichbar sein sollte.
|
||||||
|
Daher wurden folgende Richtwerte für die \acp{VM} festgelegt.
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Die Arbeitsspeicherauslastung darf 25\% freien Speicher nicht unterschreiten
|
||||||
|
\item Die Festplattenspeicherauslastung darf 20\% freien Speicher nicht unterschreiten
|
||||||
|
\item Die CPU Auslastung darf 80\% nicht überschreiten
|
||||||
|
\item Die \ac{BGP} Sessions müssen etabliert sein
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Um die Kommunikation zwischen den einzelnen Komponenten sicherstellen zu können, wird hierfür ebenfalls ein Monitoring eingerichtet.
|
||||||
|
Hier soll die \ac{API} über einen `Healthcheck` Endpunkt erweitert werden, welcher den \ac{HTTP} Statuscode 200 zurückgibt und damit signalisiert, dass die \ac{API} erreichbar ist.
|
||||||
|
Um die Kommunikation zwischen der \ac{API} und Consul zu überprüfen, kann diese Testweise einen Wert in Consul anlegen und versuchen diesen zu lesen.
|
||||||
|
Der Injector gibt seinen Zustand schon über seinen Heartbeat an Consul zurück.
|
||||||
|
Dieser könnte zwecks Monitoring ebenfalls von der \ac{API} ausgelesen und überwacht werden.
|
||||||
|
|
||||||
\section{Umsetzung}
|
\section{Umsetzung}
|
||||||
|
|
||||||
|
Der wichtigste und erste Punkt in der Umsetzung war das Anlegen der \acp{VM}.
|
||||||
|
Zum provisionieren der Systeme, wird Ansible verwendet.
|
||||||
|
Ansible ermöglicht es, viele Systeme automatisiert konfigurieren zu können, ohne dies händisch machen zu müssen.
|
||||||
|
Während eine händische Konfiguration im kleinen Rahmen der Staging Umgebung zwar technisch möglich wäre, wäre dies in der Produktivumgebung, wo es viele Injectoren geben wird, nicht mehr ohne hohen Zeitaufwand möglich.
|
||||||
|
Der zweite große Vorteil von Ansible ist, dass die Konfiguration leicht nachvollziehbar und versionierbar ist.
|
||||||
|
Somit können Konfigurationsänderungen leicht wieder zurückgespielt werden.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\endinput
|
\endinput
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|||||||
14
kapitel6.tex
14
kapitel6.tex
@@ -7,6 +7,20 @@
|
|||||||
|
|
||||||
\chapter{Fazit}
|
\chapter{Fazit}
|
||||||
|
|
||||||
|
Durch den Route Injection Service wurde eine innovative Lösung hervorgebracht, welche es ermöglicht, \ac{BGP} Routen mithilfe von Communities effizient zu steuern und zu verwalten.
|
||||||
|
Diese Lösung bietet Flexibilität und Schnelligkeit, welche im Falle eines \ac{DDoS}-Angriffs von hoher Wichtigkeit ist.
|
||||||
|
Für das Unternehmen Anexia entsteht somit eine wirtschaftliche Lösung die Sicherheit ihrer eigenen Systeme und derer ihrer Kunden zu gewährleisten.
|
||||||
|
|
||||||
|
In dieser Projektarbeit wurden viele zusammenhängende Komponenten entwickelt.
|
||||||
|
Hierzu kamen eine Reihe an verschiedenen Technologiestacks zum Einsatz.
|
||||||
|
Dadurch wurden Erfahrungen im Bereich der Software Entwicklung gesammelt.
|
||||||
|
Insbesondere im Bereich der Netzwerke konnte ein tieferes Verständnis des \ac{BGP} geschaffen werden.
|
||||||
|
|
||||||
|
Aufgrund eines zeitlichen Mangels konnte die Staging Umgebung noch nicht vollständig ausgerollt werden.
|
||||||
|
Ein funktionaler erster Test war dadurch nicht möglich.
|
||||||
|
Ebenfalls davon abhängig war die Anbindung der Anexia Engine, da dies ohne eine bestehende Staging Umgebung nicht möglich wäre.
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\endinput
|
\endinput
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|||||||
Reference in New Issue
Block a user