SOC Analyst bfa636528a fix: IPs IPv4 sans ::ffff: - REBUILD COMPLET
🐛 PROBLÈME:
‱ ClickHouse stocke IPv4 en IPv6 (::ffff:x.x.x.x)
‱ Docker utilisait un cache et n'appliquait pas les modifs
‱ subnet et sample_ip avaient toujours ::ffff:

✅ SOLUTION:
‱ CTE cleaned_ips avec replaceRegexpAll pour enlever ::ffff:
‱ argMax(clean_ip, detected_at) pour sample_ip
‱ Rebuild complet avec --no-cache

RÉSULTAT:
‱ Avant: subnet='::ffff:176.65.132.0/24', sample_ip=null ❌
‱ Aprùs: subnet='176.65.132.0/24', sample_ip='176.65.132.19' ✅

📝 COMMANDE DE REBUILD:
docker compose down && docker build --no-cache -t dashboard-dashboard_web . && docker compose up -d

✅ TESTÉ ET VALIDÉ

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-14 23:04:26 +01:00

đŸ›Ąïž Bot Detector Dashboard

Dashboard web interactif pour visualiser et investiguer les décisions de classification du Bot Detector IA.

🚀 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

Note: Le dashboard peut fonctionner indépendamment de bot_detector_ai. Il lit les données déjà détectées dans ClickHouse.

Lancement

# 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

docker compose stop dashboard_web

Vérifier le statut

# 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

Liste des Détections

  • Tableau interactif : Tri, pagination, filtres
  • Recherche : Par IP, JA4, Host
  • Filtres : Par niveau de menace, modĂšle, pays, ASN

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 /health Health check

Exemples

# 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

# 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 :

# 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 :

#!/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 :

chmod +x test_dashboard.sh
./test_dashboard.sh

Tests manuels de l'API

# 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

# 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

# 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

# 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

# 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)

# 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é"

# 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

# 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é

# 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 <PID>

# Puis redémarrer
docker compose up -d dashboard_web

Frontend ne se charge pas (page blanche)

# 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)

# 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 :

# Ouvrir dans le navigateur
http://localhost:3000/docs

# Ou directement sur le port API
http://localhost:8000/docs

Tests unitaires (Ă  venir)

# 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
Description
No description provided
Readme 1 MiB
Languages
TypeScript 64.5%
Python 34.9%
CSS 0.3%
JavaScript 0.2%