Dans le cadre de ce projet, nous travaillerons sur la création d’une infrastructure réseau pour une entreprise fictive : le laboratoire GSB. Le but : permettre aux visiteurs médicaux de saisir leurs comptes-rendus et leurs frais via une application interne hébergée sur des serveurs. Nous virtualiserons cet environnement à l’aide VMware :
Analyse du cahier des charges
Le cahier des charges imposait :
Accès à l’application via visite.gsb.coop
Architecture avec :
un serveur web en DMZ,
un serveur BDD, un DNS et un serveur de sauvegarde
Nous réalisons également une maquette à l’aide de Packet Tracer avant de réellement mettre en place notre infrastructure réseau :
Phase 2 : Mise en place des serveurs
– Serveur Web (Linux + Apache + PHP 8.3)
Installation d’Apache, PHP et phpMyAdmin
Accès sécurisé en HTTPS
Page d’accueil liée à l’application
Pare-feu + permissions réduites
– Serveur BDD (MariaDB)
Installation de MariaDB
Importation de 3 bases
Création d’utilisateurs avec droits limités
– Serveur FTP sécurisé (SFTP)
Mise en place du service
Utilisateurs dédiés
Tests d’envoi/récupération de fichiers
Restrictions d’accès
– Serveur de sauvegarde (Windows Server 2022)
Sauvegardes incrémentielles quotidiennes
Sauvegardes complètes hebdomadaires
Tests de restauration
Phase 3 – DHCP & DNS
Serveur DHCP
Installation du package dhcp-server sur Rocky Linux
Réservations d’adresses pour certains équipements
Service actif au démarrage + vérification des baux
Serveur DNS
Zone DNS pour gsb.coop
Enregistrements A : visite.gsb.coop, ftp.gsb.coop, ns.gsb.coop…
Configuration complète (SOA, NS, PTR…)
Tests de résolution depuis toutes les machines
Compétences mobilisées
Création d’un réseau segmenté (DMZ / PROD)
Routing, VLAN, adressage IP
Installation et sécurisation de serveurs Linux & Windows
Virtualisation VMware
Mise en place des services : Apache, MariaDB, DNS, DHCP, FTP et automatisation des sauvegardes
Conclusion
Ce projet m’a permis de concevoir une infrastructure réseau fonctionnelle en intégrant différents services tels que le web, les bases de données, DNS, DHCP, le FTP ou la sauvegarde. J’ai appris à faire coexister ces services de manière cohérente et à organiser mon travail efficacement. Cette expérience a renforcé mon intérêt pour les métiers de l’administration réseau et système.
J’ai récemment eu l’opportunité d’effectuer un stage enrichissant au sein de l’unité Réseau et Télécoms du Département des Ressources Numériques (DRN) de Nantes Métropole. Situé dans le bâtiment Polaris à l’Île de Nantes, ce stage m’a permis de plonger au cœur des infrastructures réseau d’une grande collectivité, avec une mission principale axée sur l’automatisation et une immersion concrète dans les opérations sur le terrain.
Ma Mission Principale : L’Automatisation des Sauvegardes avec NetBox
Ma tâche principale consistait à automatiser les sauvegardes de configurations des commutateurs (switchs) de Nantes Métropole en utilisant l’outil open-source NetBox. Ce projet s’est articulé autour du plugin ‘netbox-config-backup’ et de la bibliothèque Python ‘NAPALM’. Pour commencer, j’ai mis en place un environnement de test avec Lubuntu sur VirtualBox afin de comprendre l’architecture de NetBox. L’application repose sur des services PostgreSQL, Redis, Nginx/Apache et Gunicorn. Cette phase m’a permis de tester la compatibilité du plugin ‘netbox-config-backup’ avec différents équipements, notamment des switchs Cisco 2960, C1000 et Alcatel OS6360, validant ainsi sa fiabilité pour la récupération des configurations via SSH. J’ai également pû résoudre des problèmes de dépendances et de drivers, étape importante pour le déploiement du plugin.
Environnement de test : machine Lubuntu – Netbox – switch Cisco 2960 connexion en bridge
Avec mon tuteur, Adrien Grellier, nous avons mis à jour NetBox en production en utilisant Ansible, garantissant un déploiement sécurisé avec un fichier de configuration lisible. J’ai ensuite enrichi la base de données avec des informations sur plus de 900 switchs, puis automatisé les sauvegardes en utilisant un script Python pour convertir des fichiers CSV en JSON, facilitant ainsi la planification des sauvegardes. L’évaluation de la charge réseau en production a été essentielle pour déployer cette automatisation.
Découverte du Métier : Interventions sur Site
Au-delà de ma mission principale, j’ai eu l’opportunité de participer à diverses interventions sur le terrain, ce qui m’a offert une vision complète du quotidien d’un technicien réseau. J’ai par exemple assisté au diagnostic d’une rupture réseau sur le site Loire-Chezine, liée à une erreur de câblage de fibre, et découvert des outils spécifiques comme le Visual Fault Locator (VFL). J’ai également participé à l’installation, au remplacement et à la configuration d’équipements réseau tels que des switchs, des bornes Wi-Fi et des bornes DECT sur de nombreux sites.
J’ai eu la chance de visiter deux data centers partenaires, observant des opérations sensibles comme le remplacement d’un switch LEAF, ce qui a élargi ma compréhension des environnements à haute disponibilité. A la fin de mon stage, j’ai eut la responsabilité de stacker 3 switchs C-1000 48port pour la médiatèque Jacques Demy (HStack). Enfin, j’ai pu découvrir des outils essentiels aux opérateurs du DRN tels que Centreon pour le monitoring, Efficient IP pour la gestion des adresses IP, et Palo-Alto pour le pare-feu, ainsi que NetBox pour la documentation exhaustive des équipements.
Bilan
Ce stage a été une expérience déterminante, renforçant mon intérêt pour les métiers des systèmes informatiques, de l’infrastructure et du réseau. Sur le plan technique, j’ai développé des compétences en gestion de bases de données avec le déploiement et l’administration de services comme Redis et PostgreSQL. J’ai également acquis une expérience en développement avec l’utilisation de Python. Ma compréhension de la configuration réseau s’est approfondie avec l’installation physique et la configuration de switchs, ainsi que la réalisation de câblage réseau. Au-delà des compétences techniques, j’ai renforcé mes soft skills, notamment le travail d’équipe, la présentation orale, la prise d’initiative, le savoir-être en milieu professionnel et le développement de l’esprit critique face aux décisions techniques.
Conclusion
Ce stage à Nantes Métropole a été une immersion complète et formatrice. J’ai acquis des compétences techniques solides en automatisation réseau et en gestion d’infrastructures, tout en découvrant la réalité du terrain et l’importance d’une gestion rigoureuse pour assurer la disponibilité des réseaux. Je remercie chaleureusement toute l’équipe du DRN, et en particulier mon tuteur Adrien Grellier, ainsi que mes collègues Élise Cappon, Nicolas Lavergne et Michel Martineau, pour leur accompagnement et leurs précieux conseils. Cette expérience a consolidé mon ambition de poursuivre ma carrière dans ce domaine passionnant.
Dans le cadre du projet Docker-2025, nous sommes stagiaire au sein de l’entreprise STESIO. Notre mission est le développement d’une application de gestion des ressources humaines pour la société ‘X’ . Ce projet permet de mettre en place une infrastructure haute disponibilité, comprenant un serveur d’application et une base de données MariaDB.
Qu’est ce que Docker ?
Docker est une plateforme de virtualisation légère qui permet de créer, déployer et gérer des applications dans des conteneurs. Ces conteneurs encapsulent tout ce dont une application a besoin pour fonctionner, y compris le code, les bibliothèques et les dépendances, ce qui garantit une cohérence entre les environnements de développement, de test et de production. Nous allons également utiliser son interface graphique : Portainer
Pourquoi Docker ?
Docker offre de nombreux avantages pour le développement et le déploiement d’applications. Ses conteneurs sont portables, fonctionnant sur n’importe quel système compatible, ce qui simplifie le déploiement. Chaque conteneur est isolé, évitant les conflits entre applications et renforçant la sécurité. Docker permet aussi une scalabilité facile, avec la possibilité d’ajouter ou de retirer des conteneurs rapidement. De plus, les conteneurs sont légers et démarrent plus vite que les machines virtuelles, grâce à leur partage du même noyau. Enfin, des outils comme Docker Compose et Docker Swarm rendent la gestion des conteneurs simple et efficace.
Mission
Nous allons déployer un conteneur utilisant l’image MariaDB et un autre avec l’image phpMyAdmin pour gérer la base de données. Ensuite, nous mettrons en place deux conteneurs Apache servant de serveurs web, tout en configurant HAProxy pour assurer la haute disponibilité. Ces serveurs web hébergeront une page affichant dynamiquement les rangs de notre base de données.
Étape 1 : MariaDB & phpMyAdmin
Tout d’abord, nous allons déployer un conteneur MariaDB à l’aide la commande :
docker run --name mariadb -e MYSQL_ROOT_PASSWORD=password -d mariadb:latest
‘-e’ : Permet de définir une variable d’environnement, en l’occurence notre mot de passe en tant que root : MYSQL_ROOT_PASSWORD=password, ‘-d ‘ lance le container en arrière plan.
Nous vérifions le bon fonctionnement de l’image en utilisant la console :
Maintenant, déployons le container phpMyAdmin :
docker run --name phpmyadmin -d -e PMA_HOST=mariadb -p 8080:80 phpmyadmin/phpmyadmin
Ici, PMA_HOST=mariadb spécifie que phpMyAdmin se connecte au conteneur MariaDB. On pourra accéder à phpMyadmin via le port 8080
Étape 2 : HAproxy & serveurs Apache
Afin de déployer notre service HAproxy et nos serveurs Apache, nous utilisons le fichier docker compose suivant :
Il nous faudra également créer un fichier de configuration nommé haproxy.cfg :
global
log stdout format raw local0
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http_front
bind *:80
default_backend http_back
backend http_back
server srvapache1 srvapache1:80 check
server srvapache2 srvapache2:80 check
Nous déployons ainsi notre service haproxy ainsi que nos 2 serveurs Apache à l’aide de la commande : docker compose up -d
Etape 3 : Connexion PDO
Nous allons maintenant lier nos serveurs Apache à notre base de donnée grâce à une connexion PDO. Nous créons alors un fichier « connexion.php » :
<?php
// Paramètres de connexion à la base de données
$db = "dbcontact"; // Nom de la base de données
$dbhost = "172.22.0.3";
$dbport = 3306; // Port par défaut pour MySQL/MariaDB
$dbuser = "user";
$dbpasswd = "secret";
try {
// Création de la chaîne de connexion DSN (Data Source Name)
$dsn = "mysql:host=$dbhost;port=$dbport;dbname=$db;charset=utf8mb4";
// Création d'une instance PDO pour se connecter à la base de données
$connexion = new PDO($dsn, $dbuser, $dbpasswd);
// Configuration de PDO pour lancer des exceptions en cas d'erreur
$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Erreur de connexion : " . $e->getMessage());
}
?>
Ensuite nous allons éditer notre fichier index.php :
<html>
<body>
<h1>Hello!</h1>
<?php
// Inclure le fichier de connexion
include 'connexion.php';
// Exécuter la requête pour récupérer les données
$query = "SELECT * FROM personne";
$stmt = $connexion->prepare($query);
$stmt->execute();
// Récupérer les résultats
$resultats = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Afficher les résultats
if ($resultats) {
echo "<h2>Liste des personnes :</h2>";
echo "<ul>";
foreach ($resultats as $personne) {
echo "<li>" . htmlspecialchars($personne['nom']) . " - " . htmlspecialchars($personne['age']) . " ans</li>";
}
echo "</ul>";
} else {
echo "Aucune personne trouvée.";
}
// Afficher le nom d'hôte
$hostname = gethostname();
echo " hostname : " . htmlspecialchars($hostname);
?>
</body>
</html>
Afin de vérifier le bon fonctionnement de notre service haute disponibilité, nous modifions la page index de nos 2 serveurs apache afin qu’elles retournent le nom d’hôte de leur « machine », pour cela nous utiliserons la fonction .php gethostname()
Pour un aspect plus professionnel, je me suis permis de rajouter du CSS à notre page :
Résultat :
Notre connexion PDO est fonctionnelle, notre page web accède à la base de donnée et affiche les informations de manière dynamique ! Lorsque nous actualisons notre page, les 2 serveurs Apache se relayent de sorte à gérer les nombreuses requêtes. On constate que les nom d’hôtes changent à chaque requête signifiant qu’il s’agit d’un serveur différent.
L’une de mes premières solutions applicatives spécifiquement conçue pour le monde professionnel
Le but de ce projet ? Automatiser différentes tâches menant à la création d’un journal de connexion. Il s’agit un cas d’utilisation qui s’aligne avec la réalité des besoins qu’implique l’utilisation de l’informatique et des nouvelles technologies en entreprise.
Python, en tant que langage informatique portable est, et sera de plus en plus utilisé pour assurer des tâches d’administration système de part sa multi-compatibilité.
Les différentes étapes du projet :
Étape 1 : Génération de pseudonymes à partir d’un fichier .txt
Dans un premier temps nous avons rédigé un script Python nommé pseudo.py qui lit le fichier testEntree.txt, extrait les prénoms, noms et années de naissance, puis génère un pseudonyme pour chaque ligne en calculant l’âge. Le pseudonyme doit être composé de la première lettre du prénom, des trois premières lettres du nom, de l’âge calculé (année actuelle moins l’année de naissance), et d’un nombre aléatoire entre 10 et 99. Enfin, le script écrit chaque pseudonyme généré dans le fichier testSortie.txt, un par ligne, en minuscules.
Ce script exécute toutes les contraintes de et exporte le pseudo dans un fichier .txt nommé testSortie.txt
Contenu du fichier testSortie.txt :
Étape 2 : Création d’une base de donnée et de différents utilisateurs/Gestion des privilèges
Lancement de notre machine rocky9 et démarrage de notre serveur Apache ainsi que de notre serveur mySQL. Nous créons une base de donnée « logs_web » et deux utilisateur « gestionlog » et « utilog »
utilog : Compte avec un accès en lecture seule (SELECT) pour consulter les statistiques en toute sécurité sur la base de données logs_web.
gestionlog : Compte avec un accès complet (INSERT, UPDATE, DELETE, SELECT) pour l’administration des données sur la dB
Accès distant
Maintenant nous allons permettre un accès distant à partir de l’adresse ipv4 d’une machine personnelle de sorte à simuler un cas d’utilisation professionnel : pour cela nous devrons éditer les fichier de configuration de mariadb et du serveur Apache :
Ensuite il faut nous assurer que la configuration réseau sur la machine rocky est correcte, pour se faire nous configurons manuellement l’adresse réseau, le masque et la passerelle.
Maintenant vérifions avec un ping :
Les 2 machines communiquent entre elles et il est possible d’accéder à phpMyAdmin via notre machine distante.
Étape 3 : Analyse des URL les plus consultées par utilisateur
Nous allons maintenant réaliser un programme Python, nommé url_par_utilisateur.py, qui affiche les fichiers logs disponibles dans un dossier sous forme de menu. L’utilisateur sélectionnera un fichier à analyser en saisissant le numéro correspondant.
Le programme analysera ensuite le fichier sélectionné pour identifier, pour chaque utilisateur, l’URL la plus visitée et son nombre de visites. Structuré de manière modulaire, le programme doit utiliser des fonctions adaptées pour chaque étape du traitement. Le résultat final doit présenter, pour chaque utilisateur, l’URL la plus visitée avec son nombre de visites, être stocké dans une variable appropriée, et affiché à l’écran.
Étape 4 : Python – Génération de scripts SQL pour l’insertion de données
Nous avons créé un programme Python permettant de sélectionner un fichier log parmi ceux disponibles dans un dossier. Le programme affiche la liste des fichiers logs sous forme de menu interactif, où chaque fichier est associé à un numéro. L’utilisateur doit pouvoir choisir un fichier en saisissant un numéro correspondant.
Le programme generate_sql_insert.py doit analyser un fichier log choisi et créer un fichier SQL avec un nom basé sur la date du log. Le fichier SQL sera nommé insert_log_yyyy-mm-dd.sql Ce fichier contiendra les commandes SQL pour insérer les données du log dans la table acces_logs. Cette opération doit être répétée manuellement pour chaque fichier log.
Contenu du fichier insert_log.sql (exemple) :
Étape5 : Exécution et test des scripts SQL d’insertion
Nous allons maintenant procéder à l’exécution de chaque fichier .sql sur phpMyAdmin Pour se faire nous allons importer directement les fichiers ‘insert_log_yyyy-mm-dd.sql’ dans notre base de donnée :
En l’occurrence nous importons le fichier: insert_log_2024-11-23.sql :
Contenu de la table acces_log après l’ajout du fichier « insert_log_2024-11-23.sql »
Maintenant, nous allons effectuer un requête test afin de nous assurer que tout fonctionne correctement, nous allons sélectionner toutes les lignes ou l’ip utilisateur est : 192.168.2.100
La requête retourne le résultat attendu.
Conclusion
À travers ce projet, nous avons mis en œuvre aussi bien des compétences en programmation que des compétences liées au réseau et au système. C’est un contexte proche des besoins de certaines entreprises en ce qui concerne l’automatisation de tâches qui peuvent souvent s’avérer fastidieuses, voire impossibles à réaliser manuellement.
Comment protéger une entreprise contre des attaques de type ransomware ?
Comme nous l’indique sa construction étymologique, « ransom » signifie rançon, le suffixe « ware » dans ce contexte est dérivé du mot « malware ». Un malware étant un logiciel créé à des fins malveillantes, il fait partie de la famille des « virus»
Le ransomware est donc un malware ayant comme but de faire payer à sa victime une rançon, par le chantage, après avoir chiffré les données personnelles de l’utilisateur. Celui-ci aura alors besoin d’une clé pour regagner l’accès à ses données, en échange d’une somme plus ou moins conséquente, souvent réclamée en cryptomonnaie.
Au sein d’une entreprise traitant des données sensibles, ce type d’attaque pourrait faire de graves dégâts, empêchant possiblement aux opérateurs d’accéder à leurs outils, ou encore entachant la réputation de l’entreprise quant à la sécurisation des données. Afin de lutter contre ce phénomène, nous allons mettre en place une veille technologique dans laquelle nous déterminerons 3 principaux objectifs :
Définir un plan d’action efficace pour lutter/se protéger contre ce type d’attaque.
S’informer sur les pratiques actuelles mises en place par les attaquants externes.
Réduire les risques qu’un utilisateur puisse devenir la victime d’un ransomware.
Pour se faire, nous avons utilisé des outils de curation comme ‘scoop.it’ et ‘netvibes.com’. De nombreuses sources ont été parcourues et beaucoup d’informations pertinentes en sont parvenues.