Fiches réflexes — gérer un incident sur le lab (exercice d’incident de la S7)

Document autonome. Préparation de l’exercice d’incident du vendredi 08/01/2027 (séance S7, réalisation R1, compétence 16 « identifier, qualifier et résoudre un incident ») : le formateur provoque une panne inconnue sur le lab ; il faut identifier, qualifier, résoudre ou escalader, puis écrire un rapport d’incident. Tâche 7.14 du suivi. Le modèle de rapport est dans Modele-rapport-incident.md. Les engagements (99 %, réponse en moins de 2 s, reprise en 4 h) et l’escalade sont ceux du contrat de service (dat/contrat-de-service.md). Adresses : Documentation-pfSense.md §2.

Dernière mise à jour : 12/11/2026 (fiches 4.12 à 4.17 : les 6 règles ajoutées depuis le 02/11 ; 11 services sondés)


Sommaire

§Contenu
1La méthode en cinq temps
2Les deux premières minutes, quelle que soit la panne
3Qualifier : gravité, impact, escalade
4Les fiches, une par alerte
5Quand aucune alerte n’arrive : la plainte d’un utilisateur
6Les pièges déjà rencontrés
7S’entraîner avant le 08/01

1 · La méthode en cinq temps

  IDENTIFIER ──► QUALIFIER ──► RÉSOUDRE ou ESCALADER ──► VÉRIFIER ──► RAPPORTER
  quoi, depuis    gravité,       une hypothèse à la fois,   le service      symptôme → cause →
  quand, où ?     impact,        la plus probable d'abord   est revenu ?    correction → prévention
                  niveau
TempsQuestionCe qu’on note (pour le rapport)
IdentifierQu’est-ce qui ne marche pas, depuis quand, pour qui ?heure du 1er signe (mail, sonde, plainte), message exact
QualifierEst-ce grave ? Combien d’utilisateurs ? Qui prévenir ?gravité, services touchés, niveau d’escalade
Résoudre ou escaladerQuelle est la cause ?chaque hypothèse testée, la commande, le résultat
VérifierLe service est-il revenu, vu comme un utilisateur ?heure du retour, mail [RESOLVED], sonde à 1
RapporterQue retenir pour que ça ne recommence pas ?cause racine, mesure préventive, délai de reprise

Noter l’heure de chaque étape au fil de l’eau (un fichier texte ouvert à côté suffit). Le délai de reprise (engagement : 4 h) se mesure entre l’alerte critique et le retour de la sonde à 1. Sans heures, pas de rapport.

Ne rien changer avant d’avoir regardé. Une correction faite au hasard efface les traces de la cause, et peut aggraver la panne (H-39 : relancer un cluster sans lire l’état des nœuds).


2 · Les deux premières minutes, quelle que soit la panne

#GestePourquoi
1Lire le mail d’alerte en entier, y compris le champ Errorle titre peut tromper : H-66 (« Prometheus » accusé, la vraie cause était Error 1047 de Galera)
2Ouvrir le tableau « Lab BTS — Production » : section Services, puis Machinesen un écran : quel service, quelle machine, depuis quand
3Se demander ce qui touche plusieurs machines à la foistoutes les VM lentes en même temps = le dessous (NAS de l’école, H-61 ; hyperviseur, H-67), pas une VM
4Regarder les journaux récents (section Journaux, ou la requête ci-dessous)« qu’est-ce qui a changé ? » : un service arrêté, une connexion, une erreur
5Vérifier d’où l’on teste et sur quelle machine on tape (l’invite utilisateur@machine)H-57 et H-63 : la commande partie sur la mauvaise machine

Journaux des 15 dernières minutes, par machine (sur srv-supervision, compte en lecture seule) :

mariadb -h 127.0.0.1 -u grafana_lecture -p -e "SELECT hote, programme, gravite, LEFT(message,120) FROM syslog.journaux WHERE recu_le > UTC_TIMESTAMP() - INTERVAL 15 MINUTE AND gravite <= 4 ORDER BY recu_le DESC LIMIT 30;"

les erreurs (gravite 3) et avertissements (4) récents, avec la machine et le programme. Les heures de la base sont en UTC (heure de Paris − 1 h en hiver).


3 · Qualifier : gravité, impact, escalade

GravitéExemplesImpactEscalade (contrat de service §5)
Critiquesite ou DNS injoignable, cluster incomplet, machine éteinte, sauvegarde manquée, rafale de mots de passe faux, supervision aveugleun service rendu aux utilisateurs est coupé ou menacé maintenantniveau 1 tout de suite ; niveau 2 (responsable) après 2 h ; niveau 3 (DSI) avant 4 h
Avertissementdisque, mémoire, processeur, stockage de sauvegarde, site lentle service marche, mais risque de tomberniveau 1, dans la journée
Informationdisponibilité sur 30 jours sous 99 %engagement mensuel en dangerbilan mensuel

Trois questions pour qualifier : combien d’utilisateurs ou de services sont touchés ? Le service est-il coupé ou dégradé ? Y a-t-il un contournement (un nœud de secours, un second serveur web) ? Un service redondé qui perd un élément est dégradé, pas coupé : on le répare sans urgence, mais on le répare (il n’y a plus de secours).


4 · Les fiches, une par alerte

Chaque fiche : ce que ça veut dire, puis quoi vérifier, dans l’ordre, les causes probables, et le retour à la normale. Toutes les machines s’ouvrent par Termix (bastion 10.0.30.12) ; en dernier recours, la console Proxmox ne dépend d’aucun réseau.

4.1 Service injoignable (critique)

Sens : une sonde « comme un utilisateur » échoue depuis 2 min. L’étiquette service dit lequel (11 services au 12/11) : site web, GLPI, site public (par Internet), Matomo, PBS, DNS de l’AD, DNS de pfSense, LogAnalyzer, Termix, Pangolin, Wazuh.

OrdreVérifierCommande / endroitSi oui →
1La machine du service répond-elle ?tableau, section Machines ; sinon fiche 4.2fiche 4.2
2Site : HAProxy voit-il ses serveurs ?page d’état http://10.0.10.5:8404serveurs rouges → étape 3 ; tout rouge en base → fiche 4.3
3Site : le service tourne-t-il ?sur srv-ha : sudo systemctl status haproxy ; sur srv-web-0x : sudo systemctl status apache2arrêté → sudo systemctl start … puis relire le statut
4Site : configuration cassée ?sudo haproxy -c -f /etc/haproxy/haproxy.cfgerreur → corriger la ligne citée, recontrôler, puis sudo systemctl reload haproxy
5DNS de l’ADdepuis poste-win11 : Resolve-DnsName www.sio.internal -Server 10.0.30.10 ; sur l’AD : Get-Service DNSservice arrêté → Start-Service DNS
6DNS de pfSenseStatus → Services : unboundarrêté → bouton Start
7Termixsur srv-docker : docker psconteneur absent ou unhealthy → docker start termix (nom exact : docker ps -a)
8Un filtrage a-t-il changé ?Status → System Logs → Firewall : refus récents vers le servicerègle désactivée ou modifiée → la remettre (historique : Diagnostics → Backup & Restore → Config History)

Retour : mail [RESOLVED], sonde à 1, et le service testé depuis un poste (navigateur sur poste-win11).

4.2 Machine injoignable (critique)

Sens : Prometheus ne lit plus l’exporteur de la machine depuis 2 min. Ce n’est pas forcément la machine qui est tombée : ça peut être seulement son exporteur, ou le réseau entre les deux.

OrdreVérifierCommande / endroit
1La VM tourne-t-elle ?Proxmox : état de la VM (running ?) ; sinon Start et chercher pourquoi elle s’est arrêtée (Tasks, journaux)
2Répond-elle sur le réseau ?depuis le bastion : ping -c3 <adresse> puis ssh
3Seul l’exporteur est-il arrêté ?Linux : sudo systemctl status prometheus-node-exporter ; Windows : Get-Service windows_exporter
4La carte réseau et l’étiquette VLAN sont-elles bonnes ?Proxmox → Hardware → net0 : tag, case Disconnect (test 7.11)
5Le pare-feu bloque-t-il ?journal du pare-feu : refus depuis 10.0.30.14 vers la machine

Causes vues : exporteur arrêté (test du 29/10), VM éteinte (test du 30/10), carte débranchée (test 7.11).

4.3 Galera incomplet (critique)

Sens : le cluster a moins de 3 nœuds. Avec 2 nœuds, le site marche (mode dégradé) ; avec 1 seul, il refuse d’écrire (non-Primary) et le site tombe. Si Grafana tombe aussi, seule l’alerte « Supervision aveugle » arrive, avec Error 1047 (H-66).

Sur chaque nœud (srv-mysql-01, 02, 03) :

sudo mariadb -e "SHOW STATUS WHERE Variable_name IN ('wsrep_cluster_size','wsrep_cluster_status','wsrep_local_state_comment','wsrep_ready');"
ConstatCause probableAction
un nœud ne répond pasVM éteinte, MariaDB arrêtésudo systemctl status mariadb ; sudo journalctl -u mariadb -n 50 ; sudo systemctl start mariadb → il se resynchronise seul
le survivant est non-Primarydeux nœuds coupés sans prévenir (réseau)rétablir le réseau des deux autres : le cluster se reforme seul (test 7.11, moins de 10 s)
les trois sont arrêtésarrêt complet ne rien forcer : lire sudo cat /var/lib/mysql/grastate.dat sur les trois, amorcer seulement le nœud safe_to_bootstrap: 1 (le seqno le plus haut) avec sudo galera_new_cluster, puis démarrer les autres (H-39, MO-2 §8.1)

Retour : 3, Primary, Synced sur les trois nœuds, site à 200.

4.4 Sauvegarde trop ancienne (critique)

Sens : une VM n’a pas de sauvegarde de moins de 26 h (une nuit manquée).

OrdreVérifierOù
1La tâche de 02:00 a-t-elle tourné, et comment s’est-elle terminée ?Proxmox : Datacenter → Backup et Tasks ; PBS https://10.0.30.13:8007 : Tasks ; mail de compte rendu de PBS
2PBS est-il en ligne et joignable par l’hyperviseur ?sonde PBS ; redirection PVE_HOST → SRV_PBS : 8007 dans pfSense (seul flux entrant)
3Le datastore a-t-il de la place ?PBS → Datastore ; fiche 4.8
4La VM est-elle toujours dans le pool sauvegardé ?Proxmox : pool SIO2527_Axel

Action : relancer une sauvegarde de la VM à la main (Backup now) une fois la cause corrigée. Retour : âge < 26 h.

4.5 Disque presque plein (avertissement, > 85 %)

df -h
sudo du -xh / --max-depth=2 2>/dev/null | sort -h | tail -15
journalctl --disk-usage

Causes probables : journaux qui grossissent (un programme trop bavard, H-34), paquets en cache (sudo apt clean), fichier de test oublié. Sur srv-supervision, vérifier aussi que la purge des journaux tourne (systemctl list-timers purger-journaux.timer). Ne jamais supprimer dans /var/lib/mysql à la main.

4.6 Mémoire saturée (avertissement, > 90 % pendant 15 min)

D’abord vérifier que ce n’est pas l’hyperviseur (H-67) : si la mémoire totale de la VM a baissé, c’est le ballooning de Proxmox, pas un programme.

free -h
ps aux --sort=-%mem | head -8

Windows : Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 8 Name, @{n='Mo';e={int}}. Action : relancer le service fautif s’il fuit ; sinon, la VM manque réellement de mémoire (à augmenter dans Proxmox, en tenant compte de l’hyperviseur partagé).

4.7 Processeur saturé (avertissement, > 90 % pendant 15 min)

ps aux --sort=-%cpu | head -8

Windows : Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 Name, CPU. Causes déjà vues : analyse de Windows Defender et défragmentation planifiée sur les VM Windows (étape 49.1). Un processus inconnu qui consomme tout peut aussi être un signe d’intrusion : noter son nom, son compte, sa ligne de commande avant de l’arrêter.

4.8 Datastore PBS presque plein (avertissement, > 80 %)

PBS → Datastore → Summary et Content. Vérifier que l’élagage (Prune, 7 jours) et le ramasse-miettes (Garbage Collection) tournent chaque nuit (Tasks). Une VM qui a beaucoup écrit (les VM Windows, étape 49.1) fait grossir le datastore. Action : réduire la rétention en dernier recours, après accord (niveau 2).

4.9 Connexions refusées en rafale (critique, ≥ 5 refus en 5 min sur une machine)

Sens : quelqu’un se trompe de mot de passe à répétition, ou essaie d’entrer. À traiter comme un incident de sécurité tant que ce n’est pas expliqué.

mariadb -h 127.0.0.1 -u grafana_lecture -p -e "SELECT recu_le, hote, LEFT(message,160) FROM syslog.journaux_auth WHERE recu_le > UTC_TIMESTAMP() - INTERVAL 30 MINUTE AND (message LIKE '%Failed password%' OR message LIKE '%invalid user%' OR message LIKE 'EventID 4625%' OR message LIKE 'EventID 4740%') ORDER BY recu_le DESC LIMIT 30;"
QuestionOù regarder dans le résultat
Quelle machine, quel compte ?hote, « for <compte> » ou « Nom du compte »
D’où ?« from <adresse> » (Linux), « Adresse du réseau source » (Windows)
Un compte verrouillé (4740) ? une connexion réussie juste après ?4740 ; puis chercher Accepted / 4624 du même compte

Action : si la source est inconnue ou extérieure, la bloquer (pfSense, ou sshguard déjà actif sur pfSense) ; changer le mot de passe du compte visé ; prévenir le niveau 2 (incident de sécurité). Si c’est une faute de frappe, le noter et clore.

4.10 Supervision aveugle (Grafana ne calcule plus les alertes) (critique)

Sens : Grafana n’arrive plus à exécuter ses requêtes : aucune autre alerte ne peut arriver tant que ça dure. Lire le champ Error du mail :

ErrorCauseAction
connexion refusée / délai dépassé vers PrometheusPrometheus arrêté, ou srv-metriques éteintsur srv-metriques : sudo systemctl status prometheus, curl -s http://10.0.30.14:9090/-/healthy
Error 1047 … WSREP has not yet prepared nodela base de Grafana (dans Galera) est indisponible : perte de quorumfiche 4.3 ; le site est sûrement en panne aussi

Pendant ce temps, surveiller à la main (sondes dans Prometheus, page d’état HAProxy).

4.11 Site lent (avertissement, > 2 s pendant 5 min)

OrdreVérifierCause déjà vue
1Toutes les VM sont-elles lentes en même temps ? (latence disque, tableau section Machines)le NAS de l’école sature (H-61)
2Un nœud Galera est-il compressé par l’hyperviseur ?ballooning (H-67)
3HAProxy : un serveur web est-il tombé (tout passe sur l’autre) ?page :8404
4Un serveur web sature-t-il (processeur, mémoire) ?fiches 4.6 et 4.7

4.12 lsyncd arrêté (avertissement, 5 min)

Sens : la recopie de wp-content (et des fichiers de GLPI et Matomo) de srv-web-01 vers srv-web-02 est arrêtée : le serveur de secours peut servir un site différent (H-84, étape 64).

OrdreVérifierCommande / endroit
1le service sur srv-web-01systemctl status lsyncd ; le relancer : sudo systemctl restart lsyncd
2la cause dans son journaljournalctl -u lsyncd -n 50 (clé SSH confinée, srv-web-02 joignable ?)

4.13 Copie hors site trop ancienne (avertissement, > 30 h pendant 10 min)

Sens : la dernière copie d’au moins une VM sur le NAS d’Axel date de plus de 30 h : la synchronisation de 04:00 n’a pas tourné ou a échoué (étape 65 ; éprouvée par le test T30 le 11/11).

OrdreVérifierCommande / endroit
1la tâche de synchronisation s3-nuitinterface de PBS (srv-pbs) → Tâches : statut de la dernière synchronisation vers s3-maison
2l’accès au S3la règle « Copie hors site injoignable » est-elle aussi en alerte ? (fiche 4.15)

4.14 VM absente de la copie hors site (avertissement, 1 h)

Sens : une VM est sauvegardée dans le lab mais n’existe pas sur le NAS (nouvelle VM, ou synchronisation incomplète). Normal pour une machine nouvelle : la copie de la nuit suivante la rattrape et l’alerte se résout seule (test T30).

4.15 Copie hors site injoignable (avertissement, 15 min)

Sens : la sonde signée de srv-pbs (toutes les 5 min) n’atteint plus le S3 du NAS : Internet, la box, le reverse proxy du NAS, l’application SeaweedFS ou les clés (étape 65.2 ; test T30).

OrdreVérifierCommande / endroit
1le NAS et son application SeaweedFSchez Axel (TrueNAS → Apps)
2la résolution du nom depuis srv-pbsgetent hosts <nom-du-S3> (une ligne parasite dans /etc/hosts fausserait tout)

4.16 Intrusion détectée (Wazuh) (critique)

Sens : Wazuh a levé une alerte de niveau 10 ou plus, ou une création de compte. L’étiquette donne la machine et la règle. Toutes ne sont pas des attaques : une vulnérabilité « High » d’un poste neuf, ou un ajout au groupe Administrateurs fait par LAPS, sont aussi de niveau 10 et plus (11/11).

OrdreVérifierCommande / endroit
1le détail de l’alertetableau de bord de Wazuh (https://10.0.30.16) → Threat Hunting, filtrer sur l’agent et la règle
2attendu ou non ?une action du lab à la même heure (installation, GPO, test) ; sinon, traiter comme un incident (§2 et §3)

4.17 Serveur retiré par HAProxy (avertissement, 5 min)

Sens : HAProxy a retiré un serveur web (ou un nœud Galera) de son pool : son contrôle de santé échoue. Le site reste servi par l’autre ; les retraits pendant les sauvegardes durent 78 s au plus et ne déclenchent rien (étape 68).

OrdreVérifierCommande / endroit
1quel serveurpage de statistiques de HAProxy (http://10.0.10.5:8404)
2son service websystemctl status apache2 sur le serveur retiré ; pour un nœud Galera, la fiche 4.3

5 · Quand aucune alerte n’arrive : la plainte d’un utilisateur

Une panne peut ne déclencher aucune alerte (ce que la supervision ne mesure pas). On part alors du poste qui se plaint, et on remonte couche par couche :

CoucheTest depuis le poste (poste-win11)Résultat attendu
Adresseipconfig /allune adresse en 10.0.40.x, passerelle et DNS 10.0.40.1
Passerelleping 10.0.40.1réponse
NomResolve-DnsName www.sio.internalune adresse
PortTest-NetConnection www.sio.internal -Port 443TcpTestSucceeded : True
Applicationle navigateurla page s’affiche

La première couche qui échoue désigne le coupable. Un refus immédiat = une règle de rejet ; une attente qui finit en délai dépassé = un blocage silencieux ou une machine absente (méthode du DAT §9.4). Ouverture de session refusée sur le domaine : heure du poste et de l’AD (Kerberos refuse plus de 5 min d’écart), compte verrouillé (4740).


6 · Les pièges déjà rencontrés

PiègeSymptômeOù c’est documenté
Commande sur la mauvaise machine« rien ne se passe », ou fichier créé au mauvais endroitH-57, H-63
Alerte d’avertissement plus courte que l’attentepanne réelle, aucun mailH-58
L’hôte ou le stockage ralentit touttoutes les VM lentes à la foisH-61, H-67
Le titre du mail accuse le mauvais coupable« Prometheus ne répond plus » alors que c’est GaleraH-66
Relancer un cluster sans lire l’étatdonnées perdues, ou second clusterH-39
Tester une règle TCP avec pingconclusion fausseMO-13 §8.4
Coupure de l’accès au lab depuis le PC« tout est en panne » vu de chez soiH-60 : vérifier depuis le bastion

7 · S’entraîner avant le 08/01

Pannes plausibles (exemples pour s’entraîner, pas une liste de ce que fera le formateur) : un service arrêté (apache2, haproxy, mariadb, unbound), une VM éteinte, une règle pfSense désactivée, une carte réseau débranchée ou une mauvaise étiquette VLAN, un disque rempli, un compte verrouillé, une heure décalée.

Déjà vécues et documentées, avec leurs preuves : arrêt de Termix, exporteur arrêté, arrêt réel de srv-web-02, nœud Galera arrêté, perte de quorum (test 7.11 : un exemple de rapport rempli est dans le modèle), Prometheus arrêté, NAS saturé (H-61).

 Le modèle de rapport ouvert, un fichier de notes horodatées prêt
 Accès vérifiés le matin : Termix, Grafana, pfSense, Proxmox, page d'état HAProxy
 Boîte de l'administrateur ouverte (les mails d'alerte)
 Ce document et le Troubleshooting sous la main
 Règle d'or : regarder → une hypothèse → la tester → noter → corriger → vérifier comme un utilisateur

La règle à retenir en une phrase : on note l’heure, on lit l’alerte en entier, on teste une hypothèse à la fois en partant de ce qui touche le plus de monde, et on ne déclare la panne résolue qu’une fois le service revu comme un utilisateur.