# đŸ›Ąïž Bot Detector Dashboard Dashboard web interactif pour visualiser et investiguer les dĂ©cisions de classification du Bot Detector IA. **Version:** 1.7.0 - Subnet Investigation + IP Reputation ## 🚀 DĂ©marrage Rapide ### PrĂ©requis - Docker et Docker Compose - Le service `clickhouse` dĂ©jĂ  dĂ©ployĂ© - Des donnĂ©es dans la table `ml_detected_anomalies` - Des donnĂ©es dans la table `http_logs` (pour les user-agents) > **Note:** Le dashboard peut fonctionner indĂ©pendamment de `bot_detector_ai`. Il lit les donnĂ©es dĂ©jĂ  dĂ©tectĂ©es dans ClickHouse. ### Lancement ```bash # 1. VĂ©rifier que .env existe cp .env.example .env # Si ce n'est pas dĂ©jĂ  fait # 2. Lancer le dashboard (avec Docker Compose v2) docker compose up -d dashboard_web # Ou avec l'ancienne syntaxe docker-compose up -d dashboard_web # 3. Ouvrir le dashboard # http://localhost:3000 ``` ### ArrĂȘt ```bash docker compose stop dashboard_web ``` ### VĂ©rifier le statut ```bash # Voir les services en cours d'exĂ©cution docker compose ps # Voir les logs en temps rĂ©el docker compose logs -f dashboard_web ``` ## 📊 FonctionnalitĂ©s ### Dashboard Principal - **MĂ©triques en temps rĂ©el** : Total dĂ©tections, menaces, bots connus, IPs uniques - **RĂ©partition par menace** : Visualisation CRITICAL/HIGH/MEDIUM/LOW - **Évolution temporelle** : Graphique des dĂ©tections sur 24h - **Incidents clusterisĂ©s** : Regroupement automatique par subnet /24 - **Top Menaces Actives** : Top 10 des IPs les plus dangereuses ### Investigation Subnet /24 (NOUVEAU) - **URL:** `/entities/subnet/x.x.x.x_24` (ex: `/entities/subnet/141.98.11.0_24`) - **Stats globales** : Total IPs, dĂ©tections, JA4 uniques, User-Agents uniques, Hosts - **Tableau des IPs** : Toutes les IPs du subnet avec leurs statistiques - **Actions par IP** : Investiguer, Voir dĂ©tails - **Sources** : `ml_detected_anomalies` (dĂ©tections) + `view_dashboard_entities` (user-agents) ### Investigation IP + RĂ©putation (NOUVEAU) - **URL:** `/investigation/:ip` - **Panel RĂ©putation IP** : - Score de menace 0-100 - Niveau: clean/low/medium/high/critical - DĂ©tection: Proxy, Hosting, VPN, Tor - GĂ©olocalisation: Pays, Ville - ASN + Organisation - **Sources** : IP-API.com + IPinfo.io (sans clĂ© API) ### Investigation (VariabilitĂ©) - **Vue dĂ©tails** : Cliquez sur une IP/JA4/pays/ASN pour investiguer - **VariabilitĂ© des attributs** : - User-Agents associĂ©s (avec pourcentages) - JA4 fingerprints - Pays de provenance - ASN - Hosts contactĂ©s - Niveaux de menace - **Insights automatiques** : DĂ©tection de comportements suspects - **Navigation enchaĂźnable** : Cliquez sur un attribut pour creuser ## đŸ—ïž Architecture ``` ┌─────────────────────────────────────────────────────────┐ │ Docker Compose │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │ │ ClickHouse │ │ bot_detector│ │ dashboard_web │ │ │ │ :8123 │ │ (existant) │ │ :3000 (web) │ │ │ │ :9000 │ │ │ │ :8000 (API) │ │ │ └──────┬──────┘ └──────┬──────┘ └────────┬────────┘ │ │ └────────────────┮───────────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ### Composants | Composant | Technologie | Port | Description | |-----------|-------------|------|-------------| | **Frontend** | React + TypeScript + Tailwind | 3000 | Interface utilisateur | | **Backend API** | FastAPI (Python) | 8000 | API REST | | **Database** | ClickHouse (existant) | 8123 | Base de donnĂ©es | ## 📁 Structure ``` dashboard/ ├── Dockerfile # Image Docker multi-stage ├── requirements.txt # DĂ©pendances Python ├── backend/ │ ├── main.py # Application FastAPI │ ├── config.py # Configuration │ ├── database.py # Connexion ClickHouse │ ├── models.py # ModĂšles Pydantic │ └── routes/ │ ├── metrics.py # Endpoint /api/metrics │ ├── detections.py # Endpoint /api/detections │ ├── variability.py # Endpoint /api/variability │ └── attributes.py # Endpoint /api/attributes └── frontend/ ├── package.json # DĂ©pendances Node ├── src/ │ ├── App.tsx # Composant principal │ ├── components/ │ │ ├── DetectionsList.tsx │ │ ├── DetailsView.tsx │ │ └── VariabilityPanel.tsx │ ├── hooks/ │ │ ├── useMetrics.ts │ │ ├── useDetections.ts │ │ └── useVariability.ts │ └── api/ │ └── client.ts # Client API ``` ## 🔌 API ### Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | GET | `/api/metrics` | MĂ©triques globales | | GET | `/api/metrics/threats` | Distribution par menace | | GET | `/api/detections` | Liste des dĂ©tections | | GET | `/api/detections/{id}` | DĂ©tails d'une dĂ©tection | | GET | `/api/variability/{type}/{value}` | VariabilitĂ© d'un attribut | | GET | `/api/attributes/{type}` | Liste des valeurs uniques | | GET | `/api/incidents/clusters` | Incidents clusterisĂ©s par subnet /24 | | GET | `/api/entities/subnet/{subnet}` | Investigation subnet (ex: `141.98.11.0/24`) | | GET | `/api/entities/{type}/{value}` | Investigation entitĂ© (IP, JA4, UA, etc.) | | GET | `/api/reputation/ip/{ip}` | RĂ©putation IP (IP-API + IPinfo) | | GET | `/api/analysis/{ip}/subnet` | Analyse subnet / ASN | | GET | `/api/analysis/{ip}/country` | Analyse pays | | GET | `/api/analysis/{ip}/ja4` | Analyse JA4 | | GET | `/api/analysis/{ip}/user-agents` | Analyse User-Agents | | GET | `/api/analysis/{ip}/recommendation` | Recommandation de classification | | POST | `/api/analysis/classifications` | Sauvegarder classification SOC | | GET | `/health` | Health check | ### Exemples ```bash # MĂ©triques globales curl http://localhost:3000/api/metrics # DĂ©tections avec filtres curl "http://localhost:3000/api/detections?threat_level=CRITICAL&page=1" # VariabilitĂ© d'une IP curl http://localhost:3000/api/variability/ip/192.168.1.100 # Investigation subnet (URL encode / en _24) curl "http://localhost:3000/api/entities/subnet/141.98.11.0_24?hours=24" # RĂ©putation IP curl http://localhost:3000/api/reputation/ip/141.98.11.209 # Incidents clusterisĂ©s curl http://localhost:3000/api/incidents/clusters?limit=20 # Liste des pays curl http://localhost:3000/api/attributes/country ``` ## ⚙ Configuration ### Variables d'Environnement | Variable | DĂ©faut | Description | |----------|--------|-------------| | `CLICKHOUSE_HOST` | `clickhouse` | HĂŽte ClickHouse | | `CLICKHOUSE_DB` | `mabase_prod` | Base de donnĂ©es | | `CLICKHOUSE_USER` | `admin` | Utilisateur | | `CLICKHOUSE_PASSWORD` | `` | Mot de passe | | `API_PORT` | `8000` | Port de l'API | Ces variables sont lues depuis le fichier `.env` Ă  la racine du projet. ## 🔍 Workflows d'Investigation ### Exemple 1: Investiguer une IP suspecte 1. **Dashboard** → Voir une IP classifiĂ©e 🔮 CRITICAL 2. **Clic sur l'IP** → Ouvre la vue dĂ©tails 3. **Observer User-Agents** → 3 UA diffĂ©rents dĂ©tectĂ©s 4. **Clic sur "python-requests"** → Voir toutes les IPs avec cet UA 5. **DĂ©couvrir 12 IPs** → Possible botnet 6. **Action** → Noter pour blacklist ### Exemple 2: Analyser un ASN 1. **Filtre** → ASN: OVH (AS16276) 2. **Voir 523 dĂ©tections** → Beaucoup d'activitĂ© 3. **VariabilitĂ©** → 89 IPs diffĂ©rentes, 15 pays 4. **Insight** → "ASN de type hosting → Souvent utilisĂ© pour des bots" 5. **Conclusion** → ActivitĂ© normale pour un hĂ©bergeur ## 🎹 ThĂšme Le dashboard utilise un **thĂšme sombre** optimisĂ© pour la sĂ©curitĂ© : - **Background** : Slate 900/800/700 - **Menaces** : Rouge (CRITICAL), Orange (HIGH), Jaune (MEDIUM), Vert (LOW) - **Accents** : Blue (primaire), Emerald (succĂšs) ## 📝 Logs Les logs du dashboard sont accessibles via Docker : ```bash # Logs du container docker logs dashboard_web # Logs en temps rĂ©el docker logs -f dashboard_web ``` ## đŸ§Ș Tests et Validation ### Script de test rapide CrĂ©ez un fichier `test_dashboard.sh` : ```bash #!/bin/bash echo "=== Test Dashboard Bot Detector ===" # 1. Health check echo -n "1. Health check... " curl -s http://localhost:3000/health > /dev/null && echo "✅ OK" || echo "❌ ÉCHOUÉ" # 2. API Metrics echo -n "2. API Metrics... " curl -s http://localhost:3000/api/metrics | jq -e '.summary' > /dev/null && echo "✅ OK" || echo "❌ ÉCHOUÉ" # 3. API Detections echo -n "3. API Detections... " curl -s http://localhost:3000/api/detections | jq -e '.items' > /dev/null && echo "✅ OK" || echo "❌ ÉCHOUÉ" # 4. Frontend echo -n "4. Frontend HTML... " curl -s http://localhost:3000 | grep -q "Bot Detector" && echo "✅ OK" || echo "❌ ÉCHOUÉ" echo "=== Tests terminĂ©s ===" ``` Rendez-le exĂ©cutable et lancez-le : ```bash chmod +x test_dashboard.sh ./test_dashboard.sh ``` ### Tests manuels de l'API ```bash # 1. Health check curl http://localhost:3000/health # 2. MĂ©triques globales curl http://localhost:3000/api/metrics | jq # 3. Liste des dĂ©tections (page 1, 25 items) curl "http://localhost:3000/api/detections?page=1&page_size=25" | jq # 4. Filtrer par menace CRITICAL curl "http://localhost:3000/api/detections?threat_level=CRITICAL" | jq '.items[].src_ip' # 5. Distribution par menace curl http://localhost:3000/api/metrics/threats | jq # 6. Liste des IPs uniques (top 10) curl "http://localhost:3000/api/attributes/ip?limit=10" | jq # 7. VariabilitĂ© d'une IP (remplacer par une IP rĂ©elle) curl http://localhost:3000/api/variability/ip/192.168.1.100 | jq # 8. VariabilitĂ© d'un pays curl http://localhost:3000/api/variability/country/FR | jq # 9. VariabilitĂ© d'un ASN curl http://localhost:3000/api/variability/asn/16276 | jq ``` ### Test du Frontend ```bash # VĂ©rifier que le HTML est servi curl -s http://localhost:3000 | head -20 # Ou ouvrir dans le navigateur # http://localhost:3000 ``` ### ScĂ©narios de test utilisateur 1. **Navigation de base** - Ouvrir http://localhost:3000 - VĂ©rifier que les mĂ©triques s'affichent - Cliquer sur "📋 DĂ©tections" 2. **Recherche et filtres** - Rechercher une IP : `192.168` - Filtrer par menace : CRITICAL - Changer de page 3. **Investigation (variabilitĂ©)** - Cliquer sur une IP dans le tableau - VĂ©rifier la section "User-Agents" (plusieurs valeurs ?) - Cliquer sur un User-Agent pour investiguer - Utiliser le breadcrumb pour revenir en arriĂšre 4. **Insights** - Trouver une IP avec plusieurs User-Agents - VĂ©rifier que l'insight "Possible rotation/obfuscation" s'affiche ### VĂ©rifier les donnĂ©es ClickHouse ```bash # Compter les dĂ©tections (24h) docker compose exec clickhouse clickhouse-client -d mabase_prod -q \ "SELECT count() FROM ml_detected_anomalies WHERE detected_at >= now() - INTERVAL 24 HOUR" # Voir un Ă©chantillon docker compose exec clickhouse clickhouse-client -d mabase_prod -q \ "SELECT src_ip, threat_level, model_name, detected_at FROM ml_detected_anomalies ORDER BY detected_at DESC LIMIT 5" # VĂ©rifier les vues du dashboard docker compose exec clickhouse clickhouse-client -d mabase_prod -q \ "SELECT * FROM view_dashboard_summary" ``` --- ## 🐛 DĂ©pannage ### Diagnostic rapide ```bash # 1. VĂ©rifier que les services tournent docker compose ps # 2. VĂ©rifier les logs du dashboard docker compose logs dashboard_web | tail -50 # 3. Tester la connexion ClickHouse depuis le dashboard docker compose exec dashboard_web curl -v http://clickhouse:8123/ping ``` ### Le dashboard ne dĂ©marre pas ```bash # VĂ©rifier les logs docker compose logs dashboard_web # Erreur courante: Port dĂ©jĂ  utilisĂ© # Solution: Changer le port dans docker-compose.yml # Erreur courante: Image non construite docker compose build dashboard_web docker compose up -d dashboard_web ``` ### Aucune donnĂ©e affichĂ©e (dashboard vide) ```bash # 1. VĂ©rifier qu'il y a des donnĂ©es dans ClickHouse docker compose exec clickhouse clickhouse-client -d mabase_prod -q \ "SELECT count() FROM ml_detected_anomalies WHERE detected_at >= now() - INTERVAL 24 HOUR" # Si le rĂ©sultat est 0: # - Lancer bot_detector_ai pour gĂ©nĂ©rer des donnĂ©es docker compose up -d bot_detector_ai docker compose logs -f bot_detector_ai # - Ou importer des donnĂ©es manuellement ``` ### Erreur "Connexion ClickHouse Ă©chouĂ©" ```bash # 1. VĂ©rifier que ClickHouse est dĂ©marrĂ© docker compose ps clickhouse # 2. Tester la connexion docker compose exec clickhouse clickhouse-client -q "SELECT 1" # 3. VĂ©rifier les credentials dans .env cat .env | grep CLICKHOUSE # 4. RedĂ©marrer le dashboard docker compose restart dashboard_web # 5. VĂ©rifier les logs d'erreur docker compose logs dashboard_web | grep -i error ``` ### Erreur 404 sur les routes API ```bash # VĂ©rifier que l'API rĂ©pond curl http://localhost:3000/health curl http://localhost:3000/api/metrics # Si 404, redĂ©marrer le dashboard docker compose restart dashboard_web ``` ### Port 3000 dĂ©jĂ  utilisĂ© ```bash # Option 1: Changer le port dans docker-compose.yml # Remplacer: - "3000:8000" # Par: - "8080:8000" # Option 2: Trouver et tuer le processus lsof -i :3000 kill # Puis redĂ©marrer docker compose up -d dashboard_web ``` ### Frontend ne se charge pas (page blanche) ```bash # 1. VĂ©rifier la console du navigateur (F12) # 2. VĂ©rifier que le build frontend existe docker compose exec dashboard_web ls -la /app/frontend/dist # 3. Si vide, reconstruire l'image docker compose build --no-cache dashboard_web docker compose up -d dashboard_web ``` ### Logs d'erreur courants | Erreur | Cause | Solution | |--------|-------|----------| | `Connection refused` | ClickHouse pas dĂ©marrĂ© | `docker compose up -d clickhouse` | | `Authentication failed` | Mauvais credentials | VĂ©rifier `.env` | | `Table doesn't exist` | Vues non créées | Lancer `deploy_views.sql` | | `No data available` | Pas de donnĂ©es | Lancer `bot_detector_ai` | --- ## 🔒 SĂ©curitĂ© - **Pas d'authentification** : Dashboard conçu pour un usage local - **CORS restreint** : Seulement localhost:3000 - **Rate limiting** : 100 requĂȘtes/minute - **Credentials** : Via variables d'environnement (jamais en dur) ## 📊 Performances - **Temps de chargement** : < 2s (avec donnĂ©es) - **RequĂȘtes ClickHouse** : OptimisĂ©es avec agrĂ©gations - **RafraĂźchissement auto** : 30 secondes (mĂ©triques) ## đŸ§Ș DĂ©veloppement ### Build local (sans Docker) ```bash # Backend cd dashboard pip install -r requirements.txt python -m uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000 # Frontend (dans un autre terminal) cd dashboard/frontend npm install npm run dev # http://localhost:5173 ``` ### Documentation API interactive L'API inclut une documentation Swagger interactive : ```bash # Ouvrir dans le navigateur http://localhost:3000/docs # Ou directement sur le port API http://localhost:8000/docs ``` ### Tests unitaires (Ă  venir) ```bash # Backend (pytest) cd dashboard pytest backend/tests/ # Frontend (jest) cd dashboard/frontend npm test ``` ## 📄 License MĂȘme license que le projet principal Bot Detector. --- ## 📞 Support Pour toute question ou problĂšme : 1. VĂ©rifier la section **🐛 DĂ©pannage** ci-dessus 2. Consulter les logs : `docker compose logs dashboard_web` 3. VĂ©rifier que ClickHouse contient des donnĂ©es 4. Ouvrir une issue sur le dĂ©pĂŽt