|
🎯 Conditions réelles Apprendre la cyberdéfense sur une infrastructure exposée à internet — pas un lab isolé. Chaque outil est confronté à de vrais scans, de vrais bots, de vraies tentatives d'exploit. Ce qui fonctionne ici fonctionne. |
🔒 Savoir construit, pas redistribué Le framework de déploiement et la documentation sont publics — la méthode est partageable. Les sources du dashboard (24 modules JS) et les scripts opérationnels restent privés : connaissance acquise, pas distribuée. |
🛡️ Résilience face à la compromission Si le serveur est compromis, l'attaquant ne récupère pas la configuration complète depuis ce dépôt. Les configs publiées sont anonymisées. L'archive de restauration reste hors ligne — rebuild en moins de 30 min sur VM vierge. |
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
| # | Phase | Ce qui a été construit | Pourquoi ce choix |
|---|---|---|---|
| 1 | Reverse proxy + SSL | nginx · TLS Let's Encrypt · vhosts · headers sécurité · access_log JSON structuré | Point d'entrée unique — logs structurés dès le départ pour tout le pipeline |
| 2 | CrowdSec WAF + bouncer nftables | AppSec 150+ règles · bouncer kernel-space · scénarios custom · whitelist LAN | Blocage comportemental avant que nginx traite la requête — kernel-space = zéro bypass applicatif |
| 3 | fail2ban + UFW + GeoIP block | 3 jails nginx/ssh · nftables · blocage géographique MaxMind GeoLite2 | Compléter CrowdSec : patterns ciblés, firewall stateful, filtrage géo en entrée |
| 4 | Dashboard monitoring | monitoring_gen.py · monitoring.json · SPA Vanilla JS · premières tuiles système | Sans visibilité temps réel, la défense est aveugle — dashboard avant tout ajout |
| 5 | Kill Chain + GeoIP cartographie | Classification 5 stages · score 0–100 · canvas monde · heatmap 24h · top IPs | Transformer les logs bruts en renseignement tactique — qui fait quoi, d'où, quand |
| 6 | Suricata IDS 7 + rsyslog centralisé | 49k règles Emerging Threats · AF_PACKET · eve.json · 5 hôtes centralisés | Détection réseau passive indépendante + corrélation cross-host unifiée |
| 7 | JARVIS IA défensive | Ollama phi4-reasoning · auto-engine · TTS · ban-ip · restart-service | Couche d'expertise optionnelle — le SOC se défend seul, JARVIS amplifie quand disponible |
| 8 | AppArmor + AIDE HIDS | Confinement processus · base intégrité 49k fichiers · exclusions CrowdSec hub | Dernier rempart : un attaquant qui passe tout le reste ne peut ni s'étendre ni persister |
| 9 | DR exercice réel + audit 10/10 | Exercice Phase A/B/C (2026-04-28) · 8 écarts corrigés · 144 NDT · 90 passes | Valider que le système se reconstruit réellement, pas juste sur le papier |
| Capacité | Détail | |
|---|---|---|
| 🛡️ | 8 couches défense | Blocage actif : UFW · nftables · GeoIP Block · CrowdSec WAF · Suricata IDS · Fail2ban — Contrôle : AppArmor (isolation processus) · AIDE HIDS (intégrité fichiers) |
| 🧠 | IA défensive | JARVIS (Ollama phi4-reasoning) — couche optionnelle · le SOC se défend seul 24h/24 · quand la machine Windows est active : analyse LLM · alertes TTS · ban contextuel |
| 📡 | 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 (Trixie)
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 · AIDE 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 · AIDE 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 met à disposition : Architecture complète · 9 documents techniques · framework de déploiement · configs anonymisées · rapport DR exercice réel (2026-04-28)
🔒 Les sources du dashboard (24 modules JS) et les scripts opérationnels restent privés — connaissance construite, pas redistribuée.
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 |
| 🖥️ Infrastructure & Sécurité | 💻 Développement & Web | 🤖 Intelligence Artificielle |
|
|
|
|
🔒 Projets proposés par 0xCyberLiTech · Développés en collaboration avec Claude AI (Anthropic) 🔒









