Ntopng, l'ange gardien de votre système d'information
Problématique: Est-il possible de surveiller une application dans un réseau ?
En ces temps de télétravail, les entreprises sont obligées de trouver des solutions pour contrôler leurs postes à distance. Pour cela le réseau doit être suffisamment performant pour traiter cette nouvelle demande, c'est pourquoi le projet est née. Nous allons mettre en place un système de monitoring réseau plus performant afin de calculer la bande passante utilisée par une application à différent points du réseau d’une entreprise. De la récupération des paquets, à la visualisation des courbes de métrologie, nous avons dû trouver des outils compatibles fonctionnant avec différentes distributions tel que Debian, FreeBSD ainsi qu'OpenWRT.
Nous avions 2 possibilités pour capturer le trafic réseau, les PCAP ou Netflow. Pour un monitoring avec le plus de détails possible, il faut que nous utilisions les deux dispositifs. Ayant une seule application à surveiller, nous avons choisi seulement Netflow pour limiter l'impact du monitoring sur le réseau. Netflow est un protocole réseau développé par Cisco qui permet de capturer des données (flux IP) passant sur une interface réseau. Un bridge a été créé entre un PC et l'extérieur du réseau afin que la sonde soit “transparente” pour l'ordinateur. Ainsi, tous les paquets du bridge seront capturés par la sonde et pourront être analysés.
Pour interpréter ces données, nous avons dû choisir un “Netflow analyzer”. Nos besoins étaient:
- Rétention de données capturées
- Analyse et déductions des applications circulant sur le réseau
- Création de rapports en fonctions des protocoles
- Avoir une vue en directe des paquets capturés
Le solution de SolarWind permettait de voir en direct le trafic capturé, mais ne permettait pas une rétention des données et la création de rapport. Ntopng remplissait parfaitement ces conditions avec sa version d'essai. Cet outil peut:
- Afficher le trafic réseau.
- Analyse le trafic IP (host, destination).
- Utilisation des protocoles réseaux.
- Exportation des données surveillées (MySQL, InfluxDB).
A cette étape là, nous avons fait le choix de notre protocole de capture et de notre interpréteur. Il faut trouver alors les liants qui vont transporter ces données Netflow.
Pour commencer, nous allons réaliser une infrastructure afin de capturer le trafic d'un ordinateur:
Les échanges réseau nécessaires à l'affichage de données:
- Récupération et envoie des données à un collecteur.
- Le collecteur les transforment en données ZMQ et envoie à Ntopng.
- Réception et traitement des informations par Ntopng.
Création des sondes réseaux
ipt_NETFLOW
Nous avions le choix entre 2 outils: Softflowd et ipt_NETFLOW. Sur la sonde Débian, nous avions un mot d'ordre: la rapidité. Basé sur iptables, ipt_NETFLOW est un module d'exportation de données de flux Netflow. Il est connu pour sa grande rapidité d'export étant un module kernel. Nous allons installer le package iptables-netflow-dkms, et configurer alors notre iptables.
#Configuration d'IPTABLES iptables -I OUTPUT -j NETFLOW iptables -I INPUT -j NETFLOW iptables -I FORWARD -j NETFLOW #Lancement d'ipt_NETFLOW modprobe ipt_NETFLOW destination=127.0.0.1:2055 promisc=1 protocol=10 #promisc=1: Acceptation par la carte réseau de tous les paquets #protocol=10: Protocol Netflow IPFIX
Gecobox
Nous allons installer le package Softflowd (directement disponible dans la liste des plugins) et le configurer à l'aide de l'interface graphique de la Gecobox
OpenWRT
Pour openWRT nous allons également installer Softflowd, et modifier son fichier de configuration.
Fichier de configuration de Softflowd sur OpenWRT
#Location:/etc/sysconfig/softflowd # Enable = 1 | Disable = 0 option enabled '1' # L'interface qui sera écouté option interface 'eth0 ' option pcap_file '' option timeout '' # Débit max des flows/seconde option max_flows '8192' # Configuration de l'adresse de notre collecteur option host_port '172.20.44.58:2057' # Configuration de la version des exports option export_version '9' # Informations retournées selon le modèle OSI option tracking_level 'full' #full = 7
Création d'un collecteur ZMQ
Netflow2ng
Le collecteur nous permet de:
- rassembler les flux Netflow envoyés par nos sondes.
- Transformer ces données en ZMQ pour Ntopng.
- Un seul flux en sortie donc réduction de l'impact sur le réseau de 1/n.
ce collecteur doit être capable de gérer un flux important de données d'où le choix de ZMQ qui permet des gérer un grand nombre de flux, en ouvrant et fermant plusieurs de ces threads.
Nous allons installer le collecteur à partir du Github
#Nous allons exécuter le fichier binaire ./netflow2ng/netflow2ng-v0.0.2-8-g887b99b-linux-x86_64 & [1] 2000 INFO[0000] Starting netflow2ng INFO[0001] Started ZMQ listener on: tcp://*:5556 INFO[0001] Listening on UDP :2055 Type=NetFlow #Nous pouvons ajouter des options à l'exécution du collecteur ./netflow2ng/netflow2ng-v0.0.2-8-g887b99b-linux-x86_64 & -port 2056 -zmq.listen tcp://*:5557 # -port: port d'écoute du NetFlow # -zmq.listen: écoute toutes les adresses sur le port 5556 pour transmettre les données
Notre sonde est prête à collecter et envoyer des données sur Ntopng. La dernière étape, installer Ntopng sur une machine différente.
Installation Ntopng
Nous allons ajouter le repository de Ntop afin d'installer Ntopng: https://packages.ntop.org/
Nous allons modifier le fichier de configuration de Ntopng pour démarrer sur plusieurs sockets TCP qui correspondent aux adresses de nos collecteurs. Une fois sauvegardé, nous redémarrons le service.
#location: /etc/ntopng/ntopng.conf -G=/var/run/ntopng.pid #Collecteur ipt_netflow -i=tcp://172.20.44.58:5556 #Collecteur PfSense -i=tcp://172.20.44.58:5557 #Collecteur OpenWRT -i=tcp://172.20.44.58:5558 #Port d'écoute pour l'interface web -w=3000 #Rétention des données dans une base de données MySQL -F "mysql;localhost;ntopng;flowsv4;usr;pwd"
Voici Ntopng avec les données de la sonde Débian:
Sur cette page là, nous affichons les données de MySQL. Ainsi nous allons pouvoir trier les flows selon différents critères:
- Source/destination IP
- Source/destination port
- Protocole
- Date de la capture
Ainsi nous pouvons alors isoler un seul protocole, ici Teamviewer sur son port 5938.
Cette image nous montre les flux Teamviewer avec le temps de la session, le débit max/moyen/min.
Grafana
Pour une meilleure visualisation de la bande passante, nous allons utiliser Grafana qui est un outils de génération de tableaux de bord.
Pour faire la liaison de Ntopng avec Grafana, nous allons utiliser InfluxDB.
InfluxDB est une base de données orientée haute performante (comme notre collecteur ZMQ), afin d'enregistrer les flows reçus, comme notre BdD MySQL.
Dans un premier temps, nous allons installer InfluxDB sur la machine de Ntopng.
#Packages à installer pour InfluxDB: influxdb influxdb-client influxdb-dev
Nous allons à présent faire la configuration d'InfluxDB sur Ntopng et Grafana.
Configuration sur Ntopng.
Configuration sur Grafana.
Après configurations des différents graphiques, nous obtenons.
Exemple de configuration d'un graphique.
Conclusion
Finalement avec une sonde, un collecteur et Ntopng, nous pouvons surveiller le trafic global d'un réseau d'entreprise (sa bande passante) et ainsi prévenir les éventuelles perturbations. De plus, une analyse fine de ce trafic est possible avec l'identification des applications, comme nous l'avons vu avec Teamviewer. Ainsi nous pouvons déclarer apte ou non, une solution de contrôle à distance viable pour le système d'information. Cette solution pourrait être appliquée dans le cadre de l'infogérance proposée par Geco-IT afin de monitorer tous les clients.