🛡️ Construisez Votre Propre Système de Surveillance Réseau avec ESP32 (Alternative DIY au FortiGate)

💡 Note du Maker : Au lieu d'acheter un firewall coûteux comme le FortiGate 100F (plusieurs milliers d'euros), découvrez comment créer votre propre système de surveillance réseau domestique avec un ESP32 pour moins de 15€ !
Projet DIY de surveillance réseau avec ESP32 pour monitorer les appareils connectés
Figure 1 : Système de surveillance réseau DIY basé sur ESP32

Pourquoi Créer Votre Propre Système de Surveillance Réseau ?

Les solutions professionnelles comme FortiGate coûtent cher et sont surdimensionnées pour un usage domestique. Avec un ESP32, vous pouvez :

  • Surveiller les appareils connectés à votre réseau en temps réel
  • Détecter les intrusions et appareils non autorisés
  • Monitorer la bande passante et la consommation de données
  • Bloquer des appareils spécifiques via MAC filtering
  • Coût total : ~15€ vs plusieurs milliers pour une solution pro

📦 Liste des Composants (BOM)

Composant Quantité Prix
ESP32 DevKit V1 (WiFi + Bluetooth) 1 $5-8
Écran OLED 0.96" I2C (affichage temps réel) 1 $4-6
Module Ethernet W5500 (optionnel, pour connexion filaire) 1 $5-8
TOTAL - $14-22

🔧 Fonctionnalités du Système DIY

  • Scan réseau automatique : Détection de tous les appareils connectés
  • Alertes en temps réel : Notification quand un nouvel appareil se connecte
  • Filtrage MAC : Liste blanche/noire d'appareils autorisés
  • Statistiques de bande passante : Suivi de la consommation de données
  • Interface Web : Tableau de bord accessible depuis navigateur
  • Intégration MQTT : Compatible avec Home Assistant

💻 Code Arduino Complet

/* * Système de Surveillance Réseau DIY avec ESP32 * TechFix Hub - DIY Electronics & IoT Projects * * Fonctionnalités : * - Scan des appareils connectés au réseau WiFi * - Détection d'intrusion (nouveaux appareils) * - Affichage OLED temps réel * - Alertes via MQTT */ #include #include #include #include #include #include // Configuration WiFi const char* ssid = "VOTRE_SSID"; const char* password = "VOTRE_PASSWORD"; // Configuration OLED #define OLED_SDA 21 #define OLED_SCL 22 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Serveur Web WebServer server(80); // MQTT (optionnel) WiFiClient espClient; PubSubClient mqttClient(espClient); const char* mqtt_server = "192.168.1.100"; // Liste des appareils connus (MAC addresses autorisées) String allowedMACs[] = { "AA:BB:CC:DD:EE:01", // Téléphone "AA:BB:CC:DD:EE:02", // Ordinateur "AA:BB:CC:DD:EE:03" // Tablette }; int allowedCount = 3; // Structure pour stocker les appareils détectés struct Device { String mac; String ip; int rssi; unsigned long lastSeen; bool isNew; }; Device detectedDevices[50]; int deviceCount = 0; void setup() { Serial.begin(115200); // Initialisation OLED if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("Erreur OLED")); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0, 0); display.println("Network Monitor"); display.println("Initialisation..."); display.display(); // Connexion WiFi WiFi.begin(ssid, password); display.println("Connexion WiFi..."); display.display(); int attempts = 0; while (WiFi.status() != WL_CONNECTED && attempts < 20) { delay(500); Serial.print("."); attempts++; } if (WiFi.status() == WL_CONNECTED) { display.println("WiFi Connecte!"); display.print("IP: "); display.println(WiFi.localIP()); display.display(); // Configuration mDNS if (MDNS.begin("networkmonitor")) { Serial.println("MDNS responder started"); } // Configuration serveur Web setupWebServer(); // Configuration MQTT (optionnel) mqttClient.setServer(mqtt_server, 1883); connectToMQTT(); } else { display.println("Echec connexion WiFi"); display.display(); } } void loop() { server.handleClient(); if (!mqttClient.connected()) { connectToMQTT(); } mqttClient.loop(); // Scan réseau toutes les 30 secondes static unsigned long lastScan = 0; if (millis() - lastScan > 30000) { lastScan = millis(); scanNetwork(); updateDisplay(); } delay(100); } void scanNetwork() { int n = WiFi.scanNetworks(); if (n == 0) { Serial.println("Aucun reseau detecte"); return; } Serial.print(n); Serial.println(" reseaux detectes"); for (int i = 0; i < n; ++i) { String ssid = WiFi.SSID(i); String mac = WiFi.BSSIDstr(i); int rssi = WiFi.RSSI(i); // Vérifier si c'est un nouvel appareil bool isKnown = false; for (int j = 0; j < allowedCount; j++) { if (mac.equalsIgnoreCase(allowedMACs[j])) { isKnown = true; break; } } if (!isKnown && deviceCount < 50) { // Nouvel appareil détecté! detectedDevices[deviceCount].mac = mac; detectedDevices[deviceCount].ip = "N/A"; detectedDevices[deviceCount].rssi = rssi; detectedDevices[deviceCount].lastSeen = millis(); detectedDevices[deviceCount].isNew = true; deviceCount++; // Alerte MQTT String alertMsg = "Nouvel appareil: " + mac + " (" + ssid + ")"; mqttClient.publish("home/network/alert", alertMsg.c_str()); Serial.println("ALERTE: " + alertMsg); } } WiFi.scanDelete(); } void updateDisplay() { display.clearDisplay(); display.setCursor(0, 0); display.println("Appareils:"); display.print(deviceCount); display.println(" detectes"); display.println(); // Afficher les 3 derniers appareils int startIdx = max(0, deviceCount - 3); for (int i = startIdx; i < deviceCount; i++) { display.print(i + 1); display.print(": "); display.println(detectedDevices[i].mac.substring(12)); } display.display(); } void setupWebServer() { server.on("/", [](){ String html = "

Network Monitor

"; html += "

Appareils detectes: " + String(deviceCount) + "

"; html += ""; for (int i = 0; i < deviceCount; i++) { html += ""; html += ""; html += ""; } html += "
MACRSSIDerniere vue
" + detectedDevices[i].mac + "" + String(detectedDevices[i].rssi) + " dBm" + String((millis() - detectedDevices[i].lastSeen)/1000) + "s
"; server.send(200, "text/html", html); }); server.begin(); } void connectToMQTT() { if (mqttClient.connect("ESP32NetworkMonitor")) { Serial.println("Connecte au broker MQTT"); mqttClient.publish("home/network/status", "En ligne"); } }

🔌 Schéma de Câblage

ESP32          OLED 0.96"
─────          ──────────
3.3V    ───→   VCC
GND     ───→   GND
GPIO 21 ───→   SDA
GPIO 22 ───→   SCL

🎯 Comparaison: DIY vs FortiGate Professionnel

Fonctionnalité Solution DIY ESP32 FortiGate 100F
Coût ~15€ ~3000-5000€
Consommation ~0.5W ~30W
Débit max ~150 Mbps (WiFi) 20 Gbps
Appareils supportés ~50 appareils 500+ appareils
Complexité Moyenne (DIY) Élevée (Pro)
Personnalisation Totale (open source) Limitée

🚀 Améliorations Possibles

  • Ajouter un module Ethernet pour une connexion filaire stable
  • Intégrer un capteur de température pour monitorer l'environnement
  • Ajouter un buzzer pour alertes sonores
  • Créer une base de données locale pour historique
  • Intégrer avec Telegram Bot pour notifications mobiles

⚠️ Limites du Système DIY

  • Débit limité : L'ESP32 ne peut pas gérer du trafic réseau intense comme un firewall pro
  • Fonctionnalités basiques : Pas de deep packet inspection ou VPN avancé
  • Usage domestique uniquement : Ce projet est parfait pour la maison, pas pour une entreprise

📊 Intégration avec Home Assistant

Ajoutez cette configuration dans votre configuration.yaml :

# configuration.yaml - Home Assistant mqtt: sensor: - name: "Network Devices Count" state_topic: "home/network/devices/count" unit_of_measurement: "devices" - name: "Network Alerts" state_topic: "home/network/alert" automation: - alias: "Alerte Nouvel Appareil Réseau" trigger: platform: mqtt topic: "home/network/alert" action: - service: notify.mobile_app data: title: "🚨 Nouvel appareil détecté!" message: "{{ trigger.payload }}"

Conclusion

Ce projet DIY vous permet de créer un système de surveillance réseau fonctionnel pour une fraction du coût d'une solution professionnelle. Bien qu'il ne remplace pas un FortiGate pour des besoins entreprises, il est parfait pour :

  • ✅ Surveiller votre réseau domestique
  • ✅ Détecter les intrusions et appareils non autorisés
  • ✅ Apprendre les concepts de sécurité réseau
  • ✅ Intégrer avec votre écosystème IoT existant

Prochaine étape : Consultez notre guide sur la création d'un routeur WiFi avec ESP32 pour aller plus loin !

Bottom Ad [Post Page]