Vue d'ensemble

NeonFlare Community Edition est un dashboard de sécurité self-hosted et gratuit qui réunit trois besoins habituellement éclatés entre plusieurs outils : la surveillance de ton réseau, une référence d'outils pentest avec terminaux embarqués, et un suivi GRC (Gouvernance, Risques & Conformité). C'est un site statique -- aucune base de données, aucun backend applicatif. Toute ta configuration (nœuds réseau, outils, checklist GRC, préférences) vit dans le localStorage de ton navigateur.

Fonctionne aussi bien servi par nginx que simplement ouvert en local (file://) -- aucune des fonctionnalités ne dépend d'un appel réseau vers un serveur applicatif.

Premiers pas

Au tout premier lancement, un assistant guidé se déclenche automatiquement et pointe directement les sections réelles du Dashboard (Réseau, Outils, GRC), puis la page Settings où tout se configure. Chaque étape est passable, et l'assistant reste accessible à tout moment depuis Settings → Assistant de configuration → Relancer l'assistant de configuration.

La configuration démarre volontairement avec des exemples/valeurs par défaut (une checklist GRC ISO 27001 / NIST CSF déjà remplie, par exemple) plutôt qu'un dashboard totalement vide -- tu supprimes ou remplaces ce qui ne te correspond pas depuis Settings.

Le Dashboard

La page centrale est composée de panneaux indépendants, redimensionnables et déplaçables (glisser l'en-tête d'un panneau, ou sa poignée en bas à droite) :

  • Réseau -- les nœuds de ton infrastructure
  • Outils -- référence de commandes pentest par catégorie
  • DevSecOps -- même principe qu'Outils, mais pour les CLI cloud/infra (Docker, Kubernetes, Terraform, AWS, Azure)
  • Website -- tes liens/services web par catégorie
  • Couverture GRC -- résumé de ta progression sur les 20 domaines
  • System log -- journal d'activité
  • Shells -- terminaux embarqués ouverts à la demande
  • Prochaines revues -- dates de revue tirées des registres Actifs/Risques, en retard signalé

Chaque panneau peut être replié (bouton dans son en-tête) ou masqué entièrement -- soit depuis Paramètres, soit directement dans le Dashboard via le bouton ☰ Panneaux de la barre du haut (mêmes cases à cocher, appliquées tout de suite, sans changer de page). La disposition (position/taille, glisser l'en-tête ou la poignée en bas à droite d'un panneau) est mémorisée par dashboard.

Dashboard avec le panneau Shells en haut et le panneau Outils en bas, disposition par défaut
Disposition par défaut : Shells en haut, Outils en bas.
Même dashboard avec Shells déplacé à gauche et Outils redimensionné en colonne à droite
Même dashboard, réarrangé en glissant les panneaux : Shells à gauche, Outils en colonne à droite.
Panneau Shells avec trois terminaux ouverts simultanément côte à côte : Bash, Zsh et PowerShell
Plusieurs shells ouverts en même temps -- ici Bash, Zsh et PowerShell côte à côte, chacun sa propre session.
Modal Outils ouvert sur la catégorie Recon & Enumeration, avec la barre Host/Wordlist et la liste de commandes
Le modal Outils -- une catégorie de commandes, prêtes à copier ou envoyer vers un shell.
Panneau Réseau avec un réseau fictif d'entreprise : pare-feu, switch, Wi-Fi, hyperviseur, NAS, dépôt Git, ArgoCD, Grafana, Jenkins, groupés par catégorie
Le panneau Réseau -- nœuds groupés par catégorie, statut en ligne/injoignable vérifié en direct (réseau fictif ici, pour l'exemple).
Un tout premier dashboard démarre volontairement avec seulement Shells et Outils visibles, pour ne pas noyer un nouvel utilisateur sous tous les panneaux à la fois -- réactive les autres depuis ☰ Panneaux ou Paramètres.

Réseau

Le panneau Réseau affiche les nœuds que tu as déclarés : titre, sous-titre, catégorie, icône, lien direct. Vide par défaut -- ajoute les tiens depuis Settings → Config Network (ajout, édition, suppression, import/export JSON, réinitialisation aux valeurs par défaut).

Outils & Terminaux

Fini les cheatsheets planqués dans un fichier .txt.

Le panneau Outils regroupe des catégories de commandes (recon, exploitation, post-exploitation, etc.). Cliquer une commande la copie directement dans un terminal embarqué (bash, zsh ou PowerShell selon ce que tu ouvres) -- pas de copier/coller manuel entre fenêtres. Avec le bouton 🔗 Link de la barre du Dashboard, une commande choisie ici peut même atterrir dans le terminal d'un autre onglet du navigateur (utile avec deux dashboards ouverts côte à côte).

Terminaux embarqués

Ouverts via le bouton "+ Shell" du Dashboard, ils restent actifs même en changeant de page dans la sidebar (ils ne sont pas détruits à chaque navigation). L'opacité des fenêtres de terminal se règle depuis Settings.

Requiert un script lancé en local. Les terminaux ne fonctionnent pas tout seuls -- il faut d'abord démarrer scripts/ttyd-shells.sh start sur la machine qui héberge le site (nécessite ttyd et tmux installés). Ce script lance les instances ttyd derrière les 3 types de terminal, chacune liée uniquement à loopback (jamais exposée sur le réseau, même si le site l'est). Sans ce script actif, le panneau Shells reste vide, quel que soit ton mode d'hébergement.
Commandes : scripts/ttyd-shells.sh start [n] démarre n instances par type de terminal (bash, zsh, pwsh -- 6 par défaut) ; scripts/ttyd-shells.sh status liste ce qui tourne et sur quel port ; scripts/ttyd-shells.sh stop arrête tout. Chaque instance ttyd lance sa commande dans une session tmux partagée (tmux new-session -A) plutôt qu'un process isolé, pour que le "copier vers le shell" du Dashboard puisse s'y attacher et injecter une commande dans le même terminal que celui affiché dans le navigateur.
Les catégories intégrées gardent leurs commandes fixes ; une catégorie que tu ajoutes toi-même a sa propre liste de commandes, entièrement éditable depuis Settings → Config Tools.

GRC (Gouvernance, Risques & Conformité)

20 domaines détaillés (gouvernance, analyse et traitement des risques, IAM, cloud, DevSecOps, continuité, vie privée, et plus), organisés en 5 sections (GRC générale, sécurité réseau, API, WebApp, base de données). Chaque domaine a sa propre checklist, pré-remplie avec un référentiel ISO 27001 / NIST CSF par défaut.

Hub GRC : grille des 20 domaines avec badges de couverture et barre de progression globale
Le hub GRC -- 20 domaines, chacun avec sa propre progression.

Export & suivi

  • Export JSON, Word ou PDF -- sur un domaine ou sur l'ensemble
  • Import JSON pour restaurer un état sauvegardé
  • Barres de progression et badges de couverture par domaine (activables/désactivables depuis Settings)
  • Réinitialisation complète si besoin de repartir de zéro

Registres opérationnels

Trois des domaines GRC vont au-delà de la checklist d'auto-évaluation et offrent un vrai registre CRUD, en plus de la checklist :

  • Registre d'actifs (page Actifs) -- type, classification CIA (confidentialité/intégrité/disponibilité), rôle primaire/support, dépendances entre actifs, criticité calculée automatiquement
  • Registre de risques (page Analyse des risques) -- menace/vulnérabilité, actifs concernés, matrice probabilité × impact (ISO 27005), plan de traitement, date de prochaine revue
  • Journal d'incidents (page Incidents) -- sévérité, timeline détection → réponse → résolution, durée de résolution calculée, post-mortem
  • Mapping de contrôles -- une partie des items de checklist portent un tag ISO 27001 Annexe A / NIST CSF 2.0 / CIS Controls v8, pour relier une case cochée à un contrôle précis d'un référentiel

Findings

Distinct du panneau Outils (aide-mémoire de commandes) : un vrai tracker de findings pour une mission de test d'intrusion, accessible depuis le menu Findings (juste sous Tableau de bord, dans la sidebar).

Tracker de findings : engagement avec 3 findings, badges de sévérité colorés, un finding critique déplié montrant ses preuves
Un engagement avec ses findings -- badges de sévérité, preuves, et le générateur de rapport.
  • Engagements -- nom, client, scope, dates, statut ; historique de plusieurs missions
  • Findings -- titre, description, score CVSS (badge de sévérité Faible/Moyenne/Élevée/Critique), preuves en texte libre, statut ouvert/corrigé/accepté
  • Preuves en texte, plus une référence d'image optionnelle par finding (chemin ou fichier réattaché -- voir la note ci-dessous)
  • Génération de rapport Word ou PDF par engagement, findings triés par CVSS décroissant
Charte des couleurs CVSS (identique à l'écran et dans les rapports Word/PDF exportés) : Non évalué Faible Moyenne Élevée Critique
L'image d'un finding n'est jamais enregistrée directement. Seul le chemin (ou le nom de fichier) que tu entres est sauvegardé avec le finding -- les pixels eux-mêmes ne sont chargés qu'en mémoire, pour la session en cours, ce qui évite de vider le quota localStorage (~5-10 Mo, partagé avec tous les autres registres) avec des captures d'écran. Deux façons de charger l'aperçu : « Charger l'aperçu depuis ce chemin » (fonctionne si le site est ouvert en file://, ou si le chemin est une URL atteignable en http/https) ou « Choisir un fichier » (marche toujours, quel que soit le mode d'hébergement, mais le navigateur n'expose jamais le chemin réel du fichier choisi -- juste son nom). Rouvre/recharge la page et l'aperçu disparaît -- c'est voulu, il faut le recharger. Si une image est chargée au moment de l'export, elle est intégrée directement dans le rapport Word/PDF ; sinon, seule la référence texte y apparaît.

Topologie

Schéma réseau interactif : les nœuds se déplacent directement sur la page (glisser-déposer), et peuvent être imbriqués les uns dans les autres pour former des regroupements (par exemple, un hyperviseur "boîte" contenant ses VMs). Ajout de nœuds personnalisés et gestion des liens entre eux depuis Settings → Config Topology, avec le même export/import/réinitialisation JSON que les autres registres.

Exemple concret

Le réseau fictif d'une PME ("Acme Corp"), construit avec les outils ci-dessus pour donner une idée de la portée possible :

Topologie réseau fictive d'Acme Corp : pare-feu périmétrique relié à une DMZ (serveur web + serveur mail imbriqués), un switch interne relié au contrôleur de domaine, au serveur de fichiers, à un hyperviseur ESXi (avec deux VMs imbriquées) et aux postes utilisateurs, plus une sauvegarde cloud
Pare-feu → DMZ (Web + Mail imbriqués) et switch interne → contrôleur de domaine, serveur de fichiers, hyperviseur ESXi (2 VMs imbriquées) et postes utilisateurs, plus une sauvegarde cloud à part.
  • Deux boîtes imbriquées : la DMZ (serveur Web + serveur Mail) et l'hyperviseur ESXi (2 VMs) -- chaque enfant reste rattaché à sa boîte quand elle est déplacée
  • Des nœuds libres pour tout ce qui n'a pas besoin d'un regroupement : pare-feu, switch, contrôleur de domaine, serveur de fichiers, postes utilisateurs, sauvegarde cloud
  • Des liens tracés entre nœuds de haut niveau pour représenter les segments réseau, sans devoir positionner chaque VM/serveur imbriqué individuellement

Multi-Dashboard

Crée autant de dashboards indépendants que tu veux depuis Settings → Dashboards. Chacun garde sa propre combinaison de sections activées et sa propre disposition de panneaux -- utile par exemple pour séparer :

  • Une vue orientée opérations réseau -- topologie, inventaire réseau et outils réseau au premier plan
  • Une vue orientée pentest -- engagements, findings CVSS et terminaux embarqués
  • Une vue orientée GRC -- checklist, registre des actifs, des risques et des incidents

Paramètres (Settings)

Tout se configure depuis une seule page, sans toucher au code -- présentée en deux volets : une nav à gauche par section, le contenu de la section choisie à droite. (Pour figer des valeurs par défaut dans le déploiement lui-même, voir Valeurs par défaut du déploiement.)

  • Apparence -- Thème (5 variantes : Standard, Neon Terminal, Blade Runner, Black ICE, et Personnalisé avec un sélecteur de couleur pour choisir sa propre couleur d'accent), Langue (français/anglais, interface commune uniquement), Background (fond d'écran global, remplace celui défini par défaut sur chaque page)
  • Assistant & réinitialisation -- relance le tour guidé ; sauvegarde complète (un seul JSON pour tous les registres) ; réinitialisation par registre ou totale -- voir ci-dessous
  • Interface -- Pages visibles (masque des liens dans le menu latéral, n'empêche pas l'accès direct à la page) et Sections du Dashboard (par dashboard, quelles sections sont actives -- même réglage que le bouton ☰ Panneaux directement dans le Dashboard)
  • GRC & Shells -- pourcentages de couverture GRC, "Ton nom" pour la traçabilité, opacité des fenêtres de terminal
  • Registres -- Config Network / Tools / DevSecOps / Website / Topology / About, chacun avec export JSON, import JSON et réinitialisation par défaut
  • Sécurité -- coffre-fort (chiffrement du localStorage), voir Limites connues
Onglet Registres de Settings : cartes Config Network, Config Tools et Config DevSecOps côte à côte
L'onglet Registres -- une carte par registre, même pattern ajouter/modifier/supprimer partout.

Assistant & réinitialisation

Trois outils dans cet onglet, pensés pour "tout casser proprement" au besoin :

  • Sauvegarde complète -- un seul fichier JSON avec tous les registres (Réseau, Outils, DevSecOps, Website, Topologie, About, Checklist GRC, Actifs, Risques, Incidents, Findings) en un clic, pratique pour migrer de navigateur ou sauvegarder avant une réinitialisation
  • Réinitialiser un registre -- un bouton par registre, chacun indépendant des autres
  • Tout réinitialiser -- enchaîne tous les registres ci-dessus derrière une seule confirmation ; le coffre-fort n'est jamais touché par ce bouton (nécessite ta passphrase, geste séparé dans l'onglet Sécurité)

Valeurs par défaut du déploiement (config/)

Il y a deux façons de configurer NeonFlare. Depuis Settings (décrit ci-dessus) : chaque changement vit dans le localStorage de ce navigateur, sur cette machine uniquement -- non permanent, propre à qui l'a fait. En éditant les fichiers config/*.js : ça définit ce que voit tout navigateur neuf avant même d'ouvrir Settings -- permanent, embarqué dans le déploiement (idéal pour une instance solo ou une image d'équipe).

Chaque config/*.js est une graine. NeonFlare ne la lit que tant que ce registre n'a jamais été touché dans l'UI sur ce navigateur. Le premier ajout / édition / suppression dans Settings recopie la liste dans localStorage, et à partir de là c'est localStorage qui prime -- éditer le fichier n'a plus d'effet sur ce navigateur (un « Réinitialiser ce registre » dans Settings → Assistant efface la copie localStorage et rend la main au fichier).

Pas besoin d'écrire le JSON à la main : Settings → Registres → Config Network a un bouton « ⬇ Exporter en reseau.js » -- construis ta liste de nœuds dans l'UI, clique, colle le résultat dans config/reseau.js, redéploie.

Les fichiers

FichierVariableContenu
config/reseau.jsreseauConfigNœuds du panneau Réseau du Dashboard
config/topology.jstopologyConfigSchéma de la page Topologie (nœuds + liens)
config/about.jsaboutConfigCarte « permit » et liens de la page About
config/neonflare-technology.jsneonflareTechnologyConfigCartes de la page NeonFlare Technology
config/grc-author.jsgrcAuthorConfigNom par défaut dans le journal de modifications GRC
config/encryption.jsencryptionConfigenabled: true fait apparaître la carte Chiffrement dans Settings (n'active rien seul)
config/settings.jssettingsConfigFond d'écran de la page Settings
config/tools/<page>.jstools<Page>ConfigFond d'écran d'une page Outils (web, linux, ad, recon…)

Structure de chaque fichier

Ce ne sont pas des JSON : chaque fichier déclare une constante globale (const xConfig = { … };). Garder la structure, changer les valeurs. Les chemins d'images sont relatifs à config/ (donc ../assets/images/…).

config/reseau.js
const reseauConfig = {
  background: "../assets/images/kali_xl_sharp.png",
  cards: [
    {
      url: "https://host.example",   // ouvert dans un onglet au clic
      img: "../assets/images/router.png",
      title: "Titre",
      sub: "Sous-titre",
      category: "Réseau",            // regroupe les cartes
      enabled: true                  // optionnel (défaut: true)
    }
    // ... autant de cartes que voulu
  ]
};
config/topology.js
const topologyConfig = {
  links: [ ["nodeA", "nodeB"] ],   // paires d'ids de nœuds reliés
  nodes: [ /* arbres DOM des nœuds -- le plus simple : construire dans
              l'éditeur Topologie puis exporter, pas à la main */ ]
};
config/about.js
const aboutConfig = {
  background: "../assets/images/hacker.jpg",
  permit: {
    header: "", title: "", text: "", id: "",
    qrImage: null,        // chemin d'image ou null
    barcodeImage: null
  },
  links: [
    { label: "GitHub", url: "https://...", enabled: true }
  ]
};
config/neonflare-technology.js
const neonflareTechnologyConfig = {
  background: "../assets/images/kali_xl_city.png",
  cards: [
    { url: "#", img: "../assets/images/dragon-favicon.png",
      title: "Documentation", sub: "Guides et références" }
  ]
};
config/grc-author.js
const grcAuthorConfig = {
  defaultName: ""   // nom attaché aux modifs GRC tant que Settings n'est pas rempli
};
config/encryption.js
const encryptionConfig = {
  enabled: false   // true => carte "Chiffrement" visible dans Settings
};
config/settings.js
const settingsConfig = {
  background: "../assets/images/kali_xl_forest_sharp.png"
};
config/tools/<page>.js
// un fichier par page Outils : web, linux, windows, ad, recon, c2,
// aws, azure, docker, kubernetes, terraform, lateral, osint, post, misc
const toolsWebConfig = {
  background: "../assets/images/atlantis.png"
};

Bon à savoir

  • Aucune étape de build : éditer, servir, recharger.
  • Ces fichiers ne contiennent aucune donnée sensible par défaut et ne sont jamais envoyés nulle part -- ils sont servis comme le reste du site statique.
  • Un fichier de graine mal formé (virgule en trop, guillemet manquant) casse la page qui le charge -- vérifie la console du navigateur en cas de doute.

Architecture

Site 100% statique -- HTML/CSS/JS, servi par nginx (voir Téléchargement) ou ouvert directement en local. Aucune donnée ne quitte ton navigateur : chaque registre de configuration est lu/écrit dans localStorage, sans appel réseau vers un serveur applicatif -- compatible avec un usage en file:// pur, sans même de serveur web.

La page racine (index.html) agit comme coquille : elle charge chaque section dans un iframe et communique avec elle via postMessage (thème, langue, visibilité des pages...). Les terminaux embarqués survivent à la navigation parce qu'ils sont rattachés à cette coquille plutôt qu'à la page affichée dans l'iframe.

Navigateurs supportés : Chromium (Chrome, Edge, Brave...) et Firefox, versions stables courantes -- traités comme cibles de premier rang, en http(s):// comme en file://. La suite de tests du dépôt (ProjetTest/, y compris le chiffrement optionnel via WebCrypto) est rejouée à l'identique sur les deux moteurs. Safari et les anciens navigateurs ne sont pas testés.

Licence

La technologie NeonFlare Community Edition (le dashboard, ses sections, son code source) est publiée sous licence MIT -- libre d'usage, de modification et de redistribution, y compris à des fins commerciales, tant que la notice de copyright originale est conservée. Aucune garantie n'est associée au logiciel (voir le texte complet de la licence MIT). Ce site vitrine suit la même licence.

Limites connues

Transparence sur ce que NeonFlare n'est pas (encore) :

Usage solo / mono-navigateur. Il n'y a pas de comptes ni d'authentification -- tout vit dans le localStorage d'un seul navigateur. Une équipe ne peut partager un état qu'en s'échangeant des exports JSON à la main. Voir Pro Edition pour la piste envisagée (pas encore construite) pour le multi-user.
Piste d'audit limitée. Chaque case cochée garde l'horodatage et l'auteur de sa dernière modification (visible en survol) -- mais ce n'est pas un historique complet : pas de log versionné, pas de trace des changements précédents.
Les toggles de visibilité ne sont pas un contrôle d'accès. Masquer une page/section dans Settings cache seulement le lien dans l'interface -- ça ne bloque pas l'accès direct à l'URL. Si tu exposes ton instance au-delà d'un usage local, mets un vrai mécanisme d'accès devant (reverse proxy avec authentification, VPN, etc.).

FAQ

Est-ce que mes données sont envoyées quelque part ?

Non. Tout reste dans le localStorage de ton navigateur, sur ta machine.

Je perds ma config si je vide mon navigateur ?

Oui -- exporte régulièrement en JSON si tu veux pouvoir restaurer ta configuration : soit tout d'un coup depuis Settings → Assistant & réinitialisation → Sauvegarde complète, soit registre par registre (chacun a aussi son propre bouton Export).

Puis-je l'utiliser en équipe ?

Aujourd'hui, chaque personne a sa propre instance/config locale -- voir Limites connues. C'est une piste d'évolution suivie mais pas encore construite -- voir Pro Edition.