Bloc 3Infrastructure Theorie

2. Réseaux et Infrastructure

2.1 Objectifs de ce chapitre

  • ConnaĂźtre les diffĂ©rents composants matĂ©riels d’un rĂ©seau et leur rĂŽle
  • Comprendre quels Ă©lĂ©ments sont utilisĂ©s lors de l’envoi d’une requĂȘte rĂ©seau HTTP/HTTPS
  • Savoir manipuler les diffĂ©rentes commandes de base liĂ©es au rĂ©seau
  • DĂ©couper un rĂ©seau d’entreprise en sous-rĂ©seaux

2.2 Introduction

Schema Introduction

OSI Model

2.3 Couche 1 : Matériel

implĂ©mentation majoritaire : l’utilisation d’un rĂ©seau avec une topologie en Ă©toile et des cĂąbles Ethernet.

2.4 Couche 2 : Liaison de données

L’identifiant d’une machine est la MAC address. Le composant principal de cette couche (switch) conserve une table des MAC address permettant d’associer chaque port du switch à une MAC address.

2.4.1 VLAN

Les VLAN (Virtual Local Area Network) permettent de sĂ©parer certains ports d’un switch par rapport Ă  d’autres. Les ports se verront attribuĂ© un numĂ©ro de VLAN et les ports ayant un mĂȘme numĂ©ro de VLAN pourront uniquement communiquer entre eux.

L’intĂ©rĂȘt des VLAN est multiple :

  1. Sécurité : séparation des sous-réseaux
  2. Économique : on peut utiliser au maximum les ports disponibles sur les switchs (on achùtera moins de switch et des plus gros)
  3. Bande passante : optimisation de la bande passante en réduisant la taille des domaines de diffusion (broadcast)
  4. FacilitĂ© de gestion : on peut facilement changer le numĂ©ro de VLAN d’un port et donc faire basculer une machine cliente d’un sous-rĂ©seau Ă  un autre

2.4.2 STP

le protocole STP (Spanning Tree Protocol), il va autoriser à créer des boucles en désactivant logiquement certains liens et en les réactivant en cas de panne.

2.5 Couche 3 : Réseau

La couche rĂ©seau est implĂ©mentĂ©e dans une infrastructure par des routeurs. Ceux-ci feront transiter des paquets IP d’un rĂ©seau Ă  un autre. L’identifiant d’une machine pour cette couche est une adresse IP. Une adresse IP est composĂ©e d’une adresse rĂ©seau et d’un masque. Le masque d’une adresse IP est notĂ© soit sous le format A.B.C.D (Ex: 255.255.0.0) ou sous le format CIDR (Ex : /16).

2.5.1 Adresses spéciales

PlageUsage
127.0.0.0/8Boucle locale
10.0.0.0/8Adresses privées
172.16.0.0/12Adresses privées
192.168.0.0/16Adresses privées
224.0.0.0/4Multicast

Les adresses privĂ©es sont rĂ©servĂ©es pour ĂȘtre utilisĂ©es dans les rĂ©seaux d’entreprises (LAN) et ne sont pas routables sur Internet (Voir NAT).

2.5.3 Commandes réseau

LinuxWindowsExplication
ifconfig OU ip addripconfigConfiguration / Consultation des informations IP d’une machine
routerouteConfiguration / Consultation des informations de routage d’une machine
pingpingTester la connectivitĂ© IP d’une machine
traceroutetracertVoir le chemin parcouru par un paquet IP

2.5.4 ARP

Il permet à une machine de demander l’adresse MAC d’une autre machine sur base de son adresse IP.

ARP

D’un point de vue sĂ©curitĂ©, le protocole ARP est sensible aux attaques de type ARP cache poisoning/spoofing. Il s’agit pour l’attaquant de rĂ©pondre Ă  toutes les requĂȘtes ARP en vue de dĂ©tourner le trafic du sous-rĂ©seau vers sa propre machine et d’effectuer des Ă©coutes.

2.5.5 Découpage en sous-réseaux

Vous devez ĂȘtre capable de dĂ©couper un rĂ©seau en sous-rĂ©seaux. Ceci peut ĂȘtre demandĂ© dans la partie pratique de l’examen.

2.5.6 Table de routage

Le composant principal de cette couche 3, le routeur, maintient une table de routage. Une table de routage est un tableau qui prĂ©cise pour une destination d’un sous-rĂ©seau (adresse rĂ©seau + masque) une passerelle (adresse IP d’une machine/routeur).

2.5.7 Passerelle par défaut

chaque machine possĂ©dera une passerelle par dĂ©faut (0.0.0.0/.0.0.0.0). Celle-ci sera utilisĂ©e lorsqu’aucune rĂšgle plus prĂ©cise ne pourra ĂȘtre utilisĂ©e dans la table de routage. GrĂące Ă  cette passerelle par dĂ©faut, il est Ă©galement plus simple d’automatiser la connexion de machines clientes Ă  son rĂ©seau. En effet, il suffira de fournir Ă  chaque machine cliente une adresse IP, un masque et une passerelle par dĂ©faut et celle-ci pourra utiliser notre rĂ©seau. Cette automatisation pourra se faire via un serveur DHCP.

2.5.8 Routage IP

Une machine a toujours accÚs au(x) réseau(x) auquel(s) elle est connectée directement.

2.6 Couche 4 : Transport

Une application sera donc identifiée via son port.

ApplicationPort réservé
Web (HTTP)80
SSH22
HTTPS443
DNS53

Une politique de sécurité de base pour les administrateurs systÚme est donc de bloquer sur le serveur tous les ports hormis ceux des applications utilisées.

3 Services réseaux (DHCP-DNS-NAT)

3.1 Objectifs de ce chapitre

  • Savoir expliquer le rĂŽle des 3 services rĂ©seaux de base

3.2 Introduction

Pour qu’un rĂ©seau d’entreprise fonctionne correctement, il est nĂ©cessaire d’avoir au minimum 3 services Ă  savoir :

  1. DNS (Domain Name System)
  2. DHCP (Dynamic Host Configuration Protocol)
  3. NAT (Network Address Translation)

3.3 DNS

Pour rappel, le systĂšme DNS permet de traduire un nom de domaine en une adresse IP et inversement.

dans un rĂ©seau d’entreprise, les machines clientes porteront des noms et ces noms devront ĂȘtre traduits en une adresse IP.

En tout cas, l’administrateur systĂšme de l’entreprise devra gĂ©rer les enregistrements DNS de l’entreprise notamment les enregistrements DNS pointant vers les serveurs de l’entreprise et qui devront ĂȘtre accessibles depuis l’extĂ©rieur.

Un administrateur systĂšme installera gĂ©nĂ©ralement 2 serveurs DNS. Cette redondance permettra de gĂ©rer plus facilement la dĂ©faillance d’un serveur.

3.3.1 Configuration DNS

Une zone DNS contient diffĂ©rents types d’enregistrements :

  • SOA : Start of Authority (informations gĂ©nĂ©rales sur la zone DNS)
  • A : Enregistrement d’un hĂŽte (correspondance Nom → IP)
  • CNAME : Alias
  • PTR : Enregistrement d’une IP (correspondance IP → Nom)
  • MX : Mail server (adresse IP du serveur mail de la zone)
  • NS : Name Server (serveur DNS pour la zone)

3.3.2 RĂ©solution d’un nom

Il est trĂšs important de ne pas oublier que toute rĂ©solution de noms sur une machine commence par l’inspection du fichier hosts. Ce fichier est prĂ©sent sous Linux Ă  cet endroit /etc/hosts et sous Windows Ă  cet endroit c:\Windows\System32\Drivers\etc\hosts.

Hosts File Les administrateurs systĂšme utilisent abondamment ce fichier pour tester des services car cela Ă©vite l’installation d’un serveur DNS. En production, un serveur DNS sera bien Ă©videmment employĂ©.

3.4 DHCP

Pour qu’une machine cliente puisse se connecter Ă  un rĂ©seau et surfer sur Internet, cette machine a besoin au minimum des informations suivantes :

  • se voir attribuer une adresse IP et un masque au sein de ce rĂ©seau
  • obtenir une passerelle par dĂ©faut (pour aller sur Internet notamment)
  • obtenir des serveurs DNS (pour traduire les noms en adresse IP)

Un serveur DHCP permettra de répondre à ces besoins de maniÚre automatique.

DHCP Diagram

Les informations reçues en provenance du serveur DHCP ne seront valables qu’un certain temps. On parle de bail. Le client pourra Ă©videmment renouveler son bail.

Un administrateur systĂšme installera plusieurs serveurs DHCP pour se prĂ©munir de la panne d’un serveur. Deux serveurs DHCP ne pouvant pas distribuer les mĂȘmes adresses IP, l’administrateur systĂšme devra rĂ©partir ces adresses de maniĂšre intelligente entre les 2 serveurs.

3.5 NAT

Le NAT est utilisĂ© abondamment par les rĂ©seaux d’entreprise pour traduire les adresses IP privĂ©es de clients en adresses publiques routables sur Internet. Pour rappel, les adresses IPv4 sont limitĂ©es Ă  4 milliards ce qui ne permet pas de couvrir la totalitĂ© du globe terrestre. Donc certaines plages d’adresses ont Ă©tĂ© rĂ©servĂ©es (adresses privĂ©es) pour pouvoir ĂȘtre attribuĂ©es dans les rĂ©seaux locaux des entreprises. Ceci est trĂšs bien, mais pour aller sur Internet, j’ai besoin d’une adresse publique, autrement dit d’une adresse routable sur Internet. C’est ici qu’intervient le NAT. Vous allez comprendre comment la terre entiĂšre peut surfer sur Internet avec seulement 4 milliards d’adresses disponibles.

3.5.1 Source NAT (SNAT)

Chaque machine cliente sera connectĂ©e au rĂ©seau de l’entreprise via une adresse privĂ©e et recevra une passerelle par dĂ©faut qui sera gĂ©nĂ©ralement le routeur qui vous permettra d’aller sur Internet. Ce routeur disposera d’une adresse IP publique reçue par votre fournisseur d’accĂšs Ă  Internet et il disposera Ă©galement d’une adresse privĂ©e dans le rĂ©seau de l’entreprise. Nous activerons le NAT sur le routeur ce qui aura pour effet de traduire l’adresse IP source de tout paquet IP sortant sur Internet par l’adresse IP publique du routeur.

Le routeur va en fait identifier les machines clientes via un port choisi aléatoirement.

3.5.2 Port forwarding

Le NAT introduit une isolation du rĂ©seau de l’entreprise. En effet, il est impossible d’atteindre une machine du rĂ©seau de l’entreprise depuis l’extĂ©rieur. La seule machine que l’on sait atteindre est le routeur. Ceci est intĂ©ressant en termes de sĂ©curitĂ©, mais nous devons quelquefois avoir accĂšs Ă  un serveur prĂ©sent dans le rĂ©seau de l’entreprise. Pour ce faire, nous pouvons configurer le NAT pour qu’il fasse du port forwarding.

Le principe est le suivant : pour accĂ©der Ă  un serveur de l’entreprise, on attribue un port sur le routeur dĂ©diĂ© Ă  ce serveur. DĂšs que le routeur reçoit une connexion de l’extĂ©rieur sur ce port, il transfĂšre les paquets vers l’adresse privĂ©e du serveur.

Le port forwarding est utilisĂ© abondamment dans les rĂ©seaux surtout depuis la virtualisation. Par exemple, VirtualBox dĂ©finit par dĂ©faut un rĂ©seau NAT entre la machine hĂŽte et la machine virtuelle invitĂ©e. Si vous installez un serveur dans la machine virtuelle invitĂ©e et que vous voulez y accĂ©der depuis l’extĂ©rieur (votre machine hĂŽte ici), vous devrez faire du port forwarding. Ceci n’est pas compliquĂ©, il suffit de faire une association entre un port de la machine hĂŽte et un port la machine virtuelle.

4 Installation Serveurs Linux et Windows

4.1 Objectifs de ce chapitre

  • Comprendre les diffĂ©rents Ă©lĂ©ments qui mĂ©rite attention lors de l’installation d’un serveur

4.4 Licences

4.4.1 Logiciel Libre – GPL

GPL (GNU Public Licence).

Cette licence se caractérise par 4 libertés à respecter :

  1. La libertĂ© d’exĂ©cuter le logiciel, pour n’importe quel usage
  2. La libertĂ© d’étudier le fonctionnement d’un programme et de l’adapter Ă  ses besoins, ce qui passe par l’accĂšs aux codes sources
  3. La liberté de redistribuer des copies
  4. L’obligation de faire bĂ©nĂ©ficier la communautĂ© des versions modifiĂ©es (copyleft)

La derniĂšre libertĂ© (le copyleft) est la plus contraignante, car elle nĂ©cessite qu’un logiciel utilisant une licence GPL doive ĂȘtre distribuĂ© sous licence GPL.

4.4.2 LGPL

La licence LGPL (Lesser GNU Public Licence) reprend les fondements de la licence GPL en supprimant la restriction sur l’hĂ©rĂ©ditĂ© de la licence GPL. Cette licence permet Ă©galement la cohabitation de plusieurs licences (libres et propriĂ©taires) au sein d’un logiciel. Il s’agit pour ces raisons de la licence prĂ©fĂ©rĂ©e des dĂ©veloppeurs de librairies.

4.4.5 Remarques

Gratuit ne veut pas dire libre ! La gratuitĂ© implique simplement que l’on ne paye pas pour un produit.
Open source ne veut pas dire libre ! L’Open source implique simplement que nous avons la possibilitĂ© d’avoir accĂšs au code source.
La notion de logiciel libre fait référence aux 4 libertés citées ci-dessus.

4.5 RAID

Le RAID (Redundant Arrays of Inexpensive Disks) est un mĂ©canisme de redondance de disques. Celui-ci a plusieurs objectifs combinables Ă  savoir se prĂ©munir contre la panne d’un disque et amĂ©liorer les performances en Ă©criture sur les disques.

NiveauExplicationAvantagesInconvénients
RAID 0Les donnĂ©es sont Ă©crites en parallĂšle sur plusieurs disquesGain en performancePerte d’un disque == perte des donnĂ©es
RAID 1Les données sont écrites sur des disque en miroirTolérance aux pannes disquesCoût -> disque en double
RAID 5Les données sont écrites en parallÚle sur au minimum 3 disques (2 disques de données + 1 disque de parité)Tolérance aux pannes disques + performanceMinimum de 3 disques requis

Le RAID 5 s’appuie sur l’opĂ©rateur logique XOR. La paritĂ© de chaque Ă©criture est calculĂ©e via cet opĂ©rateur. En cas de perte d’un disque, l’information peut ĂȘtre reconstituĂ©e Ă  partir des 2 autres disques toujours via cet opĂ©rateur XOR.

RAID Schema

4.6.1 Partitionnement

Le partitionnement dĂ©signe l’opĂ©ration de diviser un disque en partitions. Un partitionnement bien rĂ©flĂ©chi facilitera la maintenance des serveurs. Une partition systĂšme et une partition “donnĂ©es utilisateur” faciliteront par exemple la mise en place de sauvegardes.

4.6.1.1 LVM

LVM (Logical Volume Manager) est une solution permettant une gestion dynamique du partitionnement disponible sous Linux.

4.6.1.2 SystÚmes de fichiers

Voici les principaux :

  1. Ext2,Ext3,Ext4 : systÚme de fichiers Linux incluant le concept de permissions (Ext4 est actuellement la version la plus utilisée sous Linux)
  2. NTFS : systÚme de fichiers Windows incluant le concept de permissions (NTFS est actuellement la version la plus utilisée sous Windows)
  3. FAT32 : ancien systÚme de fichiers limité à des fichiers de maximum 4GB , pas de systÚmes de permissions, multiplateforme
  4. exFAT : remplaçant de FAT32, pas de limitation à 4GB, pas de permissions, multiplateforme
  5. Swap : partition d’échange (extension de la mĂ©moire RAM sous Linux)
  6. Btrfs : nouveau systĂšme de fichier permettant la prise d’instantanĂ©s (snapshot d’une partition) et le redimensionnement de partitions Ă  chaud. Ce systĂšme utilise en interne les arbres B-tree.
  7. tmpfs : systÚme de fichiers temporaire en mémoire vive (RAM), utilisé pour stocker des fichiers temporaires (/tmp) qui ne nécessitent pas de persistance aprÚs un redémarrage.

4.6.1.3 Montage des partitions

Chaque ligne du fstab indique donc une partition, son point de montage, le systĂšme de fichiers utilisĂ©, les options, si une sauvegarde doit ĂȘtre faite avec l’utilitaire dump (peu utilisĂ©), l’ordre de vĂ©rification des disques lors d’une demande de vĂ©rification (fsck).

4.6.1.4 Chiffrement des partitions

Une partition non chiffrĂ©e peut ĂȘtre lue facilement sans autorisations particuliĂšres via un live-cd si on a un accĂšs physique Ă  une machine.

Linux propose LUKS (Linux Unified Key Setup) qui permet un chiffrement des partitions (à l’installation ou plus tard). Windows propose, quant à lui, BitLocker pour crypter ses partitions.

4.6.2 Amorçage

Lors du dĂ©marrage d’une machine, un chargeur d’amorçage (bootloader) est lancĂ©. Celui-ci s’occupera de lancer le systĂšme d’exploitation ou de prĂ©senter les diffĂ©rents systĂšmes d’exploitation dans le cas d’un multi-boot. Windows propose winload comme chargeur d’amorçage tandis que Linux propose essentiellement GRUB (GRand Unified Bootloader).

4.7 Installation Windows (Windows Server 2016)

L’installation d’un serveur Windows est assez simple. C’est l’ajout de service, appelĂ© rĂŽle sous Windows, qui reste plus complexe. Les rĂŽles permettent d’installer un Active Directory, un serveur DNS, DHCP, 
 .

Un aspect important sous Windows est la gestion des licences. Les licences serveur doivent ĂȘtre comptabilisĂ©es suivant le nombre de cƓurs physiques du processeur. Il faut Ă©galement comptabiliser les licences d’accĂšs client (CAL).

5 Administration Linux (Debian)

5.1 Objectifs de ce chapitre

  • Savoir administrer un serveur Linux (Debian)

5.3 APT

Toutes les distributions Linux disposent d’un systùme de gestion des packages

L’outil APT dispose d’un fichier de configuration (/etc/apt/sources.list) permettant de renseigner les dĂ©pĂŽts Ă  utiliser.

5.3.1 Commandes APT

Mise à jour du dépÎt local :

apt-get update

Installer un logiciel :

apt-get install <paquet1> <paquet2> ... 

5.4 SSH

Les systĂšmes Linux actuels sont le plus souvent gĂ©rĂ©s en ligne de commande (pas d’interface graphique) et Ă  distance.

5.4.1 Fonctionnement

Nous ne donnerons ici qu’un rĂ©sumĂ© du fonctionnement du protocole SSH (Secure Socket Shell). Le protocole SSH effectue un Ă©change de clĂ©s de chiffrement avant d’utiliser ces derniĂšres pour crypter toutes les communications entre le client et le serveur. Le port 22 est le port par dĂ©faut utilisĂ© par SSH.

SSH est un service qui est initialisé/démarré par systemd.

5.4.3 Configuration

Par défaut, SSH est installé pour permettre une authentification par login et mot de passe pour tous les utilisateurs présents sur le serveur (hormis root) ainsi que par clé (root compris).

Nous nous contenterons de ce comportement par défaut pour ce cours.

5.4.4 Utilisation

Le client SSH a besoin des informations suivantes : un nom de machine ou une adresse IP, un login et un mot de passe. On peut remplacer l’authentification par login/mdp par une clĂ©.

5.4.5 Copie de fichiers

Il est à noter que dÚs que vous avez un accÚs SSH, vous pouvez copier des fichiers entre votre machine hÎte et invitée via SCP/SFTP. Ceci peut se faire en ligne de commande (Linux), avec le logiciel WinSCP (Windows) ou Cyberduck (Mac).

5.4.6 Authentification par clé sur un serveur Linux

Attention si vous utiliser Puttygen → copier le contenu de la clĂ© publique gĂ©nĂ©rĂ© dans un fichier texte. N’utiliser pas le bouton «  Save public key » car il enregistre la clĂ© sous un format non reconnu sous Linux.

Le fichier de la clĂ© publique est tranfĂ©rĂ©. Il faudra copier son contenu dans le fichier authorized_keys de l’utilisateur souhaitĂ©.

Attention aussi Ă  mettre des droits corrects. Le fichier authorized_keys doit ĂȘtre propriĂ©tĂ© de l’utilisateur et accessible en lecture uniquement.

5.4.7 Tunnel SSH

La crĂ©ation d’un tunnel SSH permet de connecter 2 machines en encapsulant le trafic de la premiĂšre et en le redirigeant vers la seconde. Cette technique est souvent appelĂ©e le VPN du pauvre car elle permet notamment de donner accĂšs Ă  une machine du rĂ©seau local de l’entreprise Ă  des ordinateurs distants et Ă  moindres frais (de configuration).

5.5 Gestion des utilisateurs

5.5.1 adduser-deluser-addgroup-delgroup

Il est Ă  noter que adduser crĂ©e un profil pour l’utilisateur basĂ© sur un rĂ©pertoire squelette situĂ© dans /etc/skel. Tout fichier placĂ© par l’administrateur dans ce rĂ©pertoire squelette sera copiĂ© par dĂ©faut dans le rĂ©pertoire de l’utilisateur lors de l’appel Ă  adduser.

Par dĂ©faut, la home directory créée par adduser est accessible uniquement au propriĂ©taire en lecture, Ă©criture et exĂ©cution (voir /etc/adduser.conf). Ceci peut ĂȘtre changĂ© dans /etc/adduser.conf au besoin.

5.5.3 SUDO

5.5.3.1 Fonctionnement

Pour qu’un utilisateur puisse exĂ©cuter une commande avec « sudo », il doit faire partie du groupe sudo.

5.5.3.4 Avantages de SUDO

Les avantages du SUDO sont les suivants:

  1. Permettre Ă  des utilisateurs d’exĂ©cuter une commande en tant que superutilisateur sans devoir connaĂźtre le mot de passe de root.
  2. Travailler en mode non privilĂ©giĂ© et n’utiliser le mode privilĂ©giĂ© que quand cela est nĂ©cessaire. Ceci rĂ©duit le risque de commettre des dommages pour le systĂšme.
  3. ContrÎler et enregistrer qui fait quoi (SUDO enregistre toutes le commandes sudo effectuées dans le journal de systemd).
  4. Renforcer la sécurité. En désactivant le compte root et en le remplaçant par un compte « sudo », un attaquant ne connaßtra pas le mot de passe, ni le nom du compte !

5.6 Passwd

Passwd permet de changer le mot de passe de son compte et de tous les comptes (pour le root).

5.7 SystemD

Les niveaux d’exĂ©cution :

  • 0 : arrĂȘt (la commande init 0 arrĂȘte le systĂšme)
  • 1 : mono-utilisateur (utiliser par exemple pour la maintenance)
  • 3 : multi-utilisateur sans environnement graphique
  • 2-4 : idem que 3, mais peut ĂȘtre dĂ©fini par l’utilisateur (peu utilisĂ© en pratique)
  • 5 : multi-utilisateur avec environnement graphique
  • 6 : redĂ©marrage (la commande init 6 redĂ©marre le systĂšme)

L’objectif principal de SystemD (tout comme SystemV) est de dĂ©marrer des services, appelĂ©s daemons dans le monde Linux. Il est donc normal que celui-ci propose diffĂ©rentes maniĂšres d’implĂ©menter son service.

5.8 Débogage

Voici quelques méthodes et outils courants pour diagnostiquer et résoudre les problÚmes sur un serveur Linux :

  • Consulter les logs systĂšme :
    Les fichiers de logs se trouvent généralement dans /var/log/. Les plus importants sont :
    • /var/log/syslog ou /var/log/messages : logs systĂšme gĂ©nĂ©raux
    • /var/log/auth.log : authentification et sudo
    • /var/log/apache2/error.log : erreurs Apache
    • /var/log/mysql/error.log : erreurs MySQL/MariaDB
  • Utiliser les commandes de diagnostic :
    • journalctl : consulter les logs gĂ©rĂ©s par systemd
    • systemctl status <service> : Ă©tat d’un service
    • ps aux / top / htop : surveiller les processus
    • df -h / du -sh : vĂ©rifier l’espace disque
    • free -h : vĂ©rifier la mĂ©moire
    • netstat -tulnp / ss -tulnp : ports ouverts et services Ă©coutant
    • ping, traceroute, nslookup : diagnostic rĂ©seau
  • RedĂ©marrer un service :
    • systemctl restart <service>
  • VĂ©rifier la syntaxe d’un fichier de configuration :
    • Par exemple, pour Apache : apache2ctl configtest
    • Pour Nginx : nginx -t
  • Analyser les permissions :
    • ls -l pour vĂ©rifier les droits sur les fichiers et dossiers
  • Utiliser des outils de surveillance :
    • uptime : charge systĂšme
    • dmesg : messages du noyau

Bonnes pratiques : - Toujours lire les messages d’erreur affichĂ©s par les commandes. - Appliquer les changements un par un et tester Ă  chaque Ă©tape. - Documenter les problĂšmes rencontrĂ©s et leurs solutions pour rĂ©fĂ©rence future.

En rĂ©sumĂ© : savoir oĂč chercher les logs, utiliser les commandes de base, et adopter une dĂ©marche mĂ©thodique sont les clĂ©s d’un dĂ©bogage efficace en administration systĂšme.

6 Serveurs Web (Apache)

6.1 Objectifs du chapitre

  • DĂ©ployer un site Web via Apache

6.3 Etapes de dĂ©ploiement d’un site Web

  1. Installer le paquet du serveur Web (Apache)
  2. Transférer/Installer le code du site Web sur le serveur (/var/www)
  3. Créer un VirtualHost
  4. Activer le site
  5. Faire correspondre la Directive ServerName et /etc/hosts
  6. Tester le site Web en local

6.5 CaractĂ©ristiques d’Apache

Apache étant hautement configurable, il se caractérise par une configuration morcelée.

Ce fichier inclut tout simplement d’autres fichiers et rĂ©pertoires Ă  savoir:

  • /etc/apache2/sites-available : dĂ©finitions de sites Web (VirtualHost)
  • /etc/apache2/sites-enabled : dĂ©finitions de sites Web (VirtualHost) activĂ©s
  • /etc/apache2/mods-available : liste des modules (SSL, proxy, ..) installĂ©s
  • /etc/apache2/mods-enabled : liste des modules (SSL, proxy, ..) activĂ©s
  • /etc/apache2/conf-available : liste des configurations (charset, ..) disponibles
  • /etc/apache2/conf-enabled : liste des configurations (charset, 
) activĂ©es
  • /etc/init.d/apache2 : un service qui sera dĂ©marrĂ©/arrĂȘtĂ© par SystemD
  • /etc/apache2/ports.conf : la configuration des ports pour apache (80 et 443 par dĂ©faut)

6.6 VirtualHost

Les virtualhosts permettent de dĂ©ployer plusieurs sites Web sur un mĂȘme serveur (mĂȘme adresse IP). La distinction se fait en gĂ©nĂ©ral sur le nom du site, apache doit en effet savoir suivant l’URL quel site il doit prĂ©senter.

Ensuite, il faut activer le site comme suit :

#activer un site
#commande Ă  entrer dans /etc/apache2/sites-available
a2ensite monsite.conf

6.7 Reverse proxy

Un proxy inverse est un serveur frontal c’est-Ă -dire un serveur exposĂ© sur Internet et par lequel toutes les requĂȘtes passeront. Ce serveur ne traitera pas les requĂȘtes, mais se contentera de les rediriger vers d’autres serveurs internes Ă  l’entreprise.

Les intĂ©rĂȘts de ce mĂ©canisme sont multiples. Vu qu’il n’y a qu’un seul point d’accĂšs, la sĂ©curitĂ© est plus facile Ă  gĂ©rer. Cela permet Ă©galement de mettre en Ɠuvre du «load balancing» entre des serveurs internes. C’est Ă©galement un moyen simple de rendre disponible un serveur interne sur le Web (pas besoin de configuration rĂ©seau).

6.9 Apache et HTTPS

Le port par défaut pour les communications https est le 443.

6.9.3 Let’s Encrypt

Let’s encrypt est une autoritĂ© de certification libre, gratuite et automatisĂ©e. Ceci permet d’obtenir un certificat valide pour son site Web sans trop d’effort.

7 Partage et accÚs réseau

7.1 Objectifs du chapitre

  • ConnaĂźtre les diffĂ©rents moyens de partage et d’accĂšs Ă  un serveur et leur rĂŽle

7.2 NFS

NFS est un protocole réseau couramment employé pour partager des fichiers sur un réseau. NFS fonctionne en mode client-serveur. NFS est un protocole performant, mais sans sécurité accrue. Ce protocole est le protocole de partage réseau par excellence sous Linux/MacOS.

7.2.3 Fonctionnement NFS

NFS vĂ©rifie l’identitĂ© des utilisateurs via les UID, GID. Il faut donc que les UID, GID de la machine distante et locale corresponde. L’UID de root est toujours le mĂȘme (0).

Il est donc important de comprendre que NFS (v2,V3) ne demande pas aux utilisateurs de s’authentifier.

7.3 SAMBA

SMB/CIFS est un protocole propriétaire utilisé sous Windows pour les partages réseau.

Vous connaissez certainement ces partages réseaux qui ont des paths UNC de la forme : \machineserveur\partage.

Il permet donc une interopérabilité entre les 2 mondes (Linux/Windows) notamment:

  • CrĂ©er des partages sous Linux accessible sous Windows
  • Transformer un serveur Linux en Domain Controler
  • Authentifier des clients Linux sur un Active Directory

Samba fonctionne tout comme NFS en mode client-serveur. Samba possĂšde une gestion plus Ă©laborĂ©e au niveau de l’authentification et des droits des utilisateurs par rapport Ă  NFS.

7.4 VPN

Un VPN (Virtual Private Network) est un systÚme permettant de relier 2 réseaux via un réseau non sûr tout en garantissant un trafic sécurisé (crypté) et de maniÚre transparente. On parle de tunnel.

7.4.1 Classification VPN

Il existe différents types de VPN à savoir:

  1. LAN to LAN / Site to Site permettant de relier 2 rĂ©seaux ( Ex: relier des succursales d’une entreprise Ă©parpillĂ©es dans le monde)
  2. RoadWarrior permettant Ă  un PC externe de se connecter Ă  l’entreprise (Nomadisme des employĂ©s)

Il est important de comprendre que le VPN crĂ©e un rĂ©seau et le configure pour que le rĂ©seau distant (LAN to LAN) ou PC distant (Road Warrior) soit considĂ©rĂ© comme s’il Ă©tait dans l’entreprise. L’utilisateur pourra donc utiliser tout ce qui accessible dans le LAN de l’entreprise (imprimantes 
 ).

7.4.3 Protocoles VPN

ProtocoleCouche RéseauRemarques
OpenVPNCouche ApplicationOpenVPN est un logiciel crĂ©ant un VPN en se basant sur SSL/TLS – RoadWarrior ou Site to Site

7.5 FTP

Le FTP (File Transfer Protocol) est un protocole rĂ©seau standard. Le protocole FTP utilise un canal pour le transfert des donnĂ©es et un autre pour le contrĂŽle. C’est pourquoi il utilise par dĂ©faut 2 ports ( 20→ donnĂ©es, 21 → contrĂŽle). Le canal de contrĂŽle permet d’envoyer les commandes FTP ( put, get, open, close, ls, 
).

Il peut ĂȘtre sĂ©curisĂ© via SSL/TLS (FTPS) ou par SSH (SFTP). Regardez dans WinSCP, vous verrez que vous transfĂ©rez par dĂ©faut vos fichiers par SFTP!

7.5.1 Modes

Le protocole FTP peut s’utiliser en mode actif ou passif.

Dans le mode actif, le client peut choisir son port de connexion pour la rĂ©ception des donnĂ©es. Le serveur initialisera une connexion de son port 20 vers le port choisi par le client. Le client doit donc accepter les connexions entrantes sur le port choisi. Ceci pose souvent problĂšme car les clients se trouvent gĂ©nĂ©ralement dans un LAN qui effectue du NAT vers l’extĂ©rieur. C’est pourquoi le mode actif est le moins utilisĂ©.

Dans le mode passif, le serveur impose le port de connexion pour le transfert des données. Le port choisi par le serveur est envoyé au client qui initialise alors la connexion.

7.6 Terminal Server

Le Terminal Server repose sur le protocole RDP (Remote Desktop Protocol) développé par Microsoft.

Terminal Server permet non seulement la prise à distance d’un serveur avec son interface graphique, mais aussi de monter des lecteurs locaux sur le serveur distant.

8 Annuaires et Authentification

8.1 Objectifs du chapitre

  • ConnaĂźtre les diffĂ©rents composants d’un Active Directory et leurs rĂŽles

Le protocole LDAP (Lightweight Directory Access Protocol) a Ă©tĂ© dĂ©fini pour permettre d’interroger et de modifier un annuaire. Il est depuis devenu une rĂ©fĂ©rence et un standard pour l’authentification.

LDAP est en fait devenu bien plus qu’un protocole, c’est une norme qui dĂ©finit:

  1. un protocole: comment sont échangées les données
  2. un modĂšle de nommage: comment sont nommĂ©es les entrĂ©es dans l’annuaire
  3. un modÚle fonctionnel: quelles sont les méthodes pour accéder aux données
  4. un modĂšle d’information: nature et description des donnĂ©es
  5. un modÚle de sécurité: description de la sécurité des données (quel chiffrement 
)
  6. RĂ©plication: comment rĂ©pliquer des donnĂ©es entre serveurs LDAP pour se prĂ©munir des pannes? Ce point n’est pas encore standardisĂ©.

OpenLDAP est la solution reconnue du monde libre (paquet slapd dans Debian). La solution Active Directory de Microsoft est sans doute la plus connue et répandue.

8.2 ModÚle de nommage

Voici le vocabulaire de base utilisé dans un annuaire LDAP:

  • DC : Domain Component. Racine de l’arbre
  • DN : Distinguished Name. Chemin complet vers un Ă©lĂ©ment (Les DN sont uniques)
  • OU : Organizational Unit. Division de l’entreprise rassemblant des CN.
  • CN : Common Name. Nom d’un Ă©lĂ©ment

Exemple :

LDAP Tree

8.3 ModĂšle fonctionnel

LDAP a dĂ©fini diffĂ©rentes mĂ©thodes permettant de modifier et consulter l’annuaire. Voici la liste des principales mĂ©thodes :

  • Bind : s’authentifier auprĂšs du serveur LDAP. Ceci est nĂ©cessaire avant de demander au serveur une opĂ©ration au serveur
  • Add/Modify/Delete : mise Ă  jour de l’annuaire.
  • Search : «search» permettra de rechercher un Ă©lĂ©ment ou plusieurs Ă©lĂ©ments dans l’annuaire en prĂ©cisant une base, une portĂ©e et Ă©ventuellement des filtres (voir ci-dessous).
  • Compare : vĂ©rifie qu’un Ă©lĂ©ment contient ou non un attribut
  • Unbind : se dĂ©connecter du serveur

8.4 Modùle d’informations

LDAP dĂ©finit le modĂšle d’information suivant :

  • EntrĂ©e: composĂ© d’attributs, possĂšde un type (classe d’objets)
  • SchĂ©ma: dĂ©finition des attributs possibles et classes d’objets
  • DN (Distinguished Name)

8.5 ModÚle de sécurité

Le transport des messages LDAP sera chiffrĂ© via SSL/TLS.  L’utilisateur, une fois authentifiĂ© (via un bind), aura accĂšs aux donnĂ©es suivant les rĂšgles Ă©tablies dans les ACL (Access Control List).

8.6 ModÚle de replication

Un modĂšle de rĂ©plication est prĂ©vu dans la norme LDAP, mais il n’est pas encore standardisĂ©. La rĂ©plication est un Ă©lĂ©ment important pour assurer une redondance qui reste le moyen privilĂ©giĂ© par les administrateurs systĂšme pour se prĂ©munir des pannes. Les diffĂ©rentes implĂ©mentations LDAP (Active Directory, OpenLDAP, ..) ont dĂ©veloppĂ© leurs systĂšmes de rĂ©plication.

À noter Ă©galement que LDAP fournit un format d’échange standard nommĂ© LDIF (LDAP Data Interchange Format) qui permet d’échanger/sauvegarder de l’information entre serveurs LDAP. Cependant celui-ci ne permet pas une rĂ©plication aisĂ©e.

8.7 LDAP vs SGBD

LDAPSGBD
Attribut multi-valeurs/
Query LDAPQuery SQL
ModÚle de données défini, mais extensible facilementDéfinition du modÚle par le dévelopeur, extensible mais difficile

8.8 Active Directory

L’Active Directory permettra de gĂ©rer l’authentification des utilisateurs d’un ou plusieurs domaines, de gĂ©rer les droits des utilisateurs via des groupes de sĂ©curitĂ©. Un Active Directory dĂ©finira une forĂȘt qui sera composĂ©e d’arbres (domaine parent avec des domaines enfants) et/ou de domaines. Les domaines seront, quant Ă  eux, constituĂ©s d’unitĂ©s d’organisation et enfin d’ordinateurs, de groupes et utilisateurs.

Dans un Active Directory, nous allons retrouver diffĂ©rents objets. Les plus importants sont les utilisateurs, les ordinateurs du domaine, les groupes de sĂ©curitĂ©, les GPO (Voir GPO), les unitĂ©s d’organisation.

Un serveur hĂ©bergeant un Active Directory est appelĂ© contrĂŽleur de domaine. Il est conseillĂ© d’avoir au minimum 2 contrĂŽleurs de domaine par Active Directory pour se prĂ©munir des pannes.

8.8.1 UnitĂ© d’organisation

Une unitĂ© d’organisation est un regroupement d’objets de l’Active Directory. C’est un nƓud dans l’arbre LDAP. Les unitĂ©s d’organisation trouvent essentiellement leur utilitĂ© par le fait que des GPO puissent ĂȘtre dĂ©finies Ă  ce niveau.

Ne pas confondre les unitĂ©s d’organisation et les groupes de sĂ©curitĂ©. Des GPO ne peuvent pas ĂȘtre dĂ©finies sur des groupes et des permissions ne peuvent pas ĂȘtre dĂ©finies sur des unitĂ©s d’organisations. Un objet (utilisateur) peut appartenir Ă  plusieurs groupes, il ne pourra pas contre ĂȘtre placĂ© que dans une seule unitĂ© d’organisation.

8.8.2 Groupes de sécurité

Microsoft propose une recommandation pour la gestion des droits et des groupes. Il s’agit de la recommandation AG(U)DLP.

Account → Global → (Universel) → Domain Local → Permission

schéma utile à connaßtre pour expliquer AG(U)DLP :

AGDLP Schema

8.8.3 Permissions

8.8.3.1 Permissions NTFS

Microsoft utilise le systÚme de fichiers NTFS et dÚs lors les permissions seront des permissions NTFS. Les permissions NTFS sont trÚs riches (beaucoup de possibilités).

8.8.3.2 Permissions Partage réseau

Attention Ă  ne pas confondre les permissions NTFS qui s’appliquent directement sur des fichiers et dossiers locaux (prĂ©sents sur le systĂšme de fichiers) et les permissions de partage qui sont dĂ©finies sur les partages rĂ©seau.

 Lors de l’accĂšs Ă  un partage rĂ©seau, le systĂšme Ă©value tout d‘abord les permissions du partage rĂ©seau et ensuite les permissions NTFS (puisque tout partage rĂ©seau se retrouve toujours physiquement sur un systĂšme de fichiers).

8.9 GPO

Les GPO (Group Policy Object) permettent de dĂ©finir des stratĂ©gies de sĂ©curitĂ© et/ou de configurer des paramĂštres de maniĂšre centralisĂ©e pour un domaine ou une forĂȘt. Par exemple, on peut imposer un proxy pour les clients, dĂ©finir un fond d’écran, dĂ©finir une politique de mot de passe (longueur, complexitĂ© 
).

Les GPO, aussi appelĂ©es stratĂ©gie de groupe en français, permettent de dĂ©ployer des stratĂ©gies/paramĂštres sur 2 types objets de l’Active Directory : les utilisateurs et les ordinateurs. Les GPO se crĂ©ent le plus souvent sur des Organizational Unit.

Les GPO machines (configuration ordinateur) s’appliquent au dĂ©marrage de la machine. Les GPO utilisateurs (configuration utilisateur) s’appliquent Ă  l’ouverture de session d’un utilisateur.

9 Gestion des données

9.1 Objectifs du chapitre

  • Etablir un plan de sauvegarde des donnĂ©es

9.2 Base de données

9.2.2 Exemple PostgreSQL

Un moteur de base de donnĂ©es est constituĂ© de plusieurs programmes. PostgreSQL est composĂ© d’un programme superviseur (postmaster), du serveur exĂ©cutant les requĂȘtes (postgres) et d’un client interactif (psql).

9.2.2.3 Sauvegarde PostgreSQL

Il est important de sauvegarder les bases de données. Voici les erreurs à ne pas commettre :

  • Pas de sauvegarde
  • Sauvegarde jamais testĂ©e
  • Ne pas documenter sa sauvegarde (qui l’a fait/ quand, comment 
)
  • Sauvegarder sur le mĂȘme disque
  • Sauvegarder au mĂȘme endroit (incendie ?)
  • N’avoir qu’une sauvegarde trĂšs rĂ©cente car elle contiendra Ă©galement l’erreur

Les sauvegardes de type fichiers ou instantanĂ©s ne conviennent pas aux bases de donnĂ©es. Il est prĂ©fĂ©rable d’utiliser l’outil fourni par le moteur de base de donnĂ©es. Dans le cas de PostgreSQL, nous avons pg_dump.

9.2.2.4 Performance PostgreSQL

Il est important de savoir que les limitations des bases de données se situent essentiellement du cÎté des composants sous-jacents (CPU, RAM, vitesse disque, capacité disque 
).

La performance passe Ă©galement par l’ajout d’index. Un index peut accĂ©lĂ©rer par 1000 000 une requĂȘte !

L’utilisation de LIMIT est Ă©galement Ă  envisager. Doit-on vraiment charger l’entiĂšretĂ© d’une table, les premiers rĂ©sultats ne sont-ils pas suffisants ?

L’utilisation rĂ©guliĂšre de VACUUM pour supprimer dĂ©finitivement les donnĂ©es expirĂ©es est Ă  envisager, particuliĂšrement sur les bases de donnĂ©es des dĂ©veloppeurs qui crĂ©ent et dĂ©truisent souvent leurs bases de donnĂ©es.

L’utilisation d’ANALYSE permet de collecter des statistiques en vue d’optimiser la base de donnĂ©es.

Un petit mot sur les ORM pour finir. Ceux-ci sont trĂšs utiles, mais l’optimisation s’avĂšre souvent plus complexe Ă  gĂ©rer vu que vous laissez l’ORM crĂ©er les requĂȘtes SQL pour vous. En tant que dĂ©veloppeur, posez-vous (ou Ă  votre chef de projet) donc la question de la performance avant de vous dĂ©cider.

9.2.2.5 Réplication PostgreSQL

Comme d’habitude, les administrateurs systĂšmes ou DBA vont vouloir se prĂ©munir des pannes en installant de la redondance. Avec les bases de donnĂ©es, ceci peut se faire en activant la rĂ©plication. Ce mĂ©canisme permet Ă  2 moteurs de base de donnĂ©es de partager des bases de donnĂ©es. Les donnĂ©es de ces bases de donnĂ©es se retrouvent alors rĂ©pliquĂ©es/dupliquĂ©es au minimum sur 2 serveurs de bases de donnĂ©es.

La rĂ©plication la plus utilisĂ©e est celle dite du maĂźtre – esclave. Toutes les opĂ©rations sont faites sur le serveur maĂźtre et celui-ci envoie rĂ©guliĂšrement au serveur esclave ses journaux de transactions. Ce dernier rejoue alors le journal de transactions sur sa base de donnĂ©es.

9.3 Sauvegardes

Un administrateur systÚme sera en charge de la pérennité des données. Pour cette tùche, des sauvegardes ou backups seront nécessaires.

Bien sĂ»r il est souvent impossible de tout sauvegarder, c’est pourquoi il faut dĂ©finir une politique de sauvegarde qui rĂ©pond aux questions suivantes.

9.3.2 Sur quel support sauvegarder ?

Les entreprises auront donc souvent recours Ă  des NAS (Network Area Storage) ou SAN distants ou encore Ă  un stockage dans le Cloud.

9.3.3 Quel type de sauvegarde, quelle fréquence ?

Il existe différents types de sauvegarde à savoir :

  1. complÚte : une copie complÚte des données est faite
  2. incrémentielle : une copie des modifications depuis la derniÚre sauvegarde (complÚte ou incrémentielle) est faite
  3. différentielle : une copie des modifications depuis la derniÚre sauvegarde complÚte est faite
  4. miroir : une seule sauvegarde complĂšte.
  5. instantané/snapshot : pas vraiment une sauvegarde car difficile de restaurer un seul fichier

9.3.4 Conservation des données ?

La déduplication est un autre moyen mis en place par les entreprises. Ce mécanisme est souvent intégré au SAN.

Il est nĂ©cessaire de crypter ses backups pour Ă©viter Ă  une personne mal intentionnĂ©e de rĂ©cupĂ©rer facilement les donnĂ©es de l’entreprise. L’utilisation grandissante du Cloud renforce Ă©galement ce besoin.

9.3.6 La rÚgle du 3-2-1

Il existe une rĂšgle fortement conseillĂ©e pour les sauvegardes de donnĂ©es. Il s’agit de la fameuse rĂšgle 3-2-1.

  • 3 : conserver 3 copies des donnĂ©es (originale + 2 sauvegardes)
  • 2 : conserver les donnĂ©es sur 2 supports diffĂ©rents
  • 1 : conserver 1 copie de sauvegarde dans un lieu diffĂ©rent (des 2 autres copies)

9.4 Quotas

Les quotas permettent donc de rĂ©gler ce problĂšme en imposant une limite aux utilisateurs. Le mĂ©canisme de quotas propose une limite soft et une limite hard. Quand un utilisateur dĂ©passe sa limite soft, il reçoit un avertissement lui indiquant qu’il peut continuer Ă  travailler pour une pĂ©riode de grĂące dĂ©finie par l’administrateur. Une fois cette pĂ©riode grĂące Ă©coulĂ©e, il est bloquĂ© s’il n’est pas redescendu en dessous de la limite soft.

10 Virtualisation

10.1 Objectifs du chapitre

  • Comprendre la virtualisation, les diffĂ©rents types de virtualisation

10.2 Avantages de la virtualisation

La virtualisation consiste en l’abstraction d’un Ă©lĂ©ment du monde rĂ©el en le rendant virtuel. Ceci dans l’objectif de rendre l’élĂ©ment plus facilement :

  • Configurable
  • Transportable
  • OptimisĂ© (meilleure allocation des ressources)
  • Disponible (facilitĂ© de dĂ©ploiement)
  • SĂ©curisĂ© (isolation)

10.4 Inconvénients de la virtualisation

L’inconvĂ©nient majeur de la virtualisation est l’ajout d’une couche de virtualisation entre le systĂšme physique et le composant virtualisĂ©. Ceci permet d’obtenir les avantages citĂ©s ci-dessus, mais dĂ©grade les performances.

10.5 Hyperviseurs

Un hyperviseur est un logiciel de virtualisation permettant Ă  plusieurs machines virtuelles de fonctionner simultanĂ©ment sur un mĂȘme systĂšme physique.

  1. Hyperviseur type 1 / natif / bare-metal
  2. Hyperviseur type 2 / hosted

Un hyperviseur de type 1 sera utilisé dans le cadre de la virtualisation de serveurs.

serveurs privés virtuel (VPS)

Ce que vous connaissez le plus est certainement les hyperviseurs de type 2. Ces hyperviseurs s’installent dans un systùme d’exploitation comme un logiciel classique. On peut citer VirtualBox.

10.6 Virtualisation du stockage

La virtualisation du stockage consiste donc en la crĂ©ation d’une baie de stockage (ensemble de disques physiques) qui sera prĂ©sentĂ©e en un ou plusieurs ensembles logiques et dynamiques. On parle de LUN (Logical Unit Number). Une LUN est donc un espace de stockage logique et dynamique.

Un SAN est donc une baie de stockage avec des LUN accessibles via le réseau.

10.8 Le cas VirtualBox

La possibilitĂ© de rĂ©aliser un instantanĂ©/snapshot dans les solutions de virtualisation est un Ă©norme avantage. Ceci permet de revenir facilement Ă  un Ă©tat antĂ©rieur en cas de souci. Il est donc vivement conseillĂ© de rĂ©aliser un instantanĂ© avant toute modification importante d’un systĂšme.

11 Conteneurs (Docker)

11.1 Objectifs du chapitre

  • Comprendre les architectures Ă  base de conteneurs
  • Savoir crĂ©er un Dockerfile
  • DĂ©ployer des applications via Docker, docker-compose

11.2 Docker

11.2.1 Introduction

Docker est une solution d’architecture Ă  base de conteneurs. Les architectures Ă  base de conteneurs sont une Ă©volution avantageuse de la virtualisation.

Docker n’est donc pas un logiciel de virtualisation, mais un isolateur.

Les cgroups (Control Groups) permettent de fixer/limiter les ressources (CPU, Réseau, disque, nombre de processus) allouées à un conteneur ou un ensemble de conteneurs.

Les namespaces permettent d’isoler des ressources. Ainsi un conteneur ou ensemble de conteneurs ne voient que les ressources de son namespace.

Les conteneurs sont proches des machines virtuelles, mais prĂ©sentent un avantage important. Alors que la virtualisation consiste Ă  exĂ©cuter de nombreux systĂšmes d’exploitation sur un seul et mĂȘme systĂšme, les containers se partagent le mĂȘme noyau de systĂšme d’exploitation et isolent les processus de l’application du reste du systĂšme.

Les architectures Ă  base de conteneurs sont trĂšs utilisĂ©es car elles permettent facilement des mises Ă  l’échelle (scaling).

En effet, on peut facilement augmenter le nombre de conteneurs lorsqu’une application est fortement demandĂ©e. On appelle cela la mise Ă  Ă©chelle horizontale (horizontal scaling). On peut Ă©galement augmenter les ressources des conteneurs via les cgroups. On appelle cela la mise Ă  Ă©chelle verticale (vertical scaling). On peut bien Ă©videmment combiner les 2 mises Ă  l’échelle. Quand la demande est moins forte, on peut rĂ©duire le nombre de conteneurs et/ou les ressources et par consĂ©quent Ă©pargner de l’argent.

11.2.2 Docker vs Virtualisation

La grosse diffĂ©rence entre Docker et les systĂšmes de virtualisation classiques se situe au niveau de l’interaction avec le systĂšme d’exploitation hĂŽte.

  • Docker partagera/utilisera le mĂȘme noyau (Linux) pour tous les conteneurs.
  • Chaque VM gĂ©rĂ© par un hyperviseur aura son propre OS

11.2.4 Utilisation de Docker

Pour déployer une application via Docker, il y a donc 3 étapes essentielles :

  • CrĂ©ation d’un Dockerfile (recette de cuisine de l’application Ă  dĂ©ployer)
  • CrĂ©er l’image Docker (docker build -t <imagename> <pathToDockerfile>)
  • CrĂ©er un conteneur Ă  partir de l’image créée (docker run -d -p 9000:80 --name <containername> <imagename>)

Les points suivants de ce syllabus détailleront les différents éléments de ce schéma à savoir :

  • Le Dockerfile et ses principales instructions
  • Les commandes de gestion des images Docker
  • Les commandes de gestion des conteneurs Docker
  • Les Registry et DockerHub

11.2.4.1 Dockerfile et instructions principales

La conteneurisation d’une application commence par la crĂ©ation d’un dossier contenant tout ce qui est nĂ©cessaire Ă  l’application. Ce dossier doit contenir au minimum :

  • le code de l’application
  • un fichier Dockerfile

11.2.4.4 Registry et DockerHub

Le DockerHub est l’endroit oĂč vous devez rechercher votre image de base !

11.2.5 Points importants

11.2.5.1 Couches

A noter que Docker utilise un systĂšme de couche (layer) Ă  des fins d’optimisation des build d’images. Une couche est une image intermĂ©diaire.

Pour chaque ligne du Dockerfile, Docker crĂ©e une couche. Une image Docker est donc un empilement de couches c’est-Ă -dire d’images intermĂ©diaires. Ainsi nul besoin pour Docker de tout refaire Ă  chaque build, il va rĂ©utiliser les couches qui n’ont pas changĂ©.

11.2.5.2 RUN vs CMD

Ces 2 instructions ne sont pas similaires. RUN crĂ©e une nouvelle couche (image intermĂ©diaire) en incluant le rĂ©sultat de la commande qu’on lui transmet. Cette instruction agit donc au niveau de l’image (docker build).

CMD exĂ©cute une commande Ă  chaque dĂ©marrage d’un conteneur. Cette instruction agit donc au niveau du conteneur. Cette instruction est souvent nĂ©cessaire pour le dĂ©marrage de services (Apache, nodeJS, 
).

11.3 docker compose

Docker est prĂ©vu pour faire fonctionner des architectures microservices. Dans ce type d’architecture, on crĂ©e un conteneur par service.

Ceci est bien beau mais :

  • Comment gĂšre-t-on la communication entre les diffĂ©rents conteneurs ? Le conteneur application devra vraisemblablement communiquer avec le conteneur db.
  • Comment rend-on des donnĂ©es persistantes ? Un conteneur est stateless mais les donnĂ©es d’un conteneur db devront ĂȘtre persistĂ©es.

docker compose permet Ă©galement facilement la crĂ©ation de volumes. Ceci permet d’effectuer la persistance de donnĂ©es en dehors d’un conteneur.

11.3.4 Directives intéressantes

La directive «build» permet de construire une image Docker Ă  partir d’un Dockerfile.

La directive «ports» permet d’effectuer la redirection de ports (port forwarding) entre la machine hĂŽte et le conteneur.

La directive «volumes» permet de lier un rĂ©pertoire de la machine hĂŽte au conteneur. Les volumes ne sont pas dĂ©truits par dĂ©faut lors de la destruction du conteneur. C’est donc via ce biais que les donnĂ©es persistantes des conteneurs sont gĂ©rĂ©es.

11.3.5 Réseau

Les noms des services (conteneurs) deviennent des noms réseaux.

11.4 The Twelve Factor App

La conception de Docker s’est inspirĂ©e de la mĂ©thodologie des 12 facteurs, une mĂ©thodologie pour crĂ©er des applications SaaS ModĂšles de service. Voici un lien vers cette mĂ©thodologie https://12factor.net/fr/. Voyons comment Docker applique celle-ci.

Retenez cinq facteurs avec leurs exemples Docker.

  1. Code de base : La notion d’image en Docker permet clairement de dĂ©ployer plusieurs fois un mĂȘme code ou des versions diffĂ©rentes de ce mĂȘme code.
  2. Dépendances : Le Dockerfile rend explicite les dépendances.
  3. Configuration : Il est possible de passer des variables d’environnement Ă  un conteneur. Cependant un orchestrateur (k8s, voir paragraphe suivant) pourra le faire de maniĂšre plus Ă©lĂ©gante.
  4. Services externes : Les ressources peuvent ĂȘtre dĂ©couvertes via leur nom. Cependant un orchestrateur (k8s) pourra le faire de maniĂšre plus Ă©lĂ©gante.
  5. Build, Release, Run : docker build, docker run
  6. Processus : Docker est principalement stateless. Les volumes existent mais il sera plus Ă©lĂ©gant de gĂ©rer cela avec un orchestrateur. Il n’est pas rassurant de savoir ces volumes stockĂ©s sur une machine hĂŽte qui peut faillir.
  7. Association de ports : docker run -p 8080:80
  8. Concurrence : Le cÎté stateless des conteneurs permet facilement de créer plusieurs conteneurs pour faire face à la montée en charge.
  9. Jetable: Avec Docker, on crée, on déploie et supprime facilement une application.
  10. ParitĂ© Dev / Prod : la mĂȘme image peut ĂȘtre lancĂ©e en prod ou en dev.
  11. Logs : Par dĂ©faut tous les logs Docker sont envoyĂ©s vers stdout (d’oĂč le fait que Docker oblige les applications Ă  tourner en avant-plan).
  12. Processus d’administration : Il est trùs facile de se connecter et d’interagir avec un conteneur (docker exec -it).

11.5 Kubernetes (K8s)

11.5.1 Introduction

Kubernetes est un orchestrateur de conteneurs.

11.5.2 Utilité

Kubernetes permet d’apprĂ©hender les dĂ©fis liĂ©s Ă  la gestion des conteneurs notamment :

  • l’équilibrage de charge entre plusieurs conteneurs (load balancing)
  • la gestion des diffĂ©rents stockages pour les conteneurs (volumes). Ceux-ci peuvent ĂȘtre locaux, dans le Cloud, 

  • la gestion et l’allocation des ressources aux conteneurs de maniĂšre dynamique
  • la gestion de l’état de santĂ© des conteneurs
  • la gestion des informations de configuration et des secrets (clĂ© SSH, password, .. )

11.5.3 Vue générale et concepts k8s

Kubernetes est composĂ© d’un nƓud maĂźtre permettant la gestion du cluster k8s. Un cluster est un ensemble de machines physiques ou virtuelles. Chaque machine du cluster est appelĂ©e un “worker node” et contiennent une solution de dĂ©ploiement de conteneurs (Docker par ex.).

Chaque “worker node” hĂ©berge un pod. Un pod est l’unitĂ© de dĂ©ploiement d’une application dans k8s. Il s’agit d’un ou plusieurs conteneurs. Dans la pratique, le plus souvent un pod == un conteneur/un processus.

Un label est un couple “clĂ©:valeur” que l’on peut attacher Ă  un objet, notamment un pod. Les selectors permettent de sĂ©lectionner un objet k8s suivant son label

Kubernetes Cluster

Un fichier deployment.yml permet de dĂ©finir comment un Pod sera dĂ©ployĂ©. Ce fichier contient une instruction “replica” qui indiquera Ă  K8s combien d’instances de ce Pod il devra lancer/maintenir.

Un fichier services.yml permet de dĂ©finir et gĂ©rer le rĂ©seau Ă  l’intĂ©rieur du cluster. Vu que les pods peuvent ĂȘtre créés, dĂ©truits et recréés, il est nĂ©cessaire qu’un service puisse cibler les pods encore actifs Ă  un moment t.

Ingress est un load balancer qui permet de faire communiquer le monde extérieur avec le cluster k8s.

Les Persistent Volume Claim (PVC) permettent de persister des donnĂ©es. Cela va beaucoup plus loin que l’utilisation de simples volumes (PV). Il s’agit d’une demande d’espace adressĂ©e Ă  k8s. Celui-ci attribuera alors au pod un stockage suivant sa demande. A noter aussi que l’intĂ©rĂȘt de k8s par rapport au stockage est de pouvoir utiliser des stockages variĂ©s (Amazon, Azure, Local, 
).

12 DevOps

12.1 Objectifs du chapitre

  • Consolider les notions DevOps
  • DĂ©ployer des configurations via Ansible
  • DĂ©ployer une pipeline via Jenkins

12.2 Introduction

Le dĂ©ploiement d’une application faisant maintenant partie du produit ainsi que les mises Ă  jour en continu, il est donc nĂ©cessaire d’avoir une infrastructure avec le concours des opĂ©rationnels pour mener Ă  bien ce nouveau mode de dĂ©veloppement logiciel.

DevOps Schema

Schéma à connaßtre

12.2.1 Pipeline de développement

L’approche DevOps mise Ă©galement sur l’automatisation via des outils. On parlera souvent de pipeline de dĂ©veloppement. Il s’agit d’une chaĂźne de production logicielle la plus automatisĂ©e possible jusqu’au client. Celle_ci se divise gĂ©nĂ©ralement en une partie CI (Continuous Integration) qui s’occupe de tester l’application et une partie CD (Continuous Deployment) qui s’occupe de dĂ©ployer l’application pour les clients.

Sans surprise, les pipelines utiliseront les éléments vus dans les chapitres précédents surtout les conteneurs, les orchestrateurs, le Cloud et les outils de configurations.

DevOps du cÎté développeurs :

DevOps va privilégier une architecture microservice, car celle-ci permet un meilleur contrÎle et une montée en charge facilitée.

DevOps du coté des sysadmins : Les outils utilisés par les sysadmins dans ce cadre sont des outils de gestion de configuration (Chef, Puppet, Ansible, ..), des outils de gestion et utilisation des conteneurs (Docker, K8s).

12.3 Pipeline - Jenkins

Jenkins est un outil open source Ă©crit en Java permettant notamment la crĂ©ation de pipelines. Il s’intĂšgre parfaitement avec d’autres outils comme Docker , Github, 
 .

12.4 Ansible

12.4.1 Introduction

Pour les administrateurs systĂšmes, il est nĂ©cessaire de disposer d’outils pour automatiser les tĂąches d’installations et de configurations. En effet, les administrateurs systĂšmes doivent s’occuper d’un parc de machines et il est donc insensĂ© de configurer toutes ses machines Ă  la main.

Pour ce faire, il existe diffĂ©rents outils permettant d’automatiser les installations et configurations. Nous pouvons citer Puppet, Chef et Ansible. Nous verrons Ansible en labos car il peut Ă©galement se rĂ©vĂ©ler utile pour un dĂ©veloppeur.

Ansible a dĂ©fini son propre vocabulaire. On parle de contrĂŽleur qui est est la machine qui exĂ©cute Ansible en tant que tel et de cibles qui sont les machines (hosts) qu’Ansible configure. Les cibles sont dĂ©finies dans l’inventaire d’Ansible, simple fichier reprenant des noms de machines ou IP de machines. A noter que le contrĂŽleur et la cible peuvent ĂȘtre la mĂȘme machine. Dans ce cas, cela signifie que nous automatisons alors simplement un ensemble de tĂąches pour une seule machine. Nous procĂ©derons de cette maniĂšre durant les labos. Vous verrez que l’on prĂ©cisera toujours dans notre fichier Ansible localhost comme cible !

12.4.8 RÎle Ansible

Ansible permet de sĂ©parer un playbook dans plusieurs fichiers. On appelle cela un rĂŽle Ansible. Un rĂŽle Ansible est un rĂ©pertoire contenant l’arborescence suivante :

  • defaults : valeurs par dĂ©faut des variables
  • files : fichiers statiques Ă  dĂ©ployer
  • handlers : tĂąches pouvant ĂȘtre appelĂ©es par notification
  • tasks : tĂąches Ă  effectuer
  • templates: modĂšles de fichier de configuration
  • tests : tests pour le rĂŽle
  • vars : variables spĂ©cifiques du playbook
  • README.md : description gĂ©nĂ©rale du rĂŽle

12.5 Observabilité

12.5.1 Introduction

Sur un serveur isolĂ©, on peut facilement consulter les logs, regarder certaines mĂ©triques pour Ă©tablir un bilan de santĂ© du serveur ou de notre applciation. Cependant dans une infrastructure avec plusieurs serveurs, ayant eux-mĂȘmes des milliers de conteneurs, il est nĂ©cessaire de s’outiller et de faire remonter les informations sur celle-ci vers un endroit centralisĂ©.

Composantes principales :

  1. Logs - Enregistrements textuels des événements systÚme ou applicatifs. - Utiles pour le debugging et les audits.

  2. Métriques - Données numériques sur les performances (CPU, mémoire, latence, etc.). - Utilisées pour les alertes et les tableaux de bord.

  3. Traces distribuĂ©es - Suivi d’une requĂȘte Ă  travers plusieurs services. - Essentiel pour les architectures microservices.

  4. EvĂ©nements - Actions ou changements d’état dĂ©tectĂ©s dans le systĂšme. - Peuvent dĂ©clencher des alertes ou des automatisations.

12.5.2 Outils de surveillance

OutilTypeDescription courte
PrometheusMonitoring/metricsCollecte de métriques, intégration avec Grafana
GrafanaVisualisationTableaux de bord pour visualiser les informations remontées
LokiLogs/AnalyseCollecte et indexation centralisée de logs, intégré à Grafana
AlloyCollecte/AgentAgent unifié pour collecter logs, métriques et traces, compatible Grafana

12.5.3 Architecture de surveillance - Logs

ComposantRîleFonction principalExemple d’outil
AgentCollecteCapture les logs, métriques et traces depuis les sourcesGrafana Alloy, Fluentd
RépartiteurDistributionValide et répartit les logs vers les composants de traitementLoki Distributor
Stockage temporaireIndexation et bufferStocke les logs en mémoire, les indexe avant archivageLoki Ingester
Évaluateur de rĂšglesAnalyse et alertesApplique des rĂšgles pour gĂ©nĂ©rer des alertes ou transformer les donnĂ©esLoki Ruler
Moteur de requĂȘtesInterrogationPermet la recherche et l’analyse des logsLoki Querier
Interface utilisateurVisualisationAffiche les logs, métriques, traces et dashboards interactifsGrafana

13 Cloud (Terraform notamment)

13.1 Objectifs du chapitre

  • ConnaĂźtre les modĂšles de service Cloud
  • Architecture Multi-tenant et Cloud
  • DĂ©ployer des services PaaS avec Terraform

13.2 Introduction Cloud

Le Cloud est une abstraction de l’infrastructure.

13.4 ModÚles de service

13.4.1 Infrastructure as a Service (IaaS)

IaaS : DĂ©ploiement d’une infrastructure via les outils du fournisseur Cloud. L’utilisateur peut paramĂ©trer le rĂ©seau, les serveurs, 
 . Ex: Amazon EC2, Azure VM, 


Terraform est certainement l’outil le plus utilisĂ© pour dĂ©ployer de l’IaaS. Il permet de crĂ©er des VM et d’autres Ă©lĂ©ments d’infrastructure sur AWS, Azure, 
 . Cet outil est dĂ©crit dans la section suivante.

13.4.2 Platform as a Service (PaaS)

PaaS : DĂ©ploiement d’une plateforme via les outils du fournisseur Cloud. L’utilisateur peut paramĂ©trer la plateforme mais celui ci n’a aucun accĂšs, vue sur l’infrastructure. Ceci est un des modĂšles de service Cloud les plus employĂ©s par les dĂ©veloppeurs. Ex: Heroku, AWS Elastic Beanstalk, Cloud Foundry, 


13.4.3 Function as a Service (FaaS)

FaaS: DĂ©ploiement d’une fonction dans le Cloud. Ici l’utilisateur ne paramĂštre rien. Il choisit son langage et Ă©crit son code. Aucun accĂšs, vue sur l’infrastructure, paramĂ©trage. Ceci est un des modĂšles de service Cloud les plus employĂ©s par les dĂ©veloppeurs. Ex: fonctions lambda AWS,


13.4.4 Software as a Service (SaaS)

SaaS: AccĂšs Ă  une application via Internet. Aucun accĂšs, vue sur l’infrastructure, paramĂ©trage par l’utilisateur limitĂ©. Ex: Gmail, Office365,


13.5 Architecture Multi-tenant et Cloud

13.5.1 Introduction

Dans une architecture multi-tenant, une mĂȘme instance d’une application logicielle est utilisĂ©e par plusieurs clients, ces derniers Ă©tant des « tenants ».

Le modĂšle multi-tenant peut s’avĂ©rer Ă©conomique, Ă©tant donnĂ© que les coĂ»ts liĂ©s au dĂ©veloppement et Ă  la maintenance des logiciels sont partagĂ©s.

ArchitectureInstance AppBase de donnéesIsolationCoût
Single-Tenant1 par client1 par clientTrĂšs forte 🔒ÉlevĂ© 💾
Multi-Tenant1 partagĂ©e1 partagĂ©e ou multi-DBMoyenne Ă  forte đŸ§©Faible Ă  moyen 💰
Multi-DB (option)Variable1 par clientForte 🔐Moyen Ă  Ă©levĂ© đŸ’”

Les modÚles de service SaaS présentes dans le Cloud proposent souvent les approches multi-tenant et single-tenant.

13.6 Terraform / OpenTofu

13.6.1 Introduction

Terraform est un outil permettant de dĂ©ployer des ressources dans le Cloud. En clair, il permet d’automatiser la crĂ©ation de ressources (VM, image docker, 
) en local ou dans le Cloud. Il dispose de nombreux connecteurs (providers) permettant de crĂ©er des ressources aussi bien dans AWS (Amazon), Azure, en local, 
 Ce dernier point le rend particuliĂšrement intĂ©ressant au sein des entreprises.

Ces noms de rĂ©fĂ©rence doivent ĂȘtre en minuscules et sans caractĂšres spĂ©ciaux (pas d’underscore !).

13.6.4.4 Déploiement LocalStack

Pour rappel, LocalStack permet d’émuler des services AWS en local. Nous n’utiliserons que quelques services (les principaux) d’AWS Ă  savoir :

  • s3 : Ce service est aussi appelĂ©e Bucket. Il s’agit d’un service de stockage de fichiers en tout genre. Ceci permet notamment de stocker des fichiers images pour une application ou encore de dĂ©ployer un site Web statique.
  • lambda : Il s’agit d’un service FaaS. Ceci permet de dĂ©ployer une fonction (morceau de code JS, Python, 
.) directement dans le Cloud.
  • dynamodb : Il s’agit d’un moteur de base de donnĂ©es NoSQL de type clĂ©-valeur.
  • ec2 : Il s’agit d’un service IaaS. Ceci permet de dĂ©ployer des “instances EC2” c’est-Ă -dire des machines virtuelles.