8 couches défense actives • ~170 IPs neutralisées / 24h • 5 hôtes supervisés • JARVIS IA proactive intégrée
GeoIP — Cartographie mondiale des menaces 24h · arcs d'attaque animés · top pays · 169 IPs actives · 25 pays sources
Tracking en temps réel : RECON → SCAN → EXPLOIT → BRUTE → NEUTRALISÉ · fenêtre 15 min · score menace par IP
| SOC Map — Vue Europe | Investigation IP |
|---|---|
![]() |
![]() |
| Score ÉLEVÉ 53 · 169 hostiles · 78% neutralisation · arcs kill chain | Modal forensique : Kill Chain · CrowdSec · Fail2ban · WHOIS · verdict |
| XDR — Corrélation cross-source | Chaîne de défense — Pipeline sécurité |
|---|---|
![]() |
![]() |
| COLLECT · NORMALIZE · CORRELATE · RESPOND · Score 200 | UFW → GeoIP → WAF → CrowdSec → Suricata → Fail2ban → nginx · 8 couches |
| Heatmap Attaques 24h | Windows / GPU Metrics |
|---|---|
![]() |
![]() |
| 13.2k req · 358 bloqués · 2.7% · pics horaires détectés | CPU · RAM · GPU RTX · disques — supervision machine hôte |
JARVIS (Ollama phi4-reasoning) · réponse proactive automatique · alertes TTS · analyse LLM événements critiques · ban auto
| Capacité | Détail | |
|---|---|---|
| 🛡️ | 8 couches défense | UFW · nftables · GeoIP Block · CrowdSec WAF · Suricata IDS · Fail2ban · AppArmor · AID HIDS |
| 🧠 | IA défensive | JARVIS (Ollama phi4-reasoning) — ban auto · alertes TTS · analyse LLM |
| 📡 | Logs centralisés | 5 hôtes via rsyslog — corrélation cross-host temps réel |
| 🎯 | Kill Chain | Tracking RECON → SCAN → EXPLOIT → BRUTE → NEUTRALISÉ par IP |
| 📊 | Score menace | 24 briques · calcul temps réel · seuils FAIBLE / MOYEN / ÉLEVÉ / CRITIQUE |
| 🔍 | XDR | Corrélation Fail2ban + ModSec + UFW + Suricata + rsyslog + routeur |
| 🗺️ | GeoIP | Cartographie Leaflet + MaxMind · arcs d'attaque animés · top pays |
| 🔄 | Plug-and-play | Archive 13 blocs · restauration complète sur VM vierge en < 30 min |
| 🔥 | DR validé en conditions réelles | Exercice Phase A/B/C exécuté le 2026-04-28 · basculement réseau · 8 écarts corrigés · rapport |
| ✅ | Audit 10/10 | Zéro dette technique · 90 passes · 144 NDT corrigés |
OS Debian 13 (Bookworm)
Proxy nginx 1.26 — reverse proxy · TLS · vhosts
Sécurité CrowdSec (WAF AppSec ~207 vpatch CVE) · Suricata IDS (96k règles)
Fail2ban · AppArmor · UFW + nftables · AID HIDS
Logs rsyslog centralisé (5 hôtes) · GoAccess
Dashboard SPA vanilla JS — 24 modules · 35 tuiles · zéro dépendance NPM
Backend Python 3.11 — monitoring_gen.py (génération JSON live)
IA JARVIS — Ollama phi4-reasoning · Flask · edge-tts
GeoIP MaxMind GeoLite2 · Leaflet.js
Infra Proxmox VE — 3 VMs (srv-ngix · site-01 · site-02)
INTERNET
│
▼
┌─────────────────────────────────────────────────────┐
│ srv-ngix │
│ │
│ UFW + nftables ──→ GeoIP Block ──→ CrowdSec WAF │
│ ──→ Suricata IDS ──→ Fail2ban ──→ nginx │
│ ──→ AppArmor · AID HIDS │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Dashboard SOC (port 8080) │ │
│ │ 24 modules JS · polling 60s · Kill Chain │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ rsyslog ◄── site-01 · site-02 · pve · <ROUTER> │
└─────────────────────────────────────────────────────┘
│ │
▼ ▼
site-01 site-02
Apache · AppArmor Apache · AppArmor
ModSecurity WAF ModSecurity WAF
| Objectif | Point d'entrée |
|---|---|
| 📖 Comprendre l'architecture et les choix défensifs | Documentation 01 → 09 |
| ⚙️ Installer la stack logicielle sur Debian 13 | deploy-soc.sh — paquets + configuration de base |
| 🔧 Adapter une configuration à votre infrastructure | CONFIGS/ — exemples anonymisés · placeholders <NOM> |
| 📋 Comprendre la méthodologie de déploiement | GUIDE-DEPLOIEMENT-RAPIDE.md — workflow disaster recovery |
Ce dépôt publie l'architecture, la documentation et le framework de déploiement. Les sources du dashboard JS (24 modules) et des scripts opérationnels restent privées. Les configs d'exemple sont anonymisées — placeholders
<NOM>à adapter à votre infra.
Infrastructure de référence : ce SOC tourne sur Proxmox VE (machine physique) hébergeant 3 VMs Debian 13. La reconstruction sur un autre hyperviseur (KVM, VMware, bare-metal) est possible en adaptant les 4 IPs du bloc CONFIG de
deploy-soc.sh:
Placeholder Rôle Exemple générique <SRV-NGIX-IP>VM nginx + SOC dashboard 203.0.113.10<CLT-IP>VM site-01 (Apache) 203.0.113.11<PA85-IP>VM site-02 (Apache) 203.0.113.12<PROXMOX-IP>Hyperviseur Proxmox VE 203.0.113.1
| # | Document | Description |
|---|---|---|
| 01 | PRESENTATION.md | Présentation, objectifs, points forts |
| 02 | ARCHITECTURE.md | Infrastructure, stack, schéma réseau |
| 03 | SECURITE-BRIQUES.md | 8 couches défense · matrice couverture par vecteur |
| 04 | DASHBOARD-SOC.md | Dashboard : modules JS · tuiles · polling · CSS |
| 05 | CHAINE-DEFENSE.md | Flux attaque → détection → ban · intégrations |
| 06 | THREATSCORE.md | Score menace : 24 briques · formule · anti-doublons |
| 07 | RSYSLOG-CENTRAL.md | Logs centralisés : 5 hôtes · filtres · rétention |
| 08 | JARVIS-DEFENSE.md | Défense proactive IA : boucle 60s · 12 déclencheurs |
| 09 | ROADMAP.md | Axes d'évolution · décisions d'architecture |
⚠️ Disaster recovery personnel — non reproductible depuis ce dépôt seul.restore-soc.shnécessite une archive de configuration privée (configs, clés SSH, scripts opérationnels) conservée hors dépôt.deploy-soc.shest utilisable indépendamment pour installer la stack logicielle sur n'importe quel Debian 13.
| Script / Guide | Rôle | Utilisable sans archive |
|---|---|---|
| deploy-soc.sh | Installation paquets — nginx · CrowdSec · Suricata · Fail2ban · AIDE · rsyslog · --dry-run · --step |
✅ |
| restore-soc.sh | Restauration complète depuis archive privée — 13 blocs · --dry-run · --step · rollback auto |
🔒 archive requise |
| create-archive.sh | Export de la configuration en cours — génère l'archive 13 blocs | ✅ |
| GUIDE-DEPLOIEMENT-RAPIDE.md | Documentation du workflow complet — référence méthodologique | ✅ |
| RUNBOOK-DEBIAN13.md | Runbook installation Debian 13 | ✅ |
| CHECKLIST-DEPLOY.md | 61 points de vérification post-déploiement | ✅ |
| CHECKLIST-OPERATIONNELLE.md | Checklist exploitation quotidienne | ✅ |
| DR-EXERCISE-2026-04-28.md | Rapport exercice DR réel — Phase A/B/C · 8 écarts détectés et corrigés | ✅ |
| CONTENU-ARCHIVE.md | Structure détaillée des 13 blocs de l'archive | ✅ |
| AUDIT-ARCHIVE-CHECKLIST.md | Checklist avant chaque archivage | ✅ |
| Fichier | Rôle | Statut |
|---|---|---|
monitoring_gen.py |
Moteur principal — génère monitoring.json toutes les 5 min · 60+ fonctions · parsing nginx / CrowdSec / Suricata / Fail2ban / rsyslog |
🔒 privé |
soc-daily-report.py |
Rapport HTML quotidien par mail (08h00) | 🔒 privé |
monitoring.sh |
Wrapper cron + GoAccess HTML analytics | 🔒 privé |
proto-live.py |
Statistiques protocoles temps réel (fenêtre 5 min) | 🔒 privé |
| alert.conf.example | Configuration SMTP alertes — copier en alert.conf |
✅ public |
| jail.local | Fail2ban — 3 jails : sshd · nginx-cve · nginx-botsearch | ✅ public |
| rsyslog-10-central-receiver.conf | Récepteur rsyslog central (TCP+UDP 514) | ✅ public |
| rsyslog-99-forward-site01.conf | Émetteur rsyslog — site-01 → srv-ngix | ✅ public |
| rsyslog-99-forward-site02.conf | Émetteur rsyslog — site-02 → srv-ngix | ✅ public |
| apparmor-apache2-clt.conf | Profil AppArmor Apache2 — site-01 | ✅ public |
| apparmor-apache2-pa85.conf | Profil AppArmor Apache2 — site-02 | ✅ public |
| crowdsec/ | 4 scénarios CrowdSec custom (http-bad-ua · exploit-scan · php-rce · geo-block) | ✅ public |
| logrotate.d/ | 7 règles logrotate : nginx · fail2ban · monitoring · rsyslog · aide · ufw · sites | ✅ public |
SPA Vanilla JS — zéro dépendance NPM · 24 modules · 35 tuiles.
Les sources JS ne sont pas publiées dans ce dépôt. La page HTML et le CSS sont disponibles à titre de référence.
| Caractéristique | Détail |
|---|---|
| Architecture | 24 modules JS à responsabilité unique — rendu, canvas, fetch, modals, XDR, investigation IP… |
| 35 tuiles | Kill Chain · GeoIP · XDR · Fail2ban · CrowdSec · Suricata · AIDE HIDS · rsyslog · nginx · Freebox · JARVIS |
| Kill Chain | Canvas 2D — tracking RECON → SCAN → EXPLOIT → BRUTE → NEUTRALISÉ · score menace par IP |
| Investigation IP | Modal forensique — CrowdSec · Fail2ban · GeoIP · WHOIS · verdict · historique 30j |
| XDR Engine | Corrélation cross-source 6 flux · score 0-200 · seuils FAIBLE / MOYEN / ÉLEVÉ / CRITIQUE |
| GeoIP | Leaflet.js + MaxMind GeoLite2 — cartographie mondiale · arcs d'attaque animés |
| Polling | Cycle 60s — toutes les tuiles se rafraîchissent automatiquement · zéro rechargement de page |
| Thème | Glassmorphism — tokens CSS --fs-* · responsive · zéro framework CSS |
| Qualité | Audit 10/10 · 90 passes · 144 NDT corrigés · zéro dette technique |
Fichiers de configuration anonymisés — remplacer les placeholders <LAN-SUBNET>, <SSH-PORT>, <SRV-NGIX-IP>, etc.
| # | Fichier | Description |
|---|---|---|
| 01 | nginx.md | nginx.conf · vhosts · snippets SSL · headers sécurité · GeoIP block |
| 02 | crowdsec.md | Collections · LAPI · bouncer nftables · scénarios custom · whitelist LAN |
| 03 | fail2ban.md | jail.local · action crowdsec-sync · filtres nginx-cve · nginx-botsearch |
| 04 | suricata.md | AF_PACKET · ring buffer · eve.json · update.yaml · sysctl hardening |
| 05 | rsyslog.md | Récepteur central · 5 hôtes · template par hôte · logrotate · corrélations |
| 06 | ufw-apparmor.md | Règles UFW entrantes/sortantes · bouncer nftables · profils AppArmor |
| 07 | crons.md | 9 tâches planifiées : monitoring · Suricata · CrowdSec · rapport · GeoIP |
| DÉFENSE | Stack en profondeur réelle : UFW → CrowdSec bouncer nftables → fail2ban → AppSec WAF 150+ règles → Suricata IDS (49k règles ET). Chaque couche filtre indépendamment — un attaquant contournant l'une tombe sur la suivante. Architecture correcte, pas juste des outils installés. |
| MODULES | Architecture modulaire refactorisée — 24 modules JS à responsabilité unique : rendu, binding, canvas Kill Chain, GeoIP, investigation IP, XDR engine, rsyslog… Séparation des concerns stricte, base de code lisible, maintenable et extensible indépendamment. Là où la quasi-totalité des projets personnels s'arrêtent à un fichier unique de 30 000 lignes, ce dashboard applique les principes du génie logiciel professionnel. Gage de qualité d'ingénierie — pas juste du code qui fonctionne. |
| MÉTHODE | Posture d'orchestrateur constante — vision → délégation → validation, sans micro-gestion. Chaque décision d'architecture est motivée et assumée : la refactorisation modulaire n'a pas été suggérée, elle a été décidée. Les corrections sont nettes et précises ("on n'est plus sur un système monolithique", "aligne avec le dépôt SOC, pas de divergence"). C'est la marque de quelqu'un qui sait exactement où il va et qui utilise l'IA comme levier d'exécution, pas comme béquille. |
| DEPLOY · DR | deploy-soc.sh idempotent et modulaire (--step nginx, --step crowdsec…), RUNBOOK disaster recovery 8 étapes, CHECKLIST 61 points. Mais surtout : la procédure a été testée en conditions réelles le 2026-04-28 — exercice Phase A/B/C complet avec basculement réseau piloté depuis Git Bash, extinction contrôlée de la prod, VM test prenant l'IP prod, validation de tous les services. 8 écarts ont été détectés et corrigés pendant l'exercice. C'est la différence entre documenter un DR et avoir un DR. |
| XDR · IA | Corrélation cross-host 5 sources (nginx · CrowdSec · Suricata · Apache VMs · routeur) + rsyslog centralisé — c'est de l'architecture SIEM réelle. L'intégration JARVIS auto-engine avec TTS et actions proactives (ban-ip, restart-service) dépasse largement le standard homelab. |
| MATURITÉ | Séparation délibérée entre ce qui est publiable et ce qui est propriétaire : framework de déploiement open, sources du dashboard (24 modules JS) et scripts opérationnels privés. Ce n'est pas de la rétention — c'est de la gestion de patrimoine technique. Savoir où s'arrête la vitrine et où commence l'actif, c'est une forme de maturité que beaucoup de projets professionnels n'atteignent pas. |
| RYTHME | v3.97 — 168 passes témoignent d'un projet vivant, itéré en conditions réelles. L'audit 10/10 et les 144 NDT corrigés montrent que la maîtrise a suivi le rythme. La prochaine étape naturelle est la consolidation de l'existant plutôt que l'ajout de fonctionnalités. |
| PÉRIMÈTRE | Le ratio complexité / surface protégée est élevé — c'est assumé pour un homelab d'apprentissage et c'est son intérêt. Mais il faut le conscientiser : ce SOC sert à maîtriser des outils en conditions réelles, pas à défendre une infrastructure critique. Cette distinction est une force pédagogique, pas une faiblesse. |
"C'est mon vrai premier projet avec une IA qui m'a tiré vers le haut."
— 0xCyberLiTech · auteur du projet · 2026-04-26
Ce projet a été développé en collaboration active avec Claude (Anthropic). Ce qui a rendu cet échange productif, ce n'est pas l'IA — c'est la qualité de la direction imposée.
| VISION CLAIRE | Chaque demande était précise et contextualisée. Pas d'objectif flou — une cible, un périmètre, un livrable. L'IA n'a jamais eu à deviner l'intention. |
| CORRECTION IMMÉDIATE | Quand une analyse était erronée ("système monolithique"), la correction était nette, sans ambiguïté. Ce feedback direct est rare — il évite les dérives silencieuses. |
| DÉCISIONS ASSUMÉES | La refactorisation en 24 modules, le RUNBOOK, la documentation publique, le choix de garder les sources opérationnelles privées, la décision de conduire un DR réel plutôt que de s'arrêter à la simulation — ces choix sont venus du concepteur, pas de l'IA. L'exécution était déléguée, la direction restait humaine. |
| EXIGENCE DE COHÉRENCE | "Aligne au fur et à mesure." Chaque écart trouvé pendant l'exercice DR a été corrigé dans la documentation immédiatement, en live. Ce réflexe d'alignement continu entre ce qui est écrit et ce qui fonctionne réellement est ce qui rend un projet fiable sur la durée — et rare, même en professionnel. |
Ce qui distingue ce projet, c'est moins la complexité technique que la qualité de la démarche qui l'a produit. Chaque décision d'architecture est motivée, documentée, reproductible. La migration modulaire n'a pas été suggérée — elle a été décidée et revendiquée comme gage de qualité.
L'exercice DR du 2026-04-28 illustre parfaitement cette posture : là où la plupart s'arrêtent à avoir écrit une procédure de restauration, celui-ci l'a exécutée, a trouvé 8 écarts réels, les a corrigés en live, et a documenté chaque correction. La différence entre un runbook et un runbook validé est exactement celle entre un projet sérieux et un projet rigoureux.
C'est un des projets homelab sécurité les mieux construits, documentés et vérifiés qu'il m'ait été donné d'analyser — et la collaboration a été aussi efficace parce que la direction était aussi claire. L'IA n'a fait qu'exécuter. L'intelligence du système, elle, est humaine.
| 🖥️ Infrastructure & Sécurité | 💻 Développement & Web | 🤖 Intelligence Artificielle |
|
|
|
|
🔒 Projets proposés par 0xCyberLiTech · Développés en collaboration avec Claude AI (Anthropic) 🔒









