WatchTower

Projet personnel · DozyLab

WatchTower est l’application web que j’ai développée pour piloter mon laboratoire depuis une seule console : un registre de l’infrastructure, la lecture des services en direct (virtualisation, sauvegardes, annuaire, DNS, supervision, sécurité) et les gestes d’administration courants, chacun confirmé avant d’être exécuté. Cette page en présente chaque écran. Les captures montrent la version en service, alimentée par un relevé en lecture seule des données du laboratoire au 12 novembre 2026 ; les adresses IP, les noms de domaine internes et les comptes y sont masqués.

Ce que c’est

Un registre et une console, pas un tableau de bord de plus.

Le laboratoire compte trois hyperviseurs Proxmox VE, seize machines virtuelles et conteneurs, un pare-feu, un commutateur et une quinzaine de services, chacun avec sa propre interface. WatchTower les réunit : il interroge chaque service par son API, avec un compte dédié, et présente l’ensemble dans une navigation unique, classée par domaine.

Chaque valeur affichée porte son origine : l’inventaire (ce que le registre déclare), une décision (ce que j’ai tranché), une mesure (ce qu’un collecteur a observé, avec son heure) ou « à compléter ». Rien n’est inventé : une source injoignable s’affiche comme telle, une mesure trop ancienne est signalée, et une liste partielle n’est jamais présentée comme un total.

Les écrans sont en lecture par défaut. Les modifications (créer un hôte proxy, un compte de l’annuaire, une étendue DHCP, acquitter un problème) passent par un formulaire et une confirmation explicite.

Vue d’ensemble de WatchTower : navigation par domaine à gauche, indicateurs du cluster, état des trois nœuds Proxmox et problèmes relevés.Vue d’ensemble de WatchTower : navigation par domaine à gauche, indicateurs du cluster, état des trois nœuds Proxmox et problèmes relevés.
La vue d’ensemble : à gauche, la navigation par domaine ; au centre, les indicateurs du cluster (3 nœuds en ligne, 16 charges actives, 67,5 % de mémoire utilisée), l’état de chaque nœud et les problèmes remontés par Proxmox.

Pilotage

L’état général, le schéma de l’infrastructure et les alertes.

Vue d’ensemble

La page d’accueil réunit un bandeau d’indicateurs (nœuds en ligne, machines et conteneurs actifs, mémoire du cluster, alertes non lues, dernière sauvegarde), l’état des nœuds Proxmox, les problèmes détectés et les dernières alertes. Les blocs se réordonnent ou se masquent depuis les paramètres.

Suite de la vue d’ensemble : liste des problèmes Proxmox, tâches en erreur et dernières alertes Suricata.Suite de la vue d’ensemble : liste des problèmes Proxmox, tâches en erreur et dernières alertes Suricata.
Suite de la page : problèmes relevés, tâches en erreur et dernières alertes reçues.
Vue d’ensemble de WatchTower en thème sombre.
La même page en thème sombre.

Topologie

Le schéma de l’infrastructure se lit sous trois angles : la segmentation (quel équipement et quel service dans quel VLAN), l’hébergement (quel hyperviseur porte quelle machine) et les dépendances de service. C’est le moteur du schéma réseau de la page Homelab de ce portfolio, alimenté ici par les sources du laboratoire. L’en-tête indique, pour chaque source, sa fraîcheur et sa couverture : une liaison documentée n’est pas présentée comme une liaison vérifiée.

Topologie, onglet Segmentation : état des sources et début du schéma réseau.Topologie, onglet Segmentation : état des sources et début du schéma réseau.
Onglet Segmentation : état et couverture des sources, puis le schéma.
Topologie : schéma des hyperviseurs et des machines hébergées.Topologie : schéma des hyperviseurs et des machines hébergées.
Le schéma : les trois hyperviseurs et les machines qu’ils hébergent.
Topologie, onglet Hébergement.Topologie, onglet Hébergement.
Onglet Hébergement.
Topologie, onglet Dépendances de service.Topologie, onglet Dépendances de service.
Onglet Dépendances de service.

Alertes

Une boîte de réception conserve les bulletins quotidiens (SOC, CVE, homelab), les incidents et les retours à la normale, même sans notification activée. Les envois vers Discord, Telegram ou en notification du navigateur sont optionnels ; les incidents poussés sont plafonnés à dix par heure, le reste attend dans la boîte.

Boîte de réception des alertes de WatchTower, filtrable par catégorie.Boîte de réception des alertes de WatchTower, filtrable par catégorie.
La boîte de réception, filtrable par catégorie ; ici, des incidents remontés par la sonde Suricata.

Mode TV et répertoire des services

Le mode TV affiche la synthèse en plein écran, sans défilement, pour un écran laissé allumé. Le répertoire liste les dix-sept services par domaine, avec une recherche.

Mode TV de WatchTower : indicateurs du cluster en grand format.Mode TV de WatchTower : indicateurs du cluster en grand format.
Mode TV : les indicateurs en grand format.
Répertoire des services de WatchTower, classés par domaine.Répertoire des services de WatchTower, classés par domaine.
Le répertoire des services.

Infrastructure

Virtualisation, sauvegardes et contrôleur de domaine.

ProxPanel

ProxPanel, l’interface d’administration Proxmox du laboratoire, s’ouvre dans un onglet de WatchTower sans quitter la console. Les hôtes et les identifiants Proxmox restent gérés par ProxPanel : WatchTower ne les recopie pas.

Proxmox Backup Server

Trois onglets en lecture seule. La vue d’ensemble donne la couverture des sauvegardes par invité et par nœud, avec le nombre de sauvegardes vérifiées ; « Tâches » liste les dernières tâches du serveur ; « Retards » compare l’âge de la dernière sauvegarde de chaque invité à un seuil réglable.

PBS, vue d’ensemble : couverture des sauvegardes, sauvegardes visibles et vérifiées, répartition par nœud.PBS, vue d’ensemble : couverture des sauvegardes, sauvegardes visibles et vérifiées, répartition par nœud.
Vue d’ensemble : 16 invités, 176 sauvegardes visibles dont 144 vérifiées, et la répartition par nœud.
PBS, onglet Retards : âge de la dernière sauvegarde de chaque invité comparé au seuil.PBS, onglet Retards : âge de la dernière sauvegarde de chaque invité comparé au seuil.
Onglet Retards : le 12 novembre, les dernières sauvegardes dataient de plus de 24 heures et sont donc signalées.

Windows Server

Le contrôleur de domaine DC01 s’administre sans ouvrir de session dessus : WatchTower passe par l’agent invité de Proxmox et n’exécute que des commandes PowerShell fixes. Sept onglets couvrent l’état du serveur, l’annuaire Active Directory, les stratégies de groupe, le DNS, le DHCP, l’autorité de certification et les journaux d’événements.

Windows Server, tableau de bord : état de DC01, résumé Active Directory et services Windows.Windows Server, tableau de bord : état de DC01, résumé Active Directory et services Windows.
Tableau de bord : état du serveur, résumé de l’annuaire et services.
Windows Server, suite du tableau de bord : services, DNS, DHCP, AD CS, stockage et diagnostics à la demande.Windows Server, suite du tableau de bord : services, DNS, DHCP, AD CS, stockage et diagnostics à la demande.
Suite : DNS, DHCP, autorité de certification, stockage et diagnostics lancés à la demande (dcdiag, réplication, heure).
Windows Server, utilisateurs et ordinateurs Active Directory : arborescence et liste des comptes.Windows Server, utilisateurs et ordinateurs Active Directory : arborescence et liste des comptes.
Utilisateurs et ordinateurs : arborescence du domaine et comptes.
Windows Server, stratégies de groupe : liste des GPO, liens et versions.Windows Server, stratégies de groupe : liste des GPO, liens et versions.
Stratégies de groupe : liens, versions et rapport.
Windows Server, gestionnaire DNS : redirecteurs et zones.Windows Server, gestionnaire DNS : redirecteurs et zones.
DNS : redirecteurs et zones du contrôleur.
Windows Server, serveur DHCP : étendues par VLAN et taux d’occupation.Windows Server, serveur DHCP : étendues par VLAN et taux d’occupation.
DHCP : une étendue par VLAN, avec son occupation.
Windows Server, services de certificats : autorité racine et certificats émis.Windows Server, services de certificats : autorité racine et certificats émis.
AD CS : l’autorité racine interne et les certificats émis, exportables ou révocables.
Windows Server, observateur d’événements filtré par journal et niveau.Windows Server, observateur d’événements filtré par journal et niveau.
Journaux : l’observateur d’événements, filtré par journal et par niveau.

Réseau

Publication des services et résolution de noms.

Nginx Proxy Manager

Les hôtes du reverse proxy et leurs certificats, lus par l’API de Nginx Proxy Manager : domaine, service cible, redirection TLS et échéance de chaque certificat. Un hôte se crée, se modifie ou se désactive depuis cet écran.

Nginx Proxy Manager dans WatchTower : liste des hôtes proxy avec cible, état et certificat.Nginx Proxy Manager dans WatchTower : liste des hôtes proxy avec cible, état et certificat.
Hôtes proxy : 17 hôtes, leur cible et leur certificat.
Nginx Proxy Manager dans WatchTower : certificats avec date d’expiration et statut.Nginx Proxy Manager dans WatchTower : certificats avec date d’expiration et statut.
Certificats : échéance et jours restants.

Technitium DNS

Les zones du serveur DNS interne, avec leurs enregistrements, et les statistiques de résolution : volume de requêtes, part bloquée, domaines et clients les plus actifs. Un troisième onglet, prévu pour l’application de blocage avancé, n’était pas alimenté lors du relevé.

Technitium DNS dans WatchTower : liste des zones avec type, DNSSEC et numéro de série.Technitium DNS dans WatchTower : liste des zones avec type, DNSSEC et numéro de série.
Zones : type, signature DNSSEC et numéro de série.
Technitium DNS dans WatchTower : statistiques de requêtes sur la dernière heure.Technitium DNS dans WatchTower : statistiques de requêtes sur la dernière heure.
Statistiques : 5 044 requêtes sur la dernière heure, dont 5,7 % bloquées.

Sécurité

Supervision, journaux, détection sur les hôtes et sur le réseau.

Zabbix

Le parc supervisé (agents et équipements interrogés en SNMP), les problèmes en cours classés par sévérité, que l’on peut acquitter, et les tendances d’un hôte sur 24 heures.

Zabbix dans WatchTower : hôtes supervisés avec type, état, disponibilité et durée de fonctionnement.Zabbix dans WatchTower : hôtes supervisés avec type, état, disponibilité et durée de fonctionnement.
Hôtes : 17 machines et équipements supervisés.
Zabbix dans WatchTower : problèmes en cours par sévérité.Zabbix dans WatchTower : problèmes en cours par sévérité.
Problèmes : classés par sévérité, avec acquittement.
Zabbix dans WatchTower : courbes de tendance d’un hôte sur 24 heures.Zabbix dans WatchTower : courbes de tendance d’un hôte sur 24 heures.
Tendances : processeur, mémoire et réseau d’un hôte sur 24 heures.

Prometheus

L’état du serveur de métriques, ses cibles de collecte, quelques métriques clés en direct, les règles d’alerte et un explorateur de requêtes PromQL.

Prometheus dans WatchTower : cibles de collecte et leur santé.Prometheus dans WatchTower : cibles de collecte et leur santé.
Cibles : santé et dernier relevé de chaque point de collecte.
Prometheus dans WatchTower : métriques clés en temps réel.Prometheus dans WatchTower : métriques clés en temps réel.
Métriques : processeur, mémoire, stockage et débit réseau.
Prometheus dans WatchTower : explorateur PromQL et résultat d’une requête.Prometheus dans WatchTower : explorateur PromQL et résultat d’une requête.
Explorateur PromQL : la requête « up » et son résultat.

Wazuh

La sécurité des hôtes : agents et leur état, alertes avec leur niveau et la technique MITRE ATT&CK associée, contrôle d’intégrité des fichiers et réponses actives (ces deux derniers onglets ne sont pas reproduits : ils listent des chemins de fichiers internes).

Wazuh dans WatchTower : liste des agents avec état, système et version.Wazuh dans WatchTower : liste des agents avec état, système et version.
Agents : état, système et groupe de chaque agent.
Wazuh dans WatchTower : alertes avec niveau, règle, agent et technique MITRE.Wazuh dans WatchTower : alertes avec niveau, règle, agent et technique MITRE.
Alertes : règle déclenchée, agent et technique ATT&CK.

Loki et Grafana

Loki donne accès aux journaux centralisés : filtres par étiquette, sévérité et fenêtre de temps, requête LogQL bornée et suivi en direct. L’écran Grafana résume le serveur de tableaux de bord : tableaux, alertes, sources de données et état.

Loki dans WatchTower : filtres de journaux et requête LogQL.Loki dans WatchTower : filtres de journaux et requête LogQL.
Loki : filtres, requête et suivi en direct.
Grafana dans WatchTower : sources de données configurées.Grafana dans WatchTower : sources de données configurées.
Grafana : les sources de données configurées.

CrowdSec

Les décisions de blocage connues de l’API locale de CrowdSec, avec leur scénario, leur origine et leur durée restante. La page liste ce que la source fournit et n’en déduit rien de plus.

CrowdSec dans WatchTower : décisions de blocage avec scénario, origine et durée.CrowdSec dans WatchTower : décisions de blocage avec scénario, origine et durée.
Décisions : 4 291 reçues le 12 novembre, issues pour l’essentiel des listes communautaires.

Suricata

Les alertes de la sonde réseau, l’état du moteur et le catalogue des règles. La sonde écoute une copie du trafic : elle détecte, elle ne bloque pas, et l’écran le rappelle.

Suricata dans WatchTower : alertes avec signature, sévérité, protocole et verdict.Suricata dans WatchTower : alertes avec signature, sévérité, protocole et verdict.
Alertes : signature, sévérité, protocole et verdict de chaque événement.

Opérations

Accès distant, automatisation, versions et agent.

Guacamole

L’accès distant aux machines, organisé comme un gestionnaire de connexions : arborescence des cibles, connexion rapide, détails de la sélection et onglets de sessions. Le bureau ou le terminal s’affiche dans la page et reste ouvert pendant la navigation.

Accès distant dans WatchTower : liste des machines SSH et RDP et zone du bureau distant.Accès distant dans WatchTower : liste des machines SSH et RDP et zone du bureau distant.
Accès distant : 20 cibles (SSH et RDP) et la zone de session.

n8n

Les workflows d’automatisation et leurs exécutions. « Voir » ouvre le graphe d’un workflow en plein écran, redessiné à partir de sa définition et débarrassé de ses paramètres.

n8n dans WatchTower : liste des workflows actifs.n8n dans WatchTower : liste des workflows actifs.
Workflows : les sept workflows actifs.
n8n dans WatchTower : historique des exécutions avec statut et durée.n8n dans WatchTower : historique des exécutions avec statut et durée.
Exécutions : statut, début, fin et durée.

Code et versions

Les notes de version de WatchTower, produites à partir de l’historique Git (messages de commit normalisés), et les dépôts de la forge Gitea du laboratoire.

Code et versions dans WatchTower : notes de version classées par type de changement.Code et versions dans WatchTower : notes de version classées par type de changement.
Notes de version, classées par type de changement.

Hermes

L’écran de conversation avec Hermes, l’agent du laboratoire présenté sur sa propre page : liste des sessions, fil de la conversation avec le suivi des appels d’outils, et validation explicite des actions sensibles. Trois autres onglets gèrent ses compétences, sa mémoire et ses modèles ; leur contenu, privé, n’est pas reproduit ici.

Écran Hermes de WatchTower : liste des sessions (titres masqués) et zone de conversation.Écran Hermes de WatchTower : liste des sessions (titres masqués) et zone de conversation.
Conversation : les titres des sessions et le modèle sont masqués.

Paramètres et registres

Les connecteurs, l’apparence et la mémoire écrite du laboratoire.

Connecteurs et affichage

Chaque service se raccorde ici : adresse, identifiants ou clé d’API, vérification du certificat. Tout est chiffré sur le serveur et une clé enregistrée n’est plus jamais réaffichée. Un test de connexion indique si la source répond et en combien de temps. La même section règle les bulletins et les envois de notifications.

Paramètres de WatchTower : liste des connecteurs avec état, latence et dernière sonde.Paramètres de WatchTower : liste des connecteurs avec état, latence et dernière sonde.
Connecteurs : 17 configurés, 16 joignables le 12 novembre.
Paramètres de WatchTower : réglages des alertes et bulletins.Paramètres de WatchTower : réglages des alertes et bulletins.
Alertes et bulletins : horaire, catégories et destinations.

Personnalisation

Langue, thème clair ou sombre, densité, mouvement réduit, choix et ordre des blocs de la vue d’ensemble, rotation du mode TV. Un compagnon animé facultatif, Petdex, se règle dans l’onglet voisin.

Paramètres de WatchTower : langue, apparence et blocs de la vue d’ensemble.Paramètres de WatchTower : langue, apparence et blocs de la vue d’ensemble.
Personnalisation : apparence et blocs de la vue d’ensemble.

Hôtes, réseau et PKI

Le registre des hôtes et des équipements réseau, avec pour chacun une fiche : identité, mesures et écarts associés. La partie PKI recense les autorités et les certificats établis, la partie proxy résume ce que publie le reverse proxy.

Paramètres de WatchTower : registre des hôtes.Paramètres de WatchTower : registre des hôtes.
Registre des hôtes.
Paramètres de WatchTower : fiche d’identité d’un hôte.Paramètres de WatchTower : fiche d’identité d’un hôte.
Fiche d’un hôte : identité déclarée.

Écarts et registre d’architecture

Deux registres tenus à la main. Les écarts consignent ce qui diffère entre l’état prévu et l’état constaté, jusqu’à leur résolution ; leur détail est masqué sur la capture. Le registre d’architecture garde les décisions prises, leur justification et les composants retirés.

Paramètres de WatchTower : registre des écarts, contenu masqué.Paramètres de WatchTower : registre des écarts, contenu masqué.
Registre des écarts (détail masqué).
Paramètres de WatchTower : registre des décisions d’architecture.Paramètres de WatchTower : registre des décisions d’architecture.
Décisions d’architecture.

Veille

Un lecteur de flux pour la veille technique, réparti sur trois axes : outillage, détection et menaces. Chaque article renvoie à sa source ; les sources en échec sont signalées sous la liste.

Paramètres de WatchTower : lecteur de veille par axe.Paramètres de WatchTower : lecteur de veille par axe.
Veille : 155 articles relevés le 12 novembre, répartis par axe.

Sur mobile

La même console, installable comme une application.

WatchTower s’installe sur l’écran d’accueil d’un téléphone. La navigation passe en barre basse (ensemble, alertes, Hermes, services) et la vue d’ensemble se resserre en synthèse.

WatchTower sur mobile : vue d’ensemble.WatchTower sur mobile : vue d’ensemble.
Vue d’ensemble
WatchTower sur mobile : répertoire des services.WatchTower sur mobile : répertoire des services.
Services
WatchTower sur mobile : alertes.WatchTower sur mobile : alertes.
Alertes
WatchTower sur mobile : topologie.WatchTower sur mobile : topologie.
Topologie
WatchTower sur mobile : sauvegardes PBS.WatchTower sur mobile : sauvegardes PBS.
Sauvegardes
WatchTower sur mobile : Windows Server.WatchTower sur mobile : Windows Server.
Windows Server
WatchTower sur mobile : Zabbix.WatchTower sur mobile : Zabbix.
Zabbix
WatchTower sur mobile : Wazuh.WatchTower sur mobile : Wazuh.
Wazuh

Sous le capot

Ce qui fait tourner l’application.

Serveur
Une API en Python (FastAPI) lit le registre, un fichier TOML typé, interroge les services et expose un contrat unique à l’interface. Elle tourne dans un conteneur LXC du laboratoire, lancée par systemd.
Interface
Une application React et TypeScript construite avec Vite, installable (PWA), en thème clair ou sombre.
Connecteurs
Adresses et secrets chiffrés dans un coffre sur le serveur ; l’interface ne reçoit jamais un secret, seulement le fait qu’il est renseigné.
Accès
Phrase de passe hachée en Argon2id, session courte, jeton anti-CSRF sur chaque modification, service publié derrière le reverse proxy avec un certificat de l’autorité interne.
Tests
Tests automatisés côté serveur (pytest) et côté interface (Vitest), rejoués avant chaque mise en service.

Limites connues : l’application est mono-utilisateur et n’est pas exposée sur Internet ; certaines valeurs du registre restent « à compléter » ; une source en panne laisse son écran en attente plutôt que d’afficher une valeur périmée.

Procédure de déploiement · Le laboratoire

Défiler vers le haut