Cours B3-11 - Durcir les serveurs Linux et Windows
Cours · Fiche de cours

B3-11 - Durcir les serveurs Linux et Windows

B3-11 Durcir les serveurs Linux et Windows

🎓 SIO2 · semestre 3 ⏱️ 5 h (cours + TP) 🎯 Bloc 3 – Cybersécurité Réduire la surface d'attaque d'un serveur Debian et d'un serveur Windows en suivant un référentiel, puis mesurer le résultat et surveiller les journaux de sécurité.

🎯 Objectifs

  • Expliquer la surface d'attaque et les principes de moindre service, de moindre privilège et de défense en profondeur.
  • S'appuyer sur un référentiel (ANSSI, CIS) pour décider quoi durcir.
  • Durcir un serveur Debian : mises à jour automatiques, comptes et sudo, SSH par clés, Fail2ban, pare-feu local.
  • Durcir un serveur Windows : rôles, comptes, stratégies de sécurité, pare-feu, Defender, LAPS.
  • Mesurer le niveau de durcissement (Lynis, PingCastle) et surveiller les événements de sécurité.

📋 Prérequis

🧭 Référentiel

  • B3.5 Assurer la cybersécurité d'une infrastructure : sécuriser les serveurs et leurs services.
  • B3.3 Sécuriser les équipements : appliquer les bonnes pratiques de configuration.
  • B3.4 Garantir la disponibilité, l'intégrité et la confidentialité des services.
Test express des prérequis 3 questions · 2 minutes · conseillé avant de commencer

1. Quelle commande Debian liste les services qui écoutent sur le réseau ?

ss -tlnp affiche les ports TCP en écoute (listening) avec le programme qui les ouvre. À revoir : B2-14 · Debian 13.

2. Une vulnérabilité, c'est…

A est une menace (un attaquant), B un impact. Durcir, c'est réduire le nombre de vulnérabilités exploitables. À revoir : B3-01 · Fondamentaux.

3. Pourquoi ne travaille-t-on pas en permanence avec un compte administrateur ?

C'est le principe du moindre privilège : on n'utilise les droits d'administration que le temps d'une tâche. À revoir : B3-05 · Authentification.
SRV-LINUX Failed password for root Invalid user admin Invalid user test 3 412 essais 22 · 80 · 3306 · 111 ouverts

Brocéliande Logistique (entreprise fictive) vient de mettre en service SRV-LINUX, un serveur Debian 13 qui héberge l'intranet, et administre ses comptes sur SRV-01, un Windows Server 2025 contrôleur de domaine. Les deux ont été installés « par défaut », avec tout ce que proposait l'assistant.

En une nuit, le journal de SRV-LINUX enregistre plus de 3 000 tentatives de connexion SSH sur le compte root, et le prestataire de sauvegarde signale que la base de données écoute sur toutes les interfaces. Le responsable te confie le durcissement des deux serveurs : supprimer ce qui ne sert pas, verrouiller ce qui reste, et prouver le résultat par une mesure avant et après.

Le coursLa surface d'attaque et les référentiels, puis le durcissement de Debian et de Windows Server, la mesure du résultat et la surveillance des journaux.

1. La surface d'attaque d'un serveur

Un attaquant ne peut exploiter que ce qui existe : un service qui écoute sur le réseau, un compte qui peut se connecter, un logiciel installé mais jamais mis à jour. L'ensemble de ces points d'entrée forme la surface d'attaque. Plus elle est grande, plus il y a de chances qu'une faille y soit présente.

Durcissement (en anglais hardening) : ensemble des réglages qui réduisent la surface d'attaque d'un système et limitent les dégâts d'une compromission : supprimer ou désactiver le superflu, restreindre les accès, appliquer les mises à jour, journaliser. On durcit avant la mise en production, puis on contrôle régulièrement que le niveau est maintenu.

Clique sur chaque porte ouverte de SRV-LINUX pour voir le risque et la mesure de durcissement.

SRV-LINUX Debian 13 · intranet Ports ouverts après une installation « par défaut » 22 · SSH 80 · HTTP 3306 · MariaDB 111 · rpcbind à garder à garder et verrouiller à fermer ou supprimer

Choisis un port : le risque et la mesure s'affichent ici.

Chaque port ouvert est une porte : on garde celles qui servent, on verrouille, on mure les autres.

Le durcissement ne concerne pas que le réseau. La surface d'attaque comprend aussi :

ÉlémentExemple de risqueMesure de durcissement
Services réseauBase de données joignable depuis tout le réseauSupprimer, désactiver ou n'écouter que sur l'interface utile
ComptesCompte root ou « Administrateur » ciblé par force bruteConnexion directe interdite, comptes nominatifs, mots de passe robustes, MFA
LogicielsFaille connue non corrigée (CVE)Mises à jour automatiques de sécurité, logiciels inutiles désinstallés
DroitsUtilisateur ordinaire capable de lire /etc/shadow ou d'installer un logicielMoindre privilège, sudo limité, groupes d'administration réduits
TracesAttaque passée inaperçueJournalisation des événements de sécurité, centralisation, alertes

2. Les principes et les référentiels

Durcir ne s'improvise pas : on suit des principes simples et un référentiel reconnu, qui liste les réglages à appliquer et permet de justifier ses choix devant un responsable ou un jury.

  • Moindre serviceN'installer et n'activer que ce qui est nécessaire au rôle du serveur. Un serveur web n'a pas besoin d'interface graphique, d'imprimante partagée ni de serveur de messagerie.
  • Moindre privilègeChaque compte, chaque service n'a que les droits dont il a besoin. On administre avec un compte nominatif qui élève ses droits ponctuellement (sudo, compte d'administration séparé), jamais en session root permanente.
  • Défense en profondeurPlusieurs barrières indépendantes : pare-feu réseau, pare-feu local, authentification forte, mises à jour, journalisation. Si l'une cède, les autres tiennent encore.
  • TraçabilitéTout accès et toute action d'administration laissent une trace horodatée, conservée hors du serveur : sans traces, impossible de comprendre une attaque.
DONNÉES ① pare-feu réseau ② pare-feu local + services réduits ③ comptes et clés ✋ ✋ La défense en profondeur une seule porte, gardée, au lieu de dix

Pour bien comprendre : le château fort

Un château médiéval ne compte pas sur un seul mur : il y a des douves, une enceinte extérieure, une enceinte intérieure et un donjon. Un assaillant qui franchit la première ligne tombe sur la suivante : c'est la défense en profondeur.

Le bâtisseur ne perce que les portes indispensables, chacune gardée : c'est le moindre service. Et le garde de la cuisine n'a pas la clé du trésor : c'est le moindre privilège.

Pour un serveur, les enceintes sont le pare-feu réseau, le pare-feu local, les services réduits, l'authentification forte et le chiffrement des données.

2.1 Les référentiels à connaître

RéférentielÉditeurContenuUsage
Guide d'hygiène informatiqueANSSI42 mesures essentielles pour toute organisationPoint de départ, vision d'ensemble
Recommandations de configuration d'un système GNU/LinuxANSSIRègles classées par niveau : minimal, intermédiaire, renforcé, élevéDurcir Debian selon le niveau de sensibilité
Recommandations relatives à l'administration sécurisée et à l'Active DirectoryANSSIComptes d'administration, modèle en niveaux (tiering), postes dédiésSécuriser le domaine Windows
CIS BenchmarksCenter for Internet SecurityUn document par système (Debian, Windows Server 2025…), niveau 1 (de base) et niveau 2 (renforcé), chaque règle avec sa justification et son contrôleListe de contrôle très détaillée, utilisée par les outils d'audit

Un durcissement se justifie : chaque réglage appliqué est rattaché à une règle d'un référentiel (« ANSSI GNU/Linux, niveau minimal », « CIS Windows Server 2025, niveau 1 »), et chaque écart volontaire est noté avec sa raison. C'est ce document que demandent un auditeur et le jury de l'épreuve E6.

3. Debian : mises à jour, services et comptes

Sur Debian, le durcissement commence toujours par trois chantiers : garder le système à jour sans dépendre d'une intervention humaine, retirer ce qui ne sert pas, et organiser les comptes pour que personne ne travaille en root.

3.1 Les mises à jour de sécurité automatiques

La plupart des attaques réussies exploitent une faille déjà corrigée par l'éditeur, mais pas encore installée. Le paquet unattended-upgrades installe chaque jour, sans intervention, les mises à jour de la branche sécurité de Debian.

Debian 13 terminalSRV-LINUX
$ sudo apt update && sudo apt full-upgrade # d'abord rattraper le retard
$ sudo apt install unattended-upgrades apt-listchanges
$ sudo dpkg-reconfigure -plow unattended-upgrades # répondre « Oui » : active le passage quotidien
$ sudo unattended-upgrade --dry-run --debug # simulation : ce qui serait installé
$ less /var/log/unattended-upgrades/unattended-upgrades.log # historique des installations

Une mise à jour du noyau ou de la bibliothèque libc n'est prise en compte qu'après un redémarrage. La commande needrestart indique les services à relancer ; en production, on planifie un créneau de redémarrage plutôt que d'activer le redémarrage automatique.

3.2 Moindre service : retirer le superflu

  1. Lister ce qui écoute : sudo ss -tlnp (TCP) et sudo ss -ulnp (UDP). Chaque ligne doit être justifiée par le rôle du serveur.
  2. Lister les services actifs : systemctl list-units --type=service --state=running.
  3. Supprimer ce qui ne sert pas (sudo apt purge rpcbind) ou, à défaut, l'arrêter et l'empêcher de redémarrer (sudo systemctl disable --now cups).
  4. Restreindre l'écoute des services locaux : une base de données utilisée par le serveur lui-même écoute sur 127.0.0.1 seulement.

3.3 Les comptes et sudo

On administre avec un compte nominatif (adm-lmartin) membre du groupe sudo, et on laisse le compte root sans connexion directe. Chaque commande passée avec sudo est journalisée avec le nom de son auteur : la traçabilité est assurée.

Debian 13 terminalSRV-LINUX · compte d'administration nominatif
# adduser adm-lmartin # mot de passe long, propre à cette personne
# usermod -aG sudo adm-lmartin # le groupe sudo a le droit d'élever ses privilèges
# passwd -l root # verrouille le mot de passe de root (sudo reste possible)
# getent group sudo # qui peut devenir administrateur ?
# journalctl _COMM=sudo --since today # qui a fait quoi avec sudo aujourd'hui

Avant de verrouiller root ou d'interdire les mots de passe en SSH, vérifie que ton compte nominatif fonctionne : ouvre une seconde session, teste sudo -v, et garde la première ouverte. Sinon, seule la console Proxmox de la VM permettra de récupérer la main.

4. Durcir SSH et bloquer la force brute

SSH est la porte d'administration des serveurs Linux : elle est scannée en permanence par des robots qui essaient des milliers de couples identifiant/mot de passe. Trois mesures la rendent quasiment imprenable : l'authentification par clé, l'interdiction de root et le bannissement automatique des adresses qui insistent.

4.1 L'authentification par clé

Avec une paire de clés, le serveur envoie un défi que seule la clé privée de l'administrateur peut signer. Aucun mot de passe ne circule, et deviner une clé ed25519 est hors de portée.

Windows PowerShellPC-ADMIN · poste de l'administrateur
PS> ssh-keygen -t ed25519 -C "adm-lmartin@broceliande" # saisir une phrase de passe
PS> type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh adm-lmartin@172.16.50.11 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
PS> ssh adm-lmartin@172.16.50.11 # la phrase de passe de la clé est demandée, plus le mot de passe du compte

Depuis un poste Linux, la copie se fait en une commande : ssh-copy-id adm-lmartin@172.16.50.11.

4.2 La configuration du serveur SSH

On ne modifie pas le fichier principal : on ajoute un fichier dans /etc/ssh/sshd_config.d/, lu en premier. Ainsi, une mise à jour du paquet ne remplace pas nos réglages.

Fichier /etc/ssh/sshd_config.d/90-durcissement.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowGroups ssh-admins
X11Forwarding no
  • PermitRootLogin noLe compte root, que tous les robots essaient en premier, ne peut plus se connecter en SSH.
  • PasswordAuthentication noPlus aucune connexion par mot de passe : seules les clés sont acceptées, la force brute devient inutile. KbdInteractiveAuthentication no ferme la variante « clavier interactif ».
  • MaxAuthTries 3 · LoginGraceTime 30Trois essais par connexion et 30 secondes pour s'authentifier : les tentatives coûtent plus cher à l'attaquant.
  • AllowGroups ssh-adminsSeuls les membres de ce groupe peuvent ouvrir une session SSH, même si d'autres comptes existent sur le serveur.
Debian 13 terminalappliquer sans se couper la main
$ sudo groupadd ssh-admins && sudo usermod -aG ssh-admins adm-lmartin
$ sudo sshd -t # vérifie la syntaxe : aucune sortie = aucune erreur
$ sudo systemctl reload ssh # les sessions ouvertes restent ouvertes
$ sudo sshd -T | grep -Ei 'permitroot|passwordauth|allowgroups' # configuration réellement appliquée

4.3 Fail2ban : bannir ceux qui insistent

Fail2ban lit les journaux, compte les échecs d'authentification par adresse IP et, au-delà d'un seuil, ajoute une règle de pare-feu qui bloque cette adresse pendant un temps donné.

198.51.100.66 SRV-LINUX · sshd Fail2ban lit le journal, gère le pare-feu root / 123456 tentatives de mots de passe en boucle Failed password for root from 198.51.100.66 port 51022 ssh2 1 2 3 échecs comptés règle de rejet ajoutée banni pendant 1 h PC-ADMIN · clé
Fail2ban ne remplace pas l'authentification par clé : il réduit le bruit et ralentit les attaques.
Fichier /etc/fail2ban/jail.local
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 3
ignoreip = 127.0.0.1/8 172.16.99.0/24

[sshd]
enabled = true
backend = systemd

Debian n'écrit plus /var/log/auth.log par défaut : les journaux sont dans journald. Sur Debian 13, le paquet fail2ban règle déjà la prison sshd sur le journal systemd ; le piège vient d'un jail.local repris d'un serveur Debian 12 ou modifié à la main (backend = auto, logpath = /var/log/auth.log) : Fail2ban cherche alors un fichier qui n'existe pas et ne bannit personne. Écrire backend = systemd dans la prison reste une bonne pratique. Contrôle avec sudo fail2ban-client status sshd : le compteur « Currently failed » doit bouger quand tu rates une connexion.

Debian 13 terminalinstaller et contrôler Fail2ban
$ sudo apt install fail2ban python3-systemd
$ sudo systemctl restart fail2ban
$ sudo fail2ban-client status sshd # échecs en cours, adresses bannies
$ sudo fail2ban-client set sshd unbanip 172.16.10.105 # débannir un collègue étourdi

5. Le pare-feu local du serveur

Le pare-feu réseau (pfSense, fiche B3-09) filtre entre les zones. Le pare-feu local protège le serveur lui-même, y compris contre une machine compromise du même VLAN : c'est une enceinte de plus. Sur Debian, UFW (Uncomplicated Firewall) écrit les règles du noyau (nftables) avec une syntaxe simple.

La politique de base est toujours la même : tout refuser en entrée, puis ouvrir uniquement ce qui sert, au plus près de qui en a besoin.

Debian 13 terminalSRV-LINUX · pare-feu local
$ sudo apt install ufw
$ sudo ufw default deny incoming # politique : tout est refusé en entrée…
$ sudo ufw default allow outgoing
$ sudo ufw allow from 172.16.99.0/24 to any port 22 proto tcp # SSH depuis le VLAN de gestion seulement
$ sudo ufw allow 443/tcp # l'intranet, pour tout le monde
$ sudo ufw enable # en dernier, une fois SSH autorisé
$ sudo ufw status numbered

SRV-LINUX doit aussi accepter le HTTP (port 80) de tous les postes, le SSH uniquement depuis PC-ADMIN (172.16.99.20), et refuser tout le reste. Complète les commandes UFW, puis vérifie chaque ligne avec ✓.

$
$
$
$

6. Durcir Windows Server

Les principes sont identiques, les outils changent. Sur un contrôleur de domaine comme SRV-01, le durcissement protège aussi tout l'Active Directory : un attaquant qui le compromet devient maître de tous les postes et de tous les comptes.

ChantierMesureOù ?
Moindre serviceN'installer que les rôles utiles ; préférer l'installation Server Core (sans bureau) pour les nouveaux serveursGestionnaire de serveur → Supprimer des rôles
Mises à jourMises à jour mensuelles (« Patch Tuesday ») installées et testées, via WSUS ou Windows UpdateParamètres → Windows Update, ou GPO
ComptesComptes d'administration nominatifs et séparés du compte de travail ; compte « Administrateur » intégré peu utilisé ; groupe « Admins du domaine » réduit au minimumUtilisateurs et ordinateurs Active Directory
Mots de passe et verrouillageLongueur minimale de 12 à 14 caractères, verrouillage du compte après plusieurs échecsGPO « Default Domain Policy » → Stratégies de comptes
Administrateurs locauxWindows LAPS : mot de passe administrateur local différent sur chaque machine, renouvelé automatiquement et stocké dans l'ADGPO « LAPS » + module PowerShell LAPS
Pare-feuPare-feu Windows actif sur les trois profils (domaine, privé, public), règles entrantes limitéesPare-feu Windows Defender avec fonctions avancées de sécurité
AntivirusMicrosoft Defender actif et à jour, protection en temps réel, protection contre la falsificationSécurité Windows / Get-MpComputerStatus
Protocoles anciensSMBv1 absent, NTLMv1 refusé, RDP avec authentification au niveau du réseau (NLA)GPO « Options de sécurité »
AuditStratégie d'audit avancée : ouvertures de session, gestion des comptes, modifications de groupesGPO → Configuration de stratégie d'audit avancée
PC-DIR PC-COMPTA PC-PAIE PC-ENTREPOT Admin2019! Admin2019! Admin2019! Admin2019! le même mot de passe partout attaquant un mot de passe volé ouvre tous les postes q7#Lx9…Zt M2!vR8…pa Xe4$k1…Qw b9Hq@3…Lm Active Directory un mot de passe par objet ordinateur Active Directory technicien autorisé Get-LapsADPassword bloqué : mot de passe différent
LAPS casse le mouvement latéral : chaque machine a son propre secret, renouvelé automatiquement.
Windows Server 2025 PowerShell (administrateur)SRV-01 · contrôles rapides
PS> Get-WindowsFeature | Where-Object Installed # rôles et fonctionnalités réellement installés
PS> Get-NetFirewallProfile | Format-Table Name, Enabled # les 3 profils doivent être True
PS> Get-MpComputerStatus | Select-Object RealTimeProtectionEnabled, AntivirusSignatureLastUpdated
PS> Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol # doit être False
PS> Get-ADGroupMember "Admins du domaine" # qui a tous les droits ?
PS> Get-LapsADPassword -Identity PC-COMPTA -AsPlainText # mot de passe local géré par LAPS
Niveau 0 · cœur de confiancecontrôleurs de domaine (SRV-01), AD, comptes « Admins du domaine » Niveau 1 · serveursSRV-LINUX, SRV-WEB, sauvegardes : comptes adm-srv-… Niveau 2 · postes de travailPC-DIR, PC-COMPTA… : comptes adm-pt-… Interdit : un compte de niveau 0 ne se connecte jamais sur un poste
Un poste compromis ne doit jamais voir passer les identifiants d'un administrateur du domaine.

L'ANSSI recommande de séparer l'administration en niveaux : le niveau 0 (contrôleurs de domaine, AD), le niveau 1 (serveurs), le niveau 2 (postes). Un compte d'administration d'un niveau ne se connecte jamais sur une machine d'un niveau inférieur : ainsi, un poste de travail compromis ne livre pas les identifiants d'un administrateur du domaine.

7. Mesurer le résultat et surveiller

Un durcissement qui ne se mesure pas ne se pilote pas. On utilise des outils d'audit avant et après les réglages, puis on surveille les journaux pour repérer une attaque ou un retour en arrière.

7.1 Les outils d'audit

OutilCibleCe qu'il donne
LynisLinuxDes centaines de contrôles, une liste d'avertissements et de suggestions, et un indice de durcissement sur 100
PingCastleActive DirectoryUn rapport HTML et un score de risque (plus il est bas, mieux c'est) : comptes privilégiés, mots de passe, délégations, anciens protocoles
CIS-CAT, OpenSCAPLinux et WindowsComparaison automatique avec un CIS Benchmark ou un profil de sécurité
Microsoft Security Compliance ToolkitWindowsModèles de GPO de sécurité recommandés par Microsoft, à comparer avec la configuration réelle
Debian 13 terminalaudit Lynis
$ sudo apt install lynis
$ sudo lynis audit system # 2 à 3 minutes ; résultat détaillé à l'écran
$ sudo grep hardening_index /var/log/lynis-report.dat # l'indice, à noter avant et après
$ sudo grep -E '^(warning|suggestion)' /var/log/lynis-report.dat | head # les pistes d'amélioration
SRV-LINUX · indice de durcissement Lynis (sur 100) AvantAprès 58 79 050100 5 ports ouverts2 ports ouverts
Exemple de résultat : l'indice n'est pas une note absolue, mais il montre la progression et sert de preuve.

7.2 Les événements de sécurité à surveiller

SystèmeÉvénementCe qu'il peut révéler
DebianFailed password, Invalid user (journal de sshd)Force brute, recherche de comptes
DebianCommandes sudo (journalctl _COMM=sudo)Action d'administration inattendue
Windows4625 : échec d'ouverture de sessionForce brute, mot de passe testé
Windows4624 : ouverture de session réussieConnexion à une heure ou depuis un poste inhabituel
Windows4720 : compte créé ; 4728 / 4732 : membre ajouté à un groupeCompte caché, élévation de privilèges
Windows4740 : compte verrouilléAttaque en cours ou utilisateur bloqué
Windows1102 : journal de sécurité effacéUn attaquant efface ses traces : alerte immédiate

Les journaux d'un serveur compromis ne sont plus fiables : on les envoie en continu vers un serveur de journalisation (syslog, fiche B2-29) ou un SIEM comme Wazuh (fiche B3-13), où l'attaquant ne peut pas les effacer. Le durcissement se mesure avant et après, et se contrôle ensuite à intervalle régulier.

8. Vérifier et dépanner

Un durcissement mal appliqué a deux conséquences : il bloque les administrateurs (le cas le plus fréquent) ou il ne protège pas alors qu'on le croit actif. On vérifie donc toujours deux choses : l'accès légitime fonctionne, et l'accès illégitime échoue.

SymptômeCause probableVérification et correction
Permission denied (publickey) après durcissement SSHClé publique absente, ou droits trop ouverts sur ~/.ssh (sshd l'ignore)chmod 700 ~/.ssh, chmod 600 ~/.ssh/authorized_keys, propriétaire = l'utilisateur ; journal : journalctl -u ssh
Plus aucune connexion SSH après ufw enablePort 22 non autorisé avant l'activationConsole Proxmox de la VM, ufw allow …22… puis ufw status
Fail2ban ne bannit jamaisIl lit un fichier journal absentbackend = systemd dans la prison sshd ; fail2ban-client status sshd
Un collègue est banniMots de passe ratés depuis son postefail2ban-client set sshd unbanip … ; ajouter le VLAN de gestion à ignoreip
sshd -t affiche une erreurFaute de frappe dans le fichier de configurationCorriger avant de recharger : sinon le service ne redémarre pas
Mot de passe LAPS introuvableGPO LAPS non appliquée à l'OU de la machinegpresult /r sur la machine, lien de la GPO, Get-LapsADPassword

8.1 Entraîne-toi : les tickets du support

Tu es de permanence au support de Brocéliande Logistique pendant la semaine de durcissement. Six tickets arrivent : lis le message, observe le relevé, puis choisis la cause.

File d'attente du support6 tickets · un à la fois · l'explication s'affiche après ta réponse
Ticket n° 1De : collègue de l'équipe systèmePriorité haute
« J'ai activé le pare-feu sur SRV-LINUX il y a cinq minutes et ma session SSH s'est figée. Impossible de me reconnecter. L'intranet, lui, fonctionne. »
Historique des commandes tapées
sudo ufw default deny incoming
sudo ufw allow 443/tcp
sudo ufw enable

Quelle est la cause ?

Cause : la politique refuse tout en entrée ; seul le 443 a été ouvert, donc SSH est bloqué. Correction : se connecter par la console Proxmox de la VM, puis sudo ufw allow from 172.16.99.0/24 to any port 22 proto tcp. Règle d'or : autoriser l'accès d'administration avant ufw enable.

Ticket n° 2De : responsable sécuritéPriorité moyenne
« Fail2ban est installé sur SRV-LINUX depuis une semaine, avec le jail.local recopié de notre ancien serveur Debian 12, mais il n'a jamais banni personne, alors que les robots tapent toujours à la porte. »
Debian 13 relevéjail.local repris de Debian 12
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
$ ls /var/log/auth.log
ls: cannot access '/var/log/auth.log': No such file or directory

Quelle est la cause ?

Cause : « Total failed : 0 » et une liste de fichiers qui pointe vers un fichier absent : Fail2ban ne voit aucune tentative. Le jail.local hérité de Debian 12 force la lecture de /var/log/auth.log et remplace le réglage systemd fourni par le paquet Debian 13. Correction : retirer ce logpath et écrire backend = systemd dans la section [sshd] de /etc/fail2ban/jail.local, installer python3-systemd, puis sudo systemctl restart fail2ban.

Ticket n° 3De : administrateurPriorité haute
« Depuis que les mots de passe sont interdits en SSH, je ne peux plus me connecter à SRV-LINUX avec ma clé. Elle fonctionne pourtant sur les autres serveurs. »
Debian 13 console Proxmox
$ ls -ld /home/adm-lmartin/.ssh /home/adm-lmartin/.ssh/authorized_keys
drwxrwxrwx 2 adm-lmartin adm-lmartin 4096 .ssh
-rw-rw-rw- 1 adm-lmartin adm-lmartin  104 authorized_keys
$ journalctl -u ssh | tail -1
Authentication refused: bad ownership or modes for directory /home/adm-lmartin/.ssh

Quelle est la cause ?

Cause : n'importe qui pouvant écrire dans authorized_keys pourrait y ajouter sa propre clé ; sshd refuse donc ces fichiers (option StrictModes). Correction : chmod 700 ~/.ssh et chmod 600 ~/.ssh/authorized_keys.

Ticket n° 4Alerte de la supervisionPriorité haute
« Plus de 2 000 événements 4625 en une heure sur SRV-01, pour les comptes Administrateur, admin, compta… tous depuis la même adresse. »
Observateur d'événements SRV-01 · Sécurité
ID 4625  Échec d'ouverture de session d'un compte
  Nom du compte : Administrateur
  Type d'ouverture de session : 10 (RemoteInteractive)
  Adresse réseau source : 172.16.70.142

Que se passe-t-il et que faut-il corriger en priorité ?

Cause : type 10 = connexion Bureau à distance, des milliers de comptes essayés depuis 172.16.70.142, une adresse du VLAN 70 INVITES. Corrections : filtrer le RDP (pare-feu Windows et réseau : VLAN 99 seulement), stratégie de verrouillage des comptes, NLA activée, et traiter l'incident (poste invité à identifier, fiche B3-16).

Ticket n° 5Alerte du SIEMCritique
« Événement 1102 sur SRV-01 à 3 h 12 du matin, juste après une ouverture de session du compte svc-sauvegarde. »
Observateur d'événements SRV-01
ID 4624  Ouverture de session réussie · svc-sauvegarde · 03:11
ID 1102  Le journal d'audit a été effacé · svc-sauvegarde · 03:12

Comment interpréter ces deux événements ?

Cause : un logiciel de sauvegarde n'efface jamais le journal de sécurité ; la rotation normale ne génère pas l'événement 1102. Un attaquant qui possède le mot de passe de svc-sauvegarde efface ses traces. Réaction : isoler, désactiver le compte, conserver les preuves (copie du SIEM, où les événements sont déjà partis) et suivre la procédure d'incident (fiche B3-16).

Ticket n° 6De : technicien de proximitéPriorité basse
« Je dois me connecter en administrateur local sur PC-PAIE, mais aucun mot de passe LAPS n'apparaît dans l'AD pour cette machine. Pour PC-COMPTA, ça marche. »
PowerShell relevé
PS> Get-LapsADPassword -Identity PC-PAIE
(aucun résultat)
PS> Get-ADComputer PC-PAIE | Select DistinguishedName
CN=PC-PAIE,CN=Computers,DC=broceliande,DC=lan

Quelle est la cause la plus probable ?

Cause : une GPO ne peut pas être liée au conteneur par défaut CN=Computers ; PC-PAIE ne reçoit donc pas la stratégie LAPS. Correction : déplacer l'ordinateur dans l'OU des postes, puis gpupdate /force sur PC-PAIE ; le mot de passe apparaît au cycle suivant. Bonne pratique : rediriger les nouveaux ordinateurs vers une OU avec redircmp.

9. À l'examen et en entreprise

  • Prouver le durcissement : une mesure avant et après (indice Lynis, score PingCastle, liste des ports ouverts) vaut mieux que dix captures de configuration.
  • Justifier chaque réglage par un référentiel (ANSSI, CIS) et noter les écarts volontaires : « SSH ouvert depuis le VLAN 99 uniquement, besoin d'administration à distance ».
  • Montrer qu'on ne s'est pas coupé la main : procédure de secours (console Proxmox, compte de secours documenté, coffre-fort de mots de passe).
  • À l'écrit, les sujets demandent souvent d'analyser un extrait de journal (4625 en rafale, Failed password) et de proposer des mesures classées par priorité.

10. L'essentiel

  1. Durcir = réduire la surface d'attaque : services, comptes, logiciels, droits et interfaces exposés.
  2. Trois principes : moindre service, moindre privilège, défense en profondeur.
  3. On s'appuie sur un référentiel (ANSSI, CIS) et on justifie chaque écart.
  4. Debian : unattended-upgrades, services inutiles purgés, comptes nominatifs avec sudo.
  5. SSH : clés ed25519, PermitRootLogin no, PasswordAuthentication no, AllowGroups ; tester avec sshd -t.
  6. Fail2ban bannit une adresse après maxretry échecs dans findtime, pendant bantime ; sur Debian 13, backend = systemd.
  7. Pare-feu local : tout refuser en entrée, ouvrir le strict nécessaire, SSH avant ufw enable.
  8. Windows : rôles minimaux, comptes d'administration séparés, verrouillage, LAPS, pare-feu sur 3 profils, Defender, SMBv1 absent.
  9. Mesurer avant et après : Lynis (Linux), PingCastle (AD).
  10. Surveiller 4625, 4720, 4732, 4740, 1102 et les échecs SSH, journaux envoyés hors du serveur.
DURCIRun serveur Principesmoindre service · privilègedéfense en profondeur Debianunattended-upgrades · sudoservices purgés · UFW SSHclés · root interditFail2ban (systemd) Windowsrôles minimaux · LAPSpare-feu · Defender · SMBv1 MesurerLynis · PingCastleavant / après Surveiller4625 · 4720 · 4732 · 1102journaux hors du serveur
La fiche en une image : à refaire de mémoire, sur une feuille, avant de passer aux exercices.

Les commandes clés

Pour…Commandes
Mises à jour automatiquesapt install unattended-upgrades · dpkg-reconfigure -plow unattended-upgrades
Voir ce qui écoutess -tlnp · systemctl disable --now SERVICE · apt purge PAQUET
Clé SSHssh-keygen -t ed25519 · ssh-copy-id · sshd -t puis systemctl reload ssh
Fail2banfail2ban-client status sshd · fail2ban-client set sshd unbanip IP
Pare-feu localufw default deny incoming · ufw allow from RÉSEAU to any port 22 proto tcp · ufw enable
Contrôles WindowsGet-NetFirewallProfile · Get-MpComputerStatus · Get-LapsADPassword
Auditlynis audit system · PingCastle (healthcheck AD)

Tout cela tient sur une page : utilise le bouton Mémo à imprimer en haut de la fiche.

La pratiqueLe quiz noté pour vérifier tes acquis, les exercices à rendre à ton professeur, puis le TP au labo sur tes machines virtuelles.

11. Quiz noté

8 questions · 10 minutesRéponds à toutes les questions, puis valide. Seule ta première tentative est enregistrée : elle compte dans ton suivi. Ensuite, tu peux t'entraîner autant que tu veux.

1. Quelle mesure réduit le plus directement la surface d'attaque d'un serveur ?

2. Que provoque PasswordAuthentication no dans la configuration de sshd ?

3. Avec maxretry = 3, findtime = 10m et bantime = 1h, que fait Fail2ban ?

4. Avant de recharger SSH après une modification, que faut-il faire ?

5. À quoi sert Windows LAPS ?

6. Que signale l'événement Windows 4625 ?

7. Que mesure l'outil Lynis ?

8. Pourquoi envoyer les journaux de sécurité vers un serveur dédié ?

12. Exercices : à toi de répondre

Écris ta réponse sous chaque énoncé et envoie-la à ton professeur. Quand il l'a validée, le corrigé s'affiche à la place du cadenas ; s'il te la renvoie « à revoir », lis son commentaire et corrige.

Exercice 1 – Comprendre (SIO2)

Voici la sortie de sudo ss -tlnp sur un serveur Debian dont le seul rôle est de publier l'intranet en HTTPS. Pour chaque ligne, indique si tu gardes, restreins ou supprimes, et pourquoi.

Debian 13 ss -tlnp
LISTEN 0.0.0.0:22     users:(("sshd"))
LISTEN 0.0.0.0:443    users:(("nginx"))
LISTEN 0.0.0.0:3306   users:(("mariadbd"))
LISTEN 0.0.0.0:111    users:(("rpcbind"))
LISTEN 0.0.0.0:631    users:(("cupsd"))

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 2 – Configurer (SIO2)

Écris le contenu du fichier de durcissement SSH et de jail.local pour respecter ces exigences : connexion par clé seulement, root interdit, groupe autorisé ssh-admins, 3 essais maximum ; bannissement de 2 heures après 4 échecs en 15 minutes, sauf pour le VLAN de gestion 172.16.99.0/24.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 3 – Dépanner (SIO2)

Après le passage de ton collègue, plus personne ne peut ouvrir de session SSH sur SRV-LINUX, ni par mot de passe ni par clé, et systemctl status ssh affiche failed. Le fichier 90-durcissement.conf contient la ligne PermitRootLogin flase. Explique ce qui s'est passé, comment reprendre la main et comment éviter que cela se reproduise.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 4 – Concevoir (SIO2)

Le responsable de Brocéliande Logistique te demande un plan de durcissement pour SRV-01 (Windows Server 2025, AD, DNS, DHCP) et SRV-LINUX (Debian 13, intranet), en huit mesures classées par priorité, chacune justifiée par un risque et rattachée à un référentiel. Indique aussi comment tu mesureras le résultat.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

13. Au labo : durcir SRV-LINUX et SRV-01, mesure à l'appui

Objectif

Durcir les deux serveurs de ton pool Proxmox en suivant la fiche, et prouver le résultat : indice Lynis avant et après, ports ouverts avant et après, tests d'accès légitimes et illégitimes. Durée : 2 h 30. Tes machines et leurs adresses sont dans Mes serveurs et VM ; les adresses ci-dessous sont celles de Brocéliande, remplace-les par les tiennes.

MachineSystèmeRôle dans le TP
SRV-LINUXDebian 13Serveur à durcir (exemple : 172.16.50.11)
SRV-01Windows Server 2025Contrôleur de domaine à contrôler et durcir
PC-ADMINWindows 11 ProPoste d'administration : client SSH, génération de la clé
Console Proxmox–Accès de secours si tu te bloques

Ce que tu vas obtenir

  • Une mesure avant/après : indice Lynis et liste des ports ouverts.
  • Des mises à jour de sécurité qui s'installent seules.
  • Un accès SSH par clé seulement, root interdit, protégé par Fail2ban et le pare-feu local.
  • Un contrôleur de domaine vérifié : pare-feu, Defender, SMBv1, comptes d'administration, audit.

1 Mesurer l'état de départ

Avant de toucher à quoi que ce soit, prends un instantané Proxmox de SRV-LINUX (retour arrière possible), puis note l'état initial.

Debian 13 SRV-LINUXétat initial
$ sudo ss -tlnp | tee ~/avant-ports.txt
$ sudo apt install lynis && sudo lynis audit system --quick
$ sudo grep hardening_index /var/log/lynis-report.dat # note cet indice dans ton compte rendu
$ sudo cp /var/log/lynis-report.dat ~/lynis-avant.dat

2 Mises à jour et services

  1. Installe et active unattended-upgrades (partie 3.1), puis vérifie avec sudo unattended-upgrade --dry-run --debug.
  2. Pour chaque ligne de ~/avant-ports.txt, décide : garder, restreindre ou supprimer. Supprime au moins un paquet inutile (rpcbind, cups… selon ta VM) et note ta décision.

3 Compte nominatif et clé SSH

  1. Crée le compte adm- suivi de ton nom, ajoute-le aux groupes sudo et ssh-admins (partie 3.3).
  2. Sur PC-ADMIN, génère une clé ed25519 avec phrase de passe et copie la clé publique sur SRV-LINUX (partie 4.1).
  3. Teste : ssh adm-tonnom@ADRESSE doit demander la phrase de passe de la clé, pas le mot de passe du compte.

4 Durcir SSH

Crée /etc/ssh/sshd_config.d/90-durcissement.conf (partie 4.2). Garde ta session ouverte, complète d'abord ces commandes, puis applique.

Écris la commande qui correspond à chaque besoin, puis vérifie chaque ligne avec ✓.

Tester la syntaxe ›
Recharger SSH ›
Voir la config appliquée ›
État de la prison sshd ›

Depuis une seconde fenêtre : la connexion par clé fonctionne, ssh root@ADRESSE est refusé, et ssh -o PubkeyAuthentication=no adm-tonnom@ADRESSE répond Permission denied (publickey).

5 Fail2ban et pare-feu local

  1. Installe Fail2ban avec la configuration de la partie 4.3, sans mettre ton poste dans ignoreip pour l'instant.
  2. Depuis une autre VM (Debian ou IPFire du pool), rate volontairement quatre connexions SSH : sudo fail2ban-client status sshd doit montrer l'adresse bannie. Débannis-la ensuite.
  3. Configure UFW (partie 5) : SSH depuis ton poste d'administration seulement, HTTP et HTTPS pour tous, SSH autorisé avant ufw enable.

6 Mesurer de nouveau

Debian 13 SRV-LINUXétat final
$ sudo ss -tlnp | tee ~/apres-ports.txt && diff ~/avant-ports.txt ~/apres-ports.txt
$ sudo lynis audit system --quick && sudo grep hardening_index /var/log/lynis-report.dat # compare avec l'étape 1

7 Contrôler et durcir SRV-01

  1. Exécute les contrôles PowerShell de la partie 6 et note chaque résultat (pare-feu, Defender, SMBv1, membres des groupes d'administration).
  2. Dans la GPO « Default Domain Policy », fixe une longueur minimale de 14 caractères et un verrouillage après 10 échecs pendant 15 minutes.
  3. Active l'audit des ouvertures de session et de la gestion des comptes (auditpol /get /category:* pour vérifier), puis provoque un échec de connexion et retrouve l'événement 4625.

8 Valider : le cahier de recette

N°TestCommandeRésultat attenduOK
1L'indice de durcissement a progrességrep hardening_index avant / aprèsIndice final supérieur à l'indice initial
2Seuls les ports utiles écoutentss -tlnp22 et 80/443, rien d'autre sur 0.0.0.0
3Root ne peut pas se connecterssh root@ADRESSERefusé
4Le mot de passe est refusé en SSHssh -o PubkeyAuthentication=no …Permission denied (publickey)
5Fail2ban bannitfail2ban-client status sshd après 4 échecsL'adresse de test est dans « Banned IP list »
6Le pare-feu local est actifufw status verboseStatus: active, deny (incoming)
7SRV-01 : pare-feu et DefenderGet-NetFirewallProfile, Get-MpComputerStatus3 profils True, protection en temps réel True
8L'échec de connexion est tracéObservateur d'événements, journal SécuritéÉvénement 4625 avec le compte et la source
Suis ta progressionConnecte-toi pour marquer les ressources comme terminées et retrouver ton avancement.
Se connecter