Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications

La page est créée Anne-marie Picard
 
CONTINUER À LIRE
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Rapport d’alternance
   Système de supervision pour des baies énergies de relais radio

Apprenti : Adrien CHABOD
Maître d’apprentissage : Hubert WINKLER
Tuteur académique : Eugen DEDU

                                                                    1
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Sommaire

Enedis                                                       4 - 11
     1 – Présentation d’Enedis                               4-9
     2 – Présentation de l’AIS                               10
     3 – Présentation de l’équipe télécom AFC                10
     4 – Présentation du poste de technicien télé-conduite   10 - 11

Projet                                                       12 - 45
     1 – Le but de mon projet                                12
     2 – Étude des besoins du projet                         12
     3 – Étude des solutions évoquées                        13
     4 – Choix du support matériel                           14
     5 – Choix du système d’exploitation                     15
     6 – Choix des différents composants logiciels           16 - 27
           6.1 – Serveur Web                                 16
           6.2 – Serveur de base de données                  16 - 17
           6.3 – Pare-feu                                    17 -19
           6.4 – Fail2Ban                                    19
           6.5 – Automatisation des tâches                   19 - 20
           6.6 – SNMP                                        20 - 23
                 6.6.1 – Utilisation du protocole SNMP       20
                 6.6.2 – Le protocole SNMP                   20 - 23
           6.7 – L’interpréteur de commandes Bash            24 - 25
           6.8 – PHP                                         25 - 27

                                                                       2
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
6.8.1 – Le langage PHP                   25 - 26
                   6.8.2 – La communication PHP – MariaDB   27

     7 – Configuration des outils                           28 - 30
             7.1 – Apache2                                  28
             7.2 – NFTables/NetFilter                       28 - 29
             7.3 – Fail2Ban                                 30

     8 – Les différentes versions du projet                 31 - 45
             8.1 – Version 0.1                              32 - 35
             8.2 – Version 0.2                              36 - 37
             8.3 – Version 0.3                              38 - 39
             8.4 – Version 0.4                              39 - 41
             8.5 – Version 0.5                              42 - 43
             8.6 – Version 0.6                              44 - 45

Abstract                                                    46
Conclusion                                                  46
Evolutions envisagées                                       47
Remerciements                                               47
Bibliographie et Webographie                                48
Lexique                                                     49
Annexes                                                     50 - 74

                                                                      3
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Enedis

       1. Présentation d’Enedis

Enedis, anciennement ERDF (Électricité Réseau Distribution France) est une entreprise de
service public, gestionnaire du réseau de distribution d’électricité pour 95 % du territoire
métropolitain (hors Corse) et est une filiale détenue à 100 % par EDF Groupe.
Enedis développe, exploite et modernise 1,4 million de kilomètres de réseau électrique basse
et moyenne tension (220 et 20 000 volts) et gère les données associées.
Enedis réalise les raccordements des clients, le dépannage 24h/24, 7J/7, le relevé des
compteurs et toutes les interventions techniques. Elle est indépendante des fournisseurs
d’énergie qui sont chargés de la vente et de la gestion du contrat de fourniture d’électricité.
En tant que gestionnaire ayant un contrat de concession avec les communes et collectivités
locales propriétaires des lignes électriques, Enedis a l'obligation de garantir un accès au
réseau public d’électricité à tous les fournisseurs quels qu'ils soient, en toute indépendance,
en toute transparence et en assurant la non-discrimination. Elle est soumise à un code de
bonne conduite et une charte éthique.
Enedis, maillon essentiel du système électrique français

La Commission de régulation de l’énergie (CRE), autorité administrative indépendante
française, veille au bon fonctionnement du marché de l’électricité

                                                                                              4
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Les missions du distributeur

Le réseau public de distribution d’électricité géré par Enedis

                                                                 5
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Enedis, 1er gestionnaire de réseau de distribution en Europe
Chiffres clés en 2019
   •   36 millions de clients
   •   38 000 salariés
   •   14 Mds € de Chiffre d’Affaires (et + 4 Mds € d’investissements)
   •   1,377 million de kilomètres de réseau électrique
   •   386 419 nouveaux clients raccordés en 2019
   •   12,6 millions d’interventions clients réalisées, 24h/24
   •   374,8 TWh d’électricité acheminée avec moins de 6 % de pertes
   •   31 000 nouvelles installations d’énergies renouvelables raccordées en 2019

Enedis, une entreprise proche des territoires avec 25 Directions Régionales et 800 sites en
France

                                                                                          6
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Un modèle électrique à deux niveaux
Pour le bon exercice de ces missions, la distribution est organisée autour d’une double
dimension, nationale et territoriale, avec à la fois une activité régulée et une activité de
« concession » :

Les principes structurants du réseau électrique français

                                                                                          7
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
La transition énergétique et la distribution d’électricité
La distribution d’électricité est au cœur des enjeux de la transition énergétique et la loi de
2015 a conféré un rôle central aux gestionnaires de ces réseau pour :

Le distributeur est un facilitateur neutre au service de l’ensemble des acteurs de la transition
énergétique.
La loi transition énergétique pour la croissance verte prévoit de porter la part des énergies
renouvelables à 23 % de la consommation finale brute d’énergie en 2020 et 32 % de cette
consommation en 2030. Or 95 % des énergies renouvelables (ENR) sont directement
raccordées au réseau public de distribution d’électricité.
Avec l’annonce de la PPE (Programmation pluriannuelle de l’énergie) en novembre 2018, le
Gouvernement prévoit un doublement des capacités installées en termes d’ENR électriques
d’ici 2028.
En outre, La Loi de transition écologique pour la croissance verte (LTECV) met en avant les
nouveaux modes de consommation, dont l’autoconsommation et l’objectif que, d’ici à 2030,
7 millions de points de recharge seront déployés sur l’ensemble du territoire.
Le rôle d’Enedis est de raccorder ces points de recharge au réseau électrique naturellement
mais aussi conseiller les collectivités locales pour l’optimisation et la localisation des bornes
de recharge des véhicules électriques et assurer la qualité de fourniture, c’est-à-dire
l’adéquation entre la charge sur le réseau et l’évolution des usages électriques
Les smarts grids : un enjeu clef de la transition énergétique
Les smart grids répondent à plusieurs enjeux :
      Gestion de la production intermittente
      Nouveaux modes de consommation, tels que les véhicules électriques, et essor des
       consomm’acteurs
      Nouvelles technologies (numérique, stockage)
      Attentes croissantes en faveur du « local »

                                                                                               8
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
Le compteur communicant, la première pierre des Smard Grids
Les pouvoirs publics ont confié à Enedis la mission de remplacer tous les compteurs existants
par des compteurs électriques communicants Linky. Lancé en 2016, le déploiement se
poursuivra jusqu’en 2021. Plus de vingt millions de compteurs sont déjà en fonctionnement.
Linky permet aux collectivités locales d’accéder à des données de consommation électrique
de masse, indispensables à l’évaluation des mesures d’économie et à l’élaboration de leurs
PLU (Plan Local d’Urbanisme) ou encore SRADDET (Schéma régional d'aménagement, de
développement durable et d'égalité des territoires) et PCAET (Plan climat-air-énergie
territorial)

Enedis est ainsi un exploitant de réseaux électriques avec les activités afférentes à cette
mission et devient un gestionnaire de données énergétiques. Le monde est en pleine
mutation, l’entreprise Enedis, ses salariés et ses métiers aussi.

                                                                                           9
Rapport d'alternance - Apprenti Maître d'apprentissage Tuteur académique - Réseaux & Télécommunications
2. Présentation de l’AIS

L’AIS (Agence d’Interventions Spécialisées) est un regroupement de l’AMEPS (Agence de
Maintenance et d’exploitation des postes sources) et l’ACM (Agence Comptage Mesures). Les
principales missions de cette unité sont : les maintenances préventives et curatives des
transformateurs et des équipements rattachés (comme les disjoncteurs HTA), la recherche
des défauts câbles, la mise en place de compteurs pour les gros consommateurs (entreprises,
industries, etc.) mais aussi pour les producteurs électriques (sites éoliens principalement
dans notre région), la mise en service et la maintenance des OMT aériens et souterrains.
Enfin, l’AIS est chargé d’assurer le bon fonctionnement du réseau de communication
permettant le pilotage à distance des postes sources, des OMT et la télé-relève des
compteurs.

          3. Présentation de l’équipe télécom AFC

L’équipe dans laquelle je suis intégré est composée de 2 personnes. Hubert Winkler qui est
mon maître d’apprentissage et Alexandre Roland. Cette petite équipe couvre l’Alsace
Franche-Comté.

          4. Présentation du poste de technicien télé-conduite chez Enedis :

La mission du technicien télé-conduite est d’assurer le bon fonctionnement du réseau de
communications utilisé pour « conduire » le réseau électrique. Ce réseau de communication
appelé réseau de conduite est un regroupement de plusieurs technologies qui sont
interconnectées pour permettre une totale interopérabilité des équipements.
Le réseau de conduite utilise principalement les technologies suivantes :
- RTC (en cours de remplacement)
- Radio
- ADSL/SDSL (en cours de migration d’opérateur)
- 3G/4G LTE

Les solutions reposant sur la fibre optique sont en cours d’étude.

                                                                                             10
La totalité des sites et des équipements sont pilotés et supervisés à distance depuis un lieu
appelé l’ACR (Agence de Conduite Régionale). De plus, sur des sites sensibles comme les
postes sources les liaisons sont doublées. En effet, les postes sources disposent d’un lien
nominal ADSL ou SDSL et d’un lien RTC. Depuis peu, les équipements sont en cours de
remplacement (projet HAWAI de basculement entre SFR et Orange) ; à partir de maintenant,
les postes sources qui auront basculé chez Orange disposeront d’un lien nominal ADLS/SDSL
et d’un lien secondaire 3G/4G LTE double opérateur défini en fonction de la couverture
mobile sur site. Les relais radios seront eux aussi en liaison doublée à partir du basculement
sur HAWAI.
Comme dit précédemment, les équipements sont supervisés depuis l’ACR à l’exception des
baies énergies des relais radios qui eux disposent nativement de fonctions de supervisions
mais celles-ci n’ont jamais été mises en place.

                                                                                           11
Projet

       1. Le but de mon projet

Le but de ce projet est de réaliser un système pour superviser les baies énergies des relais
radios. Elles sont constituées d’un atelier énergie qui gère l’alimentation électrique des
autres équipements et permettent de proposer une continuité dans l’approvisionnement
électrique à l’aide de batteries en cas de défaillance secteur. Cependant, plusieurs
contraintes sont à prendre en compte, notamment celles de sécurité : les baies énergies
étant directement connectées sur le réseau de conduite, et celui-ci étant un réseau privé
sans aucune interconnexion avec un d’autres réseaux (intranet ou internet). Ceci permet un
cloisonnement total des flux qui permet d’assurer une sécurité sur le réseau. Il faut donc
rendre cette solution utilisable facilement au quotidien sans pour autant mettre en péril la
sécurité des infrastructures.

       2. Etude des besoins du projet

Comme vu précédemment, le but de ce projet est de pouvoir superviser les baies énergies
des relais radios. Les objectifs de ce système sont les suivants :
       -    Permettre le suivi de l’état des différents composants de la baie énergie
       notamment les disjoncteurs.
       -       Proposer une interface simple et intuitive.
       -       Permettre l’ajout ou la suppression de relais directement depuis l’interface.
       -       Assurer une mise à jour régulière des données.
       -      Proposer une portabilité, c’est-à-dire rendre le système compatible avec
       plusieurs systèmes d’exploitation.
       -       Proposer des outils de débogage comme par exemple un accès simplifié aux
       logs systèmes.
       -       Assurer une compatibilité avec les deux réseaux Enedis (SFR et Orange)
       -       Permettre un fonctionnement dans des conditions optimales de sécurité pour
       éviter tout piratage du réseau de conduite.
Le cahier des charges de ce projet est important et les objectifs sont multiples.

                                                                                               12
3. Etude des différentes solutions évoquées

Les baies énergies des relais radio Enedis dans la Direction Régionale (DR) Alsace Franche-
Comté reposent sur des équipements de la marque Eltek. En fonction des spécifications des
relais les références varient. Cependant, peu importe le relais, chaque équipement Eltek
embarque un firmware proposant les même fonctionnalités :

Une interface Web qui propose les fonctionnalités ci-dessous
       -      Un système de remontée d’alarme par SMS et / ou Email.
       -      Une page d’administration pour configurer les accès
       -      Une gestion des paramètres SNMP
       -      Un accès aux logs d’utilisation de la machine

A première vue, le firmware natif semble proposer une grande partie des fonctionnalités
évoquées dans le cahier des charges ci-dessus, notamment un système de remontée
d’alarme. Cependant, après quelques recherches, il a été mis en évidence que toutes les
fonctionnalités intéressantes nécessitent un accès direct au réseau internet ce qui est
impossible dans notre cas car comme dit précédemment, le réseau est totalement
hermétique pour éviter toute intrusion.

Il est donc nécessaire de mettre un place un système de supervision « maison ». Il a été
envisagé dans un premier temps d’incruster directement la page Web d’administration des
ateliers énergies des relais radios. Cependant, les baies énergies des relais radios supportent
nativement le protocole SNMP qui a été imaginé pour rendre universelle la supervision peu
importe l’équipement. J’ai donc fait le choix de me baser sur SNMP pour la réalisation de
mon projet.

                                                                                            13
4. Choix du support matériel

Avant de commencer la réalisation de ce projet, il a fallu sélectionner une plateforme
matérielle pour accueillir celui-ci. Comme dit précédemment, la configuration en réseau
fermé interdit toute utilisation d’un service cloud comme l’utilisation d’un VPS. De plus, pour
des raisons de sécurité et de simplicité d’administration, nous avons aussi écarté la
possibilité d’utiliser un serveur déjà alloué pour d’autres usages. Trois solutions ont donc été
retenues afin de comparer les avantages et inconvénients de chacune :
       -       Un ordinateur fixe bureautique.
       -       Un Raspberry PI
       -       Une machine virtuelle

J’ai choisi d’utiliser une machine virtuelle car celle-ci propose une portabilité accrue. Pour
rappel, une machine virtuelle est un ordinateur fonctionnant virtuellement sur un autre
ordinateur. Plus précisément, l’ordinateur hôte (de préférence un ordinateur disposant de
ressources importantes) est appelé Hyperviseur, celui-ci peut être de deux types, un
hyperviseur de type 1 aussi appelé hyperviseur natif ou encore « bare métal » ayant la
particularité de s’installer directement sur la couche matériel. Au démarrage de la machine
virtuelle, l’hyperviseur prend directement le contrôle du matériel, et alloue l’intégralité des
ressources aux machines hébergées. Pour ce projet, j’ai fait le choix d’un hyperviseur de
type 2 car je ne dispose pas de machine ayant des capacités suffisantes pour permettre
l’installation et l’utilisation d’un hyperviseur de type 1. Un hyperviseur de type 2 est
considéré comme un logiciel, s’installant et s’exécutant sur un système d’exploitation déjà
présent sur la machine physique. Le système d’exploitation virtualisé par un hyperviseur de
type 2 s’exécutera dans un troisième niveau au-dessus du matériel, celui-ci étant émulé par
l’hyperviseur.
J’ai choisi d’utiliser la solution VirtualBox proposée par Oracle. Il s’agit d’un logiciel pouvant
être utilisé sous n’importe quel OS et permettant de virtualiser tous les systèmes
d’exploitation sur un même hôte.

                                                                                               14
5. Choix du système d’exploitation

Une fois la plateforme matérielle sélectionnée, il a fallu faire le choix d’un système
d’exploitation.
Le cahier des charges pour le système d’exploitation était le suivant :
       -       Système léger.
       -       Peu gourmand en ressources.
       -     Permet l’installation d’un grand nombre de logiciels sans complexité de
       dépendances.
       -       Ne demande pas de mises à jour récurrentes.

Le choix d’une base Unix plutôt que d’un système Windows a rapidement fait l’unanimité ;
en effet, une distribution Linux a les avantages suivants :
       -       Choix de l’installation d’une interface graphique ou non.
       -       Très peu gourmand en ressources.
       -       Facilité d’installation les logiciels (paquets) nécessaires à l’accomplissement
du     projet.
       -       Pas besoin d’activation.
       -       Mise à jour uniquement sur demande.

J’ai choisi d’utiliser une distribution Debian en version 10 car c’est un système que j’utilise
très souvent et que je connais.

                                                                                            15
6. Choix des différents composants logiciels

           6.1.    Serveur Web

Pour le serveur Web, j’ai fait le choix d’utiliser Apache2. En janvier 2020, le serveur Web
Apache2 maintenu et développé par Apache Software Foundation était utilisé par environ
46 % des sites web à travers le monde. La solution proposée par Apache Software
Foundation a l’avantage d’être très simple de configuration, de plus celui-ci est facilement
personnalisable car il est construit sur une structure modulaire. En clair, un administrateur
active ou désactive les modules qu’il souhaite sur son installation. De plus, Apache est le
serveur qui est installé par défaut sur les machines exécutant Debian 10 (la version choisie
pour la mise en place du projet) et c’est aussi celui-ci qui sera automatiquement configuré à
l’installation de PHP (dont nous parlerons plus tard). D’autres solutions existent comme
Nginx ou Lighttpd. Nginx est une alternative à Apache2, celui-ci a été créé pour résoudre un
problème appelé c10k, problème qui dégrade fortement les performances des serveurs Web
au-delà de 10 000 connexions simultanées. Nginx est donc plus adapté aux sites à fort trafic.
Quant à Lighttpd, il s’agit d’un projet visant à créer un serveur Web à très faible
consommation de ressources, cependant, celui-ci ne permet pas l’utilisation de très
nombreuses fonctionnalités…

Plusieurs composantes ont été ajoutées au serveur Web afin de lui permettre d’interagir
avec les autres éléments du projet ou dans le but d’en améliorer la sécurité.

En effet, une interface Web est nécessaire, la façon la plus simple de faire communiquer un
site avec une base de données est d’utiliser le langage PHP, pour utiliser PHP avec Apache2 il
faut installer le paquet : « php » via le gestionnaire APT intégré à Debian. De plus, j’ai installé
« php-mbstring » qui permet l’utilisation de chaines de caractères multi-octets.

           6.2.    Serveur de base de données

Les bases de données (BDD) sont utilisées pour stocker et exploiter l’intégralité des
informations relatives à un thème ou à une activité. Celles-ci peuvent être structurées
comme les bases de données relationnelles (que nous allons utiliser) ou bien hébergées sous
forme de données brutes déstructurées qui, dans ce cas, seront ensuite parcourues de
manière organisée au moment de la lecture via des moteurs spécifiques.

                                                                                                16
J’ai fait le choix d’une base de données relationnelle au langage SQL car celles-ci ont été
étudiées durant le DUT, de plus, elles sont bien intégrées et facile d’utilisation avec PHP.
Par habitude, j’ai aussi fait le choix d’utiliser Maria DB qui est un fork communautaire de
MySQL. A la différence de MySQL qui est gratuit mais sous licence propriétaire, Maria DB est
libre (open source) et donc évidemment gratuit. Enfin, en 2012, MySQL a été abandonné au
profit de Maria DB par Debian ce qui facilite son installation par rapport à MySQL.

           6.3.   Pare-feu

Un pare-feu (firewall en anglais) est un logiciel et/ou matériel permettant de faire respecter
la politique de sécurité du réseau. Cette dernière définit les types de communications
autorisées sur ce réseau informatique. Il surveille et contrôle les applications et les flux de
données (paquets).
Même si ce réseau informatique est physiquement hermétique, j’ai fait le choix d’installer un
pare-feu sur la machine virtuelle qui sera amené à héberger mon projet. En effet,
l’installation d’un pare-feu permet de diminuer la « surface d’attaque » de la machine et
donc d’éviter au maximum que celle-ci soit utilisée à des fins malveillantes. Par exemple, on
peut très bien imaginer le scénario d’attaque suivant : ce réseau étant assez difficile d’accès,
les personnes disposant dudit accès sont toutes connues par l’entreprise car elles disposent
d’habilitations et des connaissances sur la topologie du réseau. Si une personne
malintentionnée souhaite réaliser une attaque contre un ou plusieurs équipements du
réseau, elle aurait tout intérêt à masquer l’origine de l’attaque. Le recours à une machine
vulnérable comme intermédiaire permettrait alors d’effectuer une attaque en diminuant
fortement le risque d’être mis en cause.
Le choix d’un pare-feu est à réfléchir en fonction de l’importance de la machine mais surtout
en fonction de la quantité de trafic à filtrer et du coût financier de celui-ci par rapport au
gain en termes de sécurité.
On distingue deux grandes plateformes de pare-feux :
       -      Les pare-feux physiques.
       -      Les pare-feux logiciels

Un pare-feu physique est un équipement séparé de notre ordinateur, celui-ci est situé entre
notre accès au réseau externe et notre machine. Ce genre de pare-feu ne fonctionne pas
directement sur le système comme un logiciel, il a l’avantage d’être beaucoup plus difficile à
déjouer mais il est aussi plus onéreux qu’un pare-feu logiciel.

                                                                                             17
Un pare-feu logiciel est installé directement sur le système à protéger, celui-ci a l’avantage
d’être moins cher voire gratuit mais en échange il est un peu moins efficace que le pare-feu
physique. Dans mon cas, j’ai fait le choix d’un pare-feu logiciel car celui-ci sera suffisant pour
assurer la sécurité de notre installation.
Une fois la plateforme sélectionnée, il faut savoir que différentes catégories de pare-feux
existent. On compte notamment le pare-feu sans état (stateless firewall), le pare-feu à états
(stateful firewall), le pare-feu applicatif et le pare-feu identifiant.
Pour commencer, le pare-feu sans état (stateless firewall) est le plus vieux dispositif de
filtrage réseau. Il regarde chaque paquet indépendamment des autres et le compare à une
liste de règles préconfigurées. Le pare-feu sans état est bien souvent assez complexe à
configurer et l’absence de prise en compte de l’état des connexions ne permet pas d’obtenir
une finesse de filtrage très évoluée. Ces pare-feux ont donc tendance à tomber en
désuétude.
Ensuite, le pare-feu à états introduit une notion de connexion. Les pare-feux à états vérifient
la conformité des paquets à une connexion en cours. C’est-à-dire qu’il vérifie que chaque
paquet d’une connexion est bien la suite du précédent paquet et la réponse à un paquet
dans l’autre sens.
Le pare-feu applicatif quant à lui vérifie la conformité d’un paquet à un protocole. Par
exemple, le port 80 est utilisé par le protocole HTTP, le pare-feu applicatif vérifie que chaque
paquet transitant par le port 80 est bien un paquet utilisant le protocole HTTP. Cependant,
ce genre de filtrage est très gourmand en temps de traitement dès que le débit devient
important.
Enfin, le pare-feu identifiant permet un filtrage par utilisateur et non plus par adresse IP ou
adresse MAC. Ce genre de pare-feu utilise un système d’association entre l’utilisateur et une
adresse IP ou MAC.
Dans notre cas, nous allons utiliser un pare-feu avec états (et qui propose aussi les
fonctionnalités d’un pare-feu sans état). Il s’agit du cadriciel (framework) Netfilter associé à
l’utilitaire NFTables.
Comme dit précédemment, Netfilter est un cadriciel (framwork) implémentant un pare-feu
au sein du noyau Linux (à partir de la version 2.4). Il prévoit des accroches ((hooks) sans le
noyau pour l’interception et la manipulation des paquets réseau lors de l’appel des routines
de réception ou d’émission des paquets des interfaces réseau. L’une des caractéristiques
importantes construites sur la framework Netfilter est le Connection Tracking (CT) qui
permet au noyau de garder la trace de toutes connexions réseau et par conséquent tous les
paquets qui composent cette connexion.
NetFilter est donc le pare-feu de Linux, cependant, celui-ci est pratiquement inconfigurable
sans un utilitaire pour réaliser cette tâche. Il en existe deux : IPTables et NFTables. NFTables
est simplement une grosse évolution d’IPTables. Nous parlerons donc uniquement de celui-ci
qui sera utilisé dans le projet.

                                                                                               18
NFTables est un sous-système du noyau Linux fournissant le filtrage et la classification des
paquets. Il s’agit d’une sorte d’interface permettant la mise en place d’un pare-feu (ou d’une
translation d’adresse) sur un système Linux en utilisant les crochets (hooks) proposés par
NetFilter. NFTables apporte de nombreuses évolutions par rapport à IPTables notamment
dans la syntaxe des règles de filtrage mais surtout, les performances de NFTables sont
supérieures à celles d’IPTables.
Ci-dessous deux schémas explicatifs du fonctionnement de différents crochets (hooks) :

           6.4.    Fail2Ban
Fail2ban bloque les adresses IP appartenant à des hôtes qui tentent de casser la sécurité du
système, pendant une période configurable (mise en quarantaine).
Il lit les logs de divers services (SSH, Apache, FTP…) à la recherche d'erreurs
d'authentification répétées et ajoute une règle IPTables ou NFTables pour bannir l'adresse IP
de la source.
Il permet de ralentir les attaques par force brute, ainsi que les attaques par déni de service.
Fail2ban est aussi capable de bloquer les attaques distribuées.

           6.5.    Automatisation des taches – Cron

L’automatisation des tâches est une nécessité car elle assure la mise à jour régulière des
informations. Sans cette automatisation, le système ne permettrait plus de supervision ni de
remontée d’alarme en cas de défaillance. Les systèmes Unix étant très complets et
permettant de nombreux cas d’usage, cette fonctionnalité est implémentée depuis très
longtemps sous la forme d’un programme appelé « cron ». Cron est la troncation de crontab,
lui-même troncation de chrono-table qui signifie « table de planification ». Il s’agit d’une

                                                                                              19
fonctionnalité très utile pour des tâches routinières d’administration système mais elle peut
très bien être exploitée pour tout autre chose.
Cron prend la forme d’un daemon, ce qui désigne un programme qui s‘exécute en arrière-
plan. Le service cron (crond) attend ainsi jusqu’au moment spécifié dans le fichier de
configuration (que l’on appelle le crontab) puis effectue l’action correspondante et se
rendort jusqu’à l’événement suivant. Crontab est le programme permettant sous Unix la
modification des fichiers de configuration cron. Enfin, le service cron est lancé par le compte
root pour pouvoir s’adapter à l’identité de chacun des utilisateurs.
Le logiciel cron s’utilise avec une syntaxe particulière qui est la suivante :

           6.6.    SNMP

               6.6.1. Utilisation du protocole SNMP

Comme dit en introduction, j’ai choisi de me baser sur le protocole SNMP pour effectuer la
supervision des baies énergies. Le fonctionnement de SNMP sera expliqué plus bas,
cependant, pour exploiter les fonctionnalités de SNMP, il faut avant tout installer le client
SNMP via le gestionnaire de paquets APT à l’aide de la commande : « apt install snmp ».
L’installation du service SNMP (snmpd) n’est pas utile car le service SNMP offre la possibilité
de supervision de la machine sur lequel il est installé, ce qui n’a aucun intérêt dans mon cas.

               6.6.2. Le protocole SNMP

                                                                                             20
Une fois l’étude de besoins et les différentes configurations réalisées, il a fallu commencer la
création à proprement parler du système.
Comme dit plus haut, le projet va utiliser le protocole de SNMP pour effectuer le relevé de
l’état des différents systèmes.
SNMP signifie « Simple Network Management Protocol », ce protocole réseau permet le
monitoring et la supervision d’éléments systèmes et réseaux. Généralement, un serveur de
supervision utilise SNMP pour connaître rapidement l’état du parc informatique (switch,
routeur, serveurs) comme l’occupation RAM, CPU, Disque etc.
Le système de gestion de réseau est basé sur deux éléments principaux : un superviseur et
des agents. Le superviseur est la console qui permet à l'administrateur réseau d'exécuter des
requêtes de management. Les agents sont des entités qui se trouvent au niveau de chaque
interface connectant l'équipement managé au réseau et permettant de récupérer des
informations sur différents objets.
Switchs, hubs, routeurs et serveurs sont des exemples d'équipements contenant des objets
manageables. Ces objets manageables peuvent être des informations matérielles, des
paramètres de configuration, des statistiques de performance et autres objets qui sont
directement liés au comportement en cours de l'équipement en question. Ces objets sont
classés dans une sorte de base de données appelée MIB ("Management Information Base").
SNMP permet le dialogue entre le superviseur et les agents afin de recueillir les objets
souhaités dans la MIB.

L'architecture de gestion du réseau proposée par le protocole SNMP est donc basée sur trois
principaux éléments :
     Les équipements managés (managed devices) sont des éléments du réseau (ponts,
      hubs, routeurs ou serveurs), contenant des "objets de gestion" (managed objects)
      pouvant être des informations sur le matériel, des éléments de configuration ou des
      informations statistiques ;
     Les agents, c'est-à-dire une application de gestion de réseau résidant dans un
      périphérique et chargée de transmettre les données locales de gestion du
      périphérique au format SNMP ;
     Les systèmes de management de réseau (network management systems notés NMS),
      c'est-à-dire une console au travers de laquelle les administrateurs peuvent réaliser
      des tâches d'administration.

Concrètement, dans le cadre d'un réseau, SNMP est utilisé :
     pour administrer les équipements ;
     pour surveiller le comportement des équipements.

                                                                                              21
Une requête SNMP est un datagramme UDP habituellement envoyé par le manager à
destination du port 161 de l'agent. Les schémas de sécurité dépendent des versions de
SNMP (v1, v2 ou v3). Dans les versions 1 et 2, une requête SNMP contient un nom appelé
communauté, utilisé comme un mot de passe. Sur de nombreux équipements, la valeur par
défaut de communauté est « public » ou « private ». Pour des raisons de sécurité, il convient
de modifier cette valeur. Un nom de communauté différent peut être envisagé pour les droits
en lecture et ceux en écriture. Les versions 1 et 2 du protocole SNMP comportent de
nombreuses lacunes de sécurité. C'est pourquoi les bonnes pratiques recommandent de
n'utiliser que la version 3. Cette dernière se base sur le chiffrement DES avec deux mots de
passe ou clés sur 64 bits partagés entre l'agent et le manager :
     un pour l'authentification
     un pour le chiffrement
Si un mot de passe venait à être trouvé, ce procédé permet de ne pas compromettre à la fois
la sécurité du chiffrement et de l'authentification.
Pour les tâches d'administration de serveurs sensibles via SNMP (reboot, etc.), la version 3
montre tout de même certaines limites en matière de sécurité (chiffrement plutôt faible).
Pour pallier cela et ainsi renforcer la sécurité des échanges SNMP, la RFC 38262 traite de
l'implémentation d'AES dans ce dernier.
Un grand nombre de logiciels libres et propriétaires utilisent SNMP pour interroger
régulièrement les équipements et produire des graphes rendant compte de l'évolution des
réseaux ou des systèmes informatiques (Centreon, NetCrunch 5, MRTG, Cacti, Shinken,
Nagios, Zabbix, PRTG, Observium, LibreNMS).
Le protocole SNMP définit aussi un concept d'interruptions3 (traps en anglais). Une fois
défini, si un certain événement se produit, comme le dépassement d'un seuil, l'agent envoie
un paquet UDP sur le port 162 du serveur de supervision.
Vous trouverez-ci dessous un schéma très simplifié des interactions en utilisant le protocole
SNMP :

Comme dit plus haut, différentes versions du protocole SNMP existent. Cependant, au vu des
importants problèmes de sécurité présents dans les versions 1 et 2, seule la version 3 du
protocole est recommandée pour une utilisation sur des équipements en production.

                                                                                               22
De plus, le protocole de chiffrement DES (Data Encryption Standard) n’est plus recommandé
du fait de sa lenteur à l’exécution et de son espace de clés trop petit permettant une attaque
par force brute en un temps raisonnable.
J’ai donc choisi d’implémenter dans mon système de supervision la version 3 du protocole
SNMP. A la différence des versions 1 et 2 de ce protocole, la version 3 n’utilise pas de nom de
communauté mais un nom d’utilisateur et deux mots de passe, ce qui a été expliqué plus
haut. J’ai fait le choix de l’algorithme SHA1 pour l’authentification et AES pour le chiffrement.
Le protocole SNMP est juste un protocole de communication, il est inutile si on ne connaît
pas en détail la branche MIB se rapportant à l’appareil à superviser ou plus largement à son
constructeur.
Une MIB (management information base, base d'information pour la gestion du réseau) est
un ensemble d'informations structuré sur une entité réseau, par exemple un routeur, un
commutateur ou un serveur.
La structure de la MIB est hiérarchique : les informations sont regroupées en arbre. Chaque
information a un « object identifier », une suite de chiffres séparés par des points, qui
l'identifie de façon unique et un nom, indiqué dans le document qui décrit la MIB.
Par exemple, 1.3.6.1.2.1.2.2.1.2 est l'object identifier ifDescr qui est la chaîne de caractères
décrivant une interface réseau (comme eth0 sur Linux ou Ethernet0 sur un routeur Cisco).
Chaque constructeur dispose donc de sa propre branche dans la MIB, il est libre de
l’organiser à sa façon, cependant, il est évident qu’il ne peut pas utiliser une autre branche
que la sienne et qu’il doit appliquer les règles d’écriture propres à cette base de données qui
sont définies dans la RFC 1155. Généralement, les constructeurs intègrent dans leurs
équipements la totalité de la MIB standard (qui est publique) et la branche correspondant à
leurs équipements sous la branche « Entreprise ». Le schéma suivant montre la position dans
l’arbre de la branche MIB du constructeur Cisco.
                                                      Dans mon cas, j’ai été forcé de contacter
                                                      à plusieurs reprises l’entreprise Eltek
                                                      pour obtenir de leur part la branche MIB
                                                      se rattachant aux équipements possédés
                                                      par Enedis. Eltek propose un système de
                                                      supervision plus évolué que celui intégré
                                                      nativement dans chaque équipement, je
                                                      suppose donc qu’ils souhaitent éviter de
                                                      communiquer ces informations pour des
                                                      raisons commerciales.

                                                                                              23
6.7.    L’interpréteur de commandes Bash

Une fois la MIB connue, il est à présent temps de l’exploiter pour effectuer quelques tests de
vérification. Pour cela, j’ai au préalable installé sur la machine hébergeant mon projet le
client SNMP pour l’exploitation de ce protocole. Le paquet SNMP regroupe un grand nombre
d’outils permettant l’exploitation de ce protocole. Certains outils graphiques existent pour
naviguer et extraire des informations à l’aide du protocole SNMP mais par choix, j’ai décidé
d’utiliser uniquement des outils en lignes de commandes pour deux raisons : les outils en
lignes de commandes sont bien moins gourmands en ressources. De plus, étant utilisateur
très régulier de systèmes Linux, les outils en CLI sont plus simples à utiliser une fois qu’on en
a l’habitude.
Cependant, pour utiliser des outils en lignes de commandes il faut au préalable disposer d’un
interpréteur de commandes. Un interpréteur de commande est un logiciel système faisant
partie des composants de base d’un système d’exploitation. Sa fonction est d’interpréter les
commandes qu’un utilisateur tape au clavier dans l’interface en lignes de commandes pour
ensuite les traduire en code compréhensible par la machine. Sur Debian et plus largement
sur les systèmes Unix, l’interpréteur de commandes de base est Bash pour « Bourne-Again
shell », celui-ci est l’évolution du Bourne shell « sh ou bsh » qui était un des premiers
interpréteurs du projet Unix.
Comme tous les interpréteurs en lignes de commandes de type script, Bash exécute quatre
opérations fondamentales :
    1. Il fournit une liste de commandes permettant d'opérer sur l'ordinateur (lancement de
       programmes, copie de fichiers, etc.) ;
    2. Il permet de regrouper ces commandes dans un fichier unique appelé script ;
    3. Il vérifie la ligne de commandes lors de son exécution ou lors d'une éventuelle
       procédure de vérification et renvoie un message d'erreur en cas d'erreur de syntaxe ;
    4. En cas de validation, chaque ligne de commande est interprétée, c'est-à-dire traduite
       dans un langage compréhensible par le système d'exploitation, qui l'exécute alors.
Les scripts sont de courts programmes généralement faciles à construire. Bash offre un
service de gestion de flux, c'est-à-dire qu'il permet que le résultat d'un script (la sortie) soit
transmis à un autre script (l'entrée). De cette façon, les scripts peuvent être « chaînés »,
chacun effectuant une seule tâche bien délimitée.
Bash est un shell qui peut être utilisé soit en mode interactif, soit en mode batch :
     mode interactif : Bash attend les commandes saisies par un utilisateur puis renvoie le
      résultat de ces commandes et se place à nouveau en situation d'attente.
     mode batch : Bash interprète un fichier texte contenant les commandes à exécuter.

                                                                                               24
Pour les besoins du projet, j’ai utilisé Bash dans les deux modes, le mode interactif pour
l’administration de la machine et réaliser des tests ou du débogage et le mode batch car les
requêtes SNMP seront réalisées par des scripts bash qui seront eux-mêmes générés par un
autre script Bash.

           6.8.    La partie PHP
               6.8.1. Le langage PHP

PHP est un langage de script utilisé le plus souvent côté serveur : dans cette architecture, le
serveur interprète le code PHP des pages Web demandées et génère du code (HTML,
XHTML, CSS par exemple) et des données (JPEG, GIF, PNG par exemple) pouvant être
interprétés et rendus par un Navigateur Web. PHP peut également générer d'autres formats
comme le WML, le SVG et le PDF.
Il a été conçu pour permettre la création d'applications dynamiques, le plus souvent
développées pour le Web. PHP est le plus souvent couplé à un serveur Apache bien qu'il
puisse être installé sur la plupart des serveurs HTTP tels qu’IIS ou Nginx. Ce couplage permet
de récupérer des informations issues d'une base de données, d'un système de fichiers
(contenu de fichiers et de l'arborescence) ou plus simplement des données envoyées par le
navigateur afin d'être interprétées ou stockées pour une utilisation ultérieure.
C'est un langage peu typé et souple et donc facile à apprendre par un débutant mais, de ce
fait, des failles de sécurité peuvent rapidement apparaître dans les applications.
Pragmatique, PHP ne s'encombre pas de théorie et a tendance à choisir le chemin le plus
direct. Néanmoins, le nom des fonctions (ainsi que le passage des arguments) ne respecte
pas toujours une logique uniforme, ce qui peut être préjudiciable à l'apprentissage.
Son utilisation commence avec le traitement des formulaires puis par l'accès aux bases de
données. L'accès aux bases de données est aisé une fois l'installation des modules
correspondants effectuée sur le serveur. La force la plus évidente de ce langage est qu'il a
permis au fil du temps la résolution aisée de problèmes autrefois compliqués et est devenu
par conséquent un composant incontournable des offres d'hébergement.
Il est multiplateforme : autant sur Linux qu'avec Windows, il permet aisément de reconduire
le même code sur un environnement à peu près similaire (prendre en compte les règles
d'arborescences de répertoires qui peuvent changer).
Libre, gratuit, simple d'utilisation et d'installation, ce langage nécessite comme tout langage
de programmation une bonne compréhension des principales fonctions usuelles ainsi qu'une
connaissance aiguë des problèmes de sécurité liés à ce langage.
PHP appartient à la grande famille des descendants du C, dont la syntaxe est très proche. En
particulier, sa syntaxe et sa construction ressemblent à celles des langages Java et Perl, à ceci

                                                                                              25
près que du code PHP peut facilement être mélangé avec du code HTML au sein d'un fichier
PHP.
Dans une utilisation destinée à l'internet, l'exécution du code PHP se déroule ainsi : lorsqu'un
visiteur demande à consulter une page de site Web, son navigateur envoie une requête au
serveur HTTP correspondant. Si la page est identifiée comme un script PHP (généralement
grâce à l'extension .php), le serveur appelle l'interprète PHP qui va traiter et générer le code
final de la page (constitué généralement d'HTML ou de XHTML, mais aussi souvent de feuilles
de style en cascade et de JS). Ce contenu est renvoyé au serveur HTTP, qui l'envoie
finalement au client.
Ce schéma explique ce fonctionnement :

Comme expliqué précédemment, le mode de fonctionnement de PHP se rapproche d’un
langage interprété même si pour être précis, celui-ci est précompilé en bytecode (code
intermédiaire) puis envoyé à la machine pour être interprété. C’est une notion importante
car dans une page Web utilisant du PHP, les instructions sont exécutées selon l’ordre dans
lequel elles ont été écrites. Je me suis servi de cette propriété pour permettre un affichage
dynamique de la page en utilisant une seule fois le même code pour toute la page et en
modifiant simplement les variables.

                                                                                             26
6.8.2. La communication entre PHP et MariaDB

Une fois le fonctionnement de base de PHP bien assimilé, il a été nécessaire de permettre la
communication entre mon serveur Web et mon serveur de base de données. Pour cela, il a
fallu installer l’extension php-mysql qui au travers du langage PHP permet l’exploitation
d’une base de données relationnelle qui se base sur le langage SQL. Le paquet php-mysql
permet de réaliser à partir d’une page Web écrite en PHP des requêtes sur un serveur SQL.
Il existe deux syntaxes différentes pour accéder à une base de données via PHP, la syntaxe
dite mysqli et la syntaxe PDO. L’extension MySQLi (abréviation pour MySQL Improved en
anglais, c’est-à-dire MySQL Amélioré) est un pilote qui permet d’interfacer des programmes
écrits en PHP avec les bases de données MySQL. MySQLi est donc la méthode la plus
ancienne des deux mais elle ne permet d’accéder qu’aux bases de données MySQL. Pour ma
part, j’ai choisis d’utiliser PDO qui est plus récent. PHP Data Objects (PDO) est une extension
définissant l'interface pour accéder à une base de données avec PHP.
Elle est orientée objet, la classe s’appelant PDO. PDO constitue une couche d'abstraction qui
intervient entre l'application PHP et un système de gestion de base de données (SGDB) tel
que MySQL, PostgreSQL ou MariaDB par exemple. La couche d'abstraction permet de
séparer le traitement de la base de données proprement dite. PDO facilite donc la migration
vers un autre SGBD puisqu'il n'est plus nécessaire de changer le code déjà développé. Il faut
seulement changer les arguments de la méthode envoyés au constructeur.
Pour récupérer les enregistrements d’une table de la base de données, la procédure
classique en PHP consiste à parcourir cette table ligne par ligne en procédant à des allers-
retours entre l'application PHP et le SGBD. Ceci risque d’alourdir le traitement surtout si les
deux serveurs sont installés chacun sur une machine différente. PDO corrige ce problème en
permettant de récupérer en une seule fois tous les enregistrements de la table sous forme
d’une variable PHP de type tableau à deux dimensions, ce qui réduit le temps de traitement.

                                                                                            27
7. Configuration des outils

La présentation et l’explication du rôle de chacun de ces outils, je vais à présent rapidement
détailler la configuration de chacun. Les configurations complètes seront disponibles en
annexe, ce chapitre présentera uniquement quelques lignes de configuration pour chaque
outil.
Généralement, les fichiers de configuration des différents logiciels sur une machine Linux se
situent dans le répertoire « /etc », dans la suite de cette partie, les répertoires seront donnés
depuis le répertoire « /etc »

           7.1.    Apache2

La configuration du serveur Web se situe dans le répertoire « apache2/sites-enabled» mais la
bonne pratique consiste à écrire la configuration dans « apache2/sites-available » puis de
réaliser un lien symbolique via la commande « ln -s » du répertoire « apache2/sites-
available » sur le répertoire « apache2/sites-enabled »
La configuration que j’ai utilisée est en réalité la configuration par défaut du logiciel Apache2,
celle-ci est disponible en annexe de ce document.

           7.2.    NFTables/NetFilter

Comme dit précédemment, le framework NFTables permet d’interagir avec NetFilter, il peut
être configuré de deux manières différentes : soit on entre les règles de filtrage l’une après
l’autre directement dans la console, celles-ci seront effacées au redémarrage du système, soit
on écrit un fichier de configuration qui sera pris en compte à chaque démarrage. J’ai fait le
choix de la seconde option (mélanger les deux façons n’est pas impossible) car je trouve cela
beaucoup plus simple à vérifier et à modifier.
Après installation de NFTables via le gestionnaire APT : « apt install nftables », il faut donc
modifier le fichier nftables.conf depuis le compte root à l’aide de nano ou vi.
Dans une idée de possible évolution, le firewall mis en place filtre les requêtes Ipv4 mais
aussi les requêtes Ipv6. Les parties Ipv4 et Ipv6 sont assez semblables, je vais donc expliquer
uniquement la partie Ipv4. Voici donc les règles qui sont à mon sens les plus importantes :

                                                                                               28
Vous pouvez aussi lire