\chapter{Les réseaux informatiques}

\section{Définition}

Pour être en mesure de comprendre le fonctionnement de l'analyse des règles de sécurité des réseaux informatiques, il est d'abords nécessaire de définir ce que sont ces derniers. Les classes et objets du code utilisent les terminologies réseaux expliquées ici. 

Le but d'un réseau informatique et d'acheminer des données sous forme de paquets \acrshort{ip} d'un noeud A vers un ou plusieurs autres noeuds. Ces réseaux sont composés de plusieurs sortes d'équipements différents comme des routers, switches (commutateurs en français) mais aussi des équipements plus orienté sur la sécurité tels que des firewalls ou proxy. Tous ces équipements sont reliés ensemble via du câblages cuivre (citation) ou bien par du réseau optique. Ils forment ensemble le réseau physique sur lequel des réseaux logiques seront configurés. Pour comprendre cela, il est essentiel de connaître le modèle réseau OSI(citation).

\newpage
\section{Le modèle OSI}

Le modèle \gls{osi} est un découpage en  sept couches, représentant les différents acteurs nécessaires à l'échange et la compréhension de l'information.

\begin{figure}[ht]
    \centering
    \includegraphics[width=100mm]{OSI_Model_v1.png}
    \caption{Le modèle OSI}
  \end{figure}
  
Ce qui va particulièrement nous intéresser ici sont les couches trois et quatres. La couche trois, réseau, décrit l'adressage logique des noeuds du réseau et la façon dont ils vont communiquer. C'est à ce niveau qu'est définit le protocole IPv4 est avec lui son système d'adressage et de routage qui sont essentiels pour comprendre le fonctionnement de certains objets (\lstinline{Address}, \lstinline{Route}).

\section{Couche 3 - les réseaux IP}

\subsection{IPv4}

Un noeud dans un réseau IPv4 est définit par une adresse réseau ainsi qu'un masque. Ensemble, ils vont définir l'identifiant de la machine ainsi que le sous-réseau dans lequel il appartient. Ces deux propriétés sont représentées sous la forme de 4 blocs de 8 bits au format décimal, séparé par des points (exemple: 192.168.0.10). Le masque lui, représente des valeurs binaires continues (par exemple 255.255.128.0). En appliquant un AND logique des deux valeurs, on obtient l'identifiant du sous-réseau dans lequel l'adresse IP fait partie. Dans le cadre de l'application, un noeud réseau est représenté par la classe \refname{sec:classe:address} (section \ref{sec:classe:address}).

Exemple tableau binaires et tout.

\subsection{CIDR}
\label{subsec:network:ip:cidr}

La notation CIDR est beaucoup utilisée dans cette application, il s'agit d'une manière

\subsection{Le routage}

Pour qu'un noeud d'un sous réseau soit capable de communiquer avec un noeud se trouvant dans un autre, il faut que le paquet soit \emph{routé} du sous réseau source vers celui de destination. Cette action est effectuée par des équipements qui s'appellent "router" et qui utilisent pour cela les tables de routage.

schéma du labo avec les ip

Image d'une table de routage.

Chaque entrée dans une table de routage indique un réseau (au format \refname{subsec:network:ip:cidr}) et quel est le noeud suivant à qui envoyer le paquet afin de s'y rendre. En plus de cela, il existe des données supplémentaires qui permettent de déterminer quel est le meilleur chemin possible lorsque plusieurs route sont possibles. Dans le contexte de cette application, la table de routage correspond à la classe \lstinline{RoutingTable} (section \ref{sec:classe:routingtable}) et une route à la classe \lstinline{Route} (section \ref{sec:classe:route}).

Dans les réseaux informatiques, les routers ont très souvent plusieurs liens vers d'autres routeurs afin d'assurer de la redondance en cas de perte de liens. Pour être capable de définir quel est le meilleur chemin possible, le router commence par déterminer quel est la route la plus précise. Admettons que l'on souhaite envoyer un paquet vers l'adresse 192.168.0.10, si on reprend la table de routage précédente, on peut voir qu'il existe une route vers le réseau 192.168.0.0/16 via le router 10.0.0.1 et une autre route pour le réseau 192.168.0.0/24 via le router 10.0.1.1. Ces deux routes sont valables pour l'adresse 192.168.0.10, mais la seconde route est plus précise dans le sens où le réseau de la route est plus petit. Au niveau du code, l'algorithme du choix de la route est fait avec la méthode \lstinline{choosed\_route}.

Les routes peuvent avoir plusieurs types qui définissent une caractéristiques propre aux routes qui s'appelle l'\emph{Administrative Distance}. Cet attribut définit la priorité d'un protocole sur un autre. Plus la valeur est basse, plus le type est prioritaire. Une route directement connectées (par exemple une adresse IP définie sur une interface du router), sera forcément prioritaire sur une route apprise par un quelconque protocole. Les routes moins prioritaires ne se voient pas dans la table de routage et il n'y a donc pas besoin de gérer cette partie là.

La dernière caractéristique importante d'une route est son interface de sortie. C'est le port que le paquet va utiliser pour rejoindre le prochain router. Cette information est notamment utilisée par la méthode \lstinline{crossed?} (section \ref{sec:methodes:crossed}) afin de savoir si un flux va traverser le router. La logique utilisée dans ce cas découle directement de cet attribut, car un flux est définit par un réseau source et destination. Si l'interface de sortie pour ces deux réseaux est la même, cela signifie que l'équipement réseau ne sera jamais traversé par ce flux.

figure des AD standards.

schéma bloc de comment choisir une route.

\section{couche 4 - Transport}

\subsection{TCP \& UDP}

Si la couche trois définit l'adressage logique qui fournit les outils pour acheminer les paquets dans un réseau, la couche quatre va permettre de définir comment ces communications sont gérées par les noeuds. Il existe plusieurs protocoles de transport différent mais en pratique, TCP et UDP sont ceux qui sont le plus utilisé dans les réseaux internes d'entreprise. Ces deux protocoles ont comme point commun le fait d'utiliser un numéro de port pour identifier leurs communications. De la même façon qu'il y a une adresse IP source et destination, il y a aussi un port source et destination. Le port de destination est utilisé par le noeud de destination pour savoir quel processus doit traiter cette requête. Le numéro de port est codé sur 16bits et bien que n'importe quel programme peut utiliser un port, les 1024 premiers sont considérés comme "well-known" et sont identifiés. Par exemple, le protocol HTTP utilisé pour les applications web utilisent le port 80 et sa version chiffrée, le HTTPS, le 443. Ces éléments s'appellent des services et correspondent dans cette application à la classe \lstinline{Service} (section \ref{sec:classe:service}) qui sont composés d'une liste de port TCP et UDP qui sont représentés par la classe \lstinline{PortRange}

tableau avec les well-known port

Lorsqu'un noeud "client" ouvre une connexion vers un noeud "seveur", il va utiliser un port source aléatoire géré par le système d'exploitation et le port de destination est définis par le programme utilisé. 

schéma ouverture de connexion.

\subsection{Firewall}

Les firewall sont des routers qui sont également capable de gérer les éléments de la couche quatre. Ils sont utilisés pour filtrer les communications entre les réseaux en filtrant les échanges basé sur les ports destinations. Ces équipements de sécurité permettent donc de n'autoriser que les paquets à destination d'un noeud spécifique et sur un ou plusieurs ports.

