Recherche de site Web

RustNet : une interface utilisateur en texte pour la surveillance réseau en temps réel construite avec Rust


En tant qu'administrateur réseau, vous devez savoir ce que fait votre réseau en ce moment. La surveillance réseau en temps réel vous aide à détecter les pics, les anomalies, les processus défaillants ou les connexions indésirables dès qu'ils se produisent. Il existe de nombreux outils de surveillance réseau en temps réel. Récemment, je suis tombé sur un outil prometteur nommé RustNet.

RustNet est un outil de surveillance en ligne de commande construit avec Rust. Il offre une visibilité en temps réel sur les connexions réseau : quel processus les a initiées, dans quel état elles se trouvent et combien de données elles transfèrent.

Dans ce guide, nous apprendrons ce qu'est exactement RustNet, comment l'installer sur Linux et comment surveiller votre réseau en utilisant RustNet.

Qu'est-ce que RustNet ?

RustNet est un outil d'interface utilisateur terminale de surveillance réseau multiplateforme construit avec Rust. L'objectif principal de RustNet est de fournir une visibilité en temps réel des connexions réseau avec des informations détaillées sur l'état.

RustNet fonctionne dans une fenêtre de terminal, ce qui le rend adapté aux environnements où les outils graphiques comme Wireshark sont peu pratiques, notamment sur les serveurs.

Il prend en charge diverses plateformes, y compris Linux, macOS et Windows. Sur une machine Linux, il peut être installé via le gestionnaire de paquets Cargo de Rust ou Docker. Pour les utilisateurs de Fedora, il est disponible via un dépôt COPR.

C'est un projet open source disponible sur GitHub. Le projet est sous licence Apache, version 2.0.

Principales caractéristiques de RustNet

1. Surveillance en temps réel et suivi des connexions

RustNet surveille les connexions TCP, UDP, ICMP et ARP actives. Il affiche les statuts spécifiques des connexions, y compris les états détaillés pour différents protocoles :

  • États TCP : ÉTABLI, SYN_ENVOYÉ, ATTENTE_TEMPS, FERMÉ, et d'autres.
  • États QUIC : QUIC_INITIAL, QUIC_HANDSHAKE, QUIC_CONNECTED et QUIC_DRAINING.
  • États DNS : DNS_QUERY, et DNS_RESPONSE.
  • États SSH : BANNER, KEYEXCHANGE, AUTHENTICATION et ESTABLISHED (pour le protocole SSH).

2. Inspection approfondie des paquets (DPI)

L'outil détecte les protocoles d'application en inspectant le contenu des paquets :

  • Il identifie les connexions HTTP, y compris les informations sur l'hôte.
  • Il détecte les connexions HTTPS/TLS, affichant l'indication du nom du serveur (SNI).
  • Il suit les requêtes et réponses DNS.
  • Il fournit un suivi des connexions SSH, y compris la détection de version et l'état de la connexion.
  • Il surveille le protocole QUIC, en détectant spécifiquement la trame CONNECTION_CLOSE et en vérifiant la conformité à la RFC 9000. Le DPI peut être désactivé optionnellement en utilisant l'option de ligne de commande --no-dpi pour obtenir un moindre coût en ressources.

3. Identification des processus

Une capacité importante de RustNet est la capacité de associer des connexions réseau aux processus en cours d'exécution sur le système.

  • Sur Linux, il offre un support eBPF expérimental pour des performances améliorées et une charge réduite dans l'identification des processus.
  • Lorsque eBPF n'est pas disponible ou échoue, RustNet revient aux méthodes standard spécifiques à la plateforme (comme lire les fichiers /proc sur Linux ou utiliser lsof ou PKTAP sur macOS).
  • L'IU textuelle affiche quelle méthode de détection des processus est actuellement active.

4. Interface Utilisateur en Terminal (TUI) et Interactivité

RustNet utilise le framework ratatui pour fournir une interface terminal avancée :

  • Filtrage avancé : Les utilisateurs peuvent filtrer les connexions en temps réel en utilisant une recherche floue de style vim/fzf sur tous les champs, y compris les données DPI. Les filtres par mot-clé sont pris en charge (par exemple, port:44, process:firefox, sni:github.com, state:established).
  • Trier : Les connexions peuvent être triées par différentes colonnes, y compris le protocole, l'adresse distante, l'état, le processus et la bande passante (téléchargement ou envoi).
  • Indicateurs Visuels : Les connexions changent de couleur en fonction de leur expiration imminente : Jaune indique que 75 à 90 % du temps avant expiration est atteint (périmé), et Rouge indique plus de 90 % (critique, suppression imminente).

5. Architecture et exigences

RustNet utilise une architecture multithread avec des composants clés tels qu'un Fil de Capture de Paquets (utilisant libpcap), des Processeurs de Paquets, l'Enrichissement des Processus et un Fil de Nettoyage.

En raison de la nécessité de capturer des paquets, RustNet nécessite des privilèges élevés (comme sudo) sur la plupart des systèmes.

Sur Linux, des capacités réseau spécifiques (CAP_NET_RAW et CAP_NET_ADMIN) peuvent être accordées au binaire pour permettre son exécution sans accès root complet.

Installer RustNet sur Linux

Assurez-vous d'avoir les prérequis suivants :

  • RustNet est un outil multiplateforme, donc vous avez besoin d’un système fonctionnant sous Linux, macOS ou Windows.
  • Une chaîne d'outils Rust fonctionnelle (c'est-à-dire rustc et cargo)
  • Autorisations pour capturer/inspecter le trafic réseau (souvent root/administrateur ou équivalent)

Installation de Rust

Si vous n’avez pas encore installé Rust, exécutez :

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Suivez les invites. Après l'installation, exécutez :

rustc --version
cargo --version

Vous devriez voir des versions imprimées.

Installation de RustNet

Une fois Rust installé, installez RustNet via cargo :

cargo install rustnet-monitor

Exécutez ensuite la commande suivante pour accorder les capacités nécessaires pour exécuter RustNet sans sudo :

sudo setcap cap_net_raw,cap_net_admin=eip ~/.cargo/bin/rustnet

Si vous utilisez RHEL ou Fedora, vous pouvez installer Rustnet via un dépôt COPR :

sudo dnf copr enable domcyrus/rustnet
sudo dnf install rustnet

Si vous utilisez des systèmes basés sur Arch, il est disponible dans AUR. Vous pouvez l'installer en utilisant n'importe quel outil d'aide AUR comme Paru :

paru -S rustnet

Ou Youpi :

yay -S rustnet

Alternativement, vous pouvez télécharger les binaires précompilés de RustNet depuis la page des releases et l’installer en utilisant le gestionnaire de paquets de votre distribution :

Debian/Ubuntu :

sudo dpkg -i Rustnet_LinuxDEB_amd64.deb
sudo apt-get install -f
# Run with sudo
sudo rustnet
# Optional: Grant capabilities to run without sudo
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/rustnet
rustnet

RHEL/Fedora :

sudo dnf install Rustnet_LinuxRPM_x86_64.rpm
# Run with sudo
sudo rustnet
# Optional: Grant capabilities to run without sudo
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/rustnet
rustnet

Surveillez le trafic réseau en temps réel avec RustNet

La surveillance du trafic réseau en direct nécessite souvent des privilèges élevés :

  • Sur Linux, exécutez RustNet avec sudo ou assurez-vous que votre utilisateur fait partie d'un groupe ayant accès à /dev/net/tun ou aux dispositifs de capture de paquets.
  • Sur macOS, vous devrez peut-être autoriser l’« accès complet au disque » ou accorder des privilèges pour la capture de paquets dans les Réglages système.
  • Sur Windows, exécutez en tant qu’administrateur.

Avertissement : L'exécution d'outils de capture avec des privilèges élevés peut représenter un risque pour la sécurité. N'utilisez-les que depuis des sources fiables.

À des fins de démonstration, je vais exécuter RustNet sur une machine virtuelle Arch Linux.

Lancez RustNet en utilisant la commande :

sudo rustnet

Si vous voulez le lancer sans sudo, exécutez :

sudo setcap cap_net_raw,cap_net_admin=eip $(which rustnet)

Exécutez maintenant l'outil RustNet sans sudo :

rustnet

Voici à quoi ressemble l'interface par défaut de RustNet.

Par défaut, vous verrez une vue Vue d'ensemble (voir la capture d'écran ci-dessous). Il s'agit de l'écran par défaut affichant les connexions actives.

Surveillance réseau en temps réel avec RustNet - Vue d'ensemble

Section Aperçu

L'écran de présentation est grossièrement divisé en :

  • Liste des connexions actives : Chaque ligne représente une connexion active
  • Colonnes : Adresse locale, Adresse distante, État, Service, Application/Hôte, Descente/Chargement (octets), Processus
  • Volets droits/barres latérales : Statistiques récapitulatives et aperçu du trafic
  • Statut/indices clés : en bas, instructions telles que "Appuyez sur ‘h’ pour l’aide | ‘/’ pour filtrer & naviguer | ‘c’ pour copier l’adresse | Connexions : 3"

Quelques notes :

  • La ligne surlignée (avec >) est la connexion actuellement sélectionnée.
  • Le côté droit montre les statistiques de l'interface, les paquets traités et le trafic total (entrant/sortant) ainsi que l'heure de la « Dernière mise à jour ».
  • Initialement, les colonnes « Service » et « Application/Hôte » peuvent être vides (-) si RustNet ne peut pas les déterminer pour cette connexion.

Voici ce que signifie chaque colonne/indicateur :

  • Adresse/Port local : Le point de terminaison local (votre machine).
  • Adresse/Port distants : Le pair distant.
  • État : États TCP comme ESTABLISHED, LISTEN, CLOSE_WAIT, etc.
  • Octets entrants/octets sortants : Quantité de données envoyées/reçues.
  • Processus/PID : Quel processus possède la connexion (si disponible).

Comprendre les états :

  • ECOUTER : un service attendant des connexions entrantes
  • ÉTABLI : connexion active, ouverte
  • CLOSE_WAIT, FIN_WAIT, etc. : connexions en phases de terminaison

Détails/Vue des informations de connexion

Si vous appuyez sur Entrée sur une connexion, vous obtenez cette vue détaillée. Elle inclut :

  • Protocole, Adresse locale, Adresse distante
  • État (par ex. ÉTABLI)
  • Nom du processus, PID (si disponible)
  • Nom du service, application (si détectée)
  • Statistiques du trafic : octets totaux envoyés/reçus, paquets envoyés/reçus, débit actuel

Cela vous permet de zoomer sur une seule connexion pour en comprendre le comportement. Utilisez Échap (ou la touche appropriée) pour revenir à la vue d'ensemble.

Voir les détails de la connexion réseau dans RustNet TUI

Aide/Légende des touches

Appuyer sur h (ou tab) affiche ou masque l'écran d'aide.

Section d'Aide de RustNet

À partir de la capture d'écran ci-dessus, vous pouvez voir :

  • q quitte (avec confirmation)
  • Ctrl+C quitte immédiatement
  • Tab permet de passer d’un onglet à l’autre (Aperçu, Détails, Aide)
  • Touches de navigation : j, k (ou les flèches) pour monter/descendre
  • p bascule entre l'affichage des noms de service et des numéros de port
  • s trie les colonnes par cycles (Bande passante, Processus, etc.)
  • S bascule la direction du tri
  • c copie l'adresse distante dans le presse-papiers
  • / entre en mode filtre

La section d'aide listera quelques exemples de syntaxe de filtre. Vous pouvez utiliser ceci comme référence rapide.

  • /port:44
  • /src:192.168
  • /dst:github.com
  • /process:firefox

Cas d'utilisation de RustNet

En utilisant l'outil de surveillance réseau RustNet, vous pouvez repérer les problèmes en temps réel. Voici quelques exemples de la façon d'utiliser RustNet pour repérer des problèmes.

1. Détection des pics de trafic

Si vous voyez une augmentation soudaine importante des octets envoyés/reçus dans une connexion :

  • Identifier le processus
  • Vérifier l'adresse distante
  • Confirmez s'il s'agit de quelque chose d'attendu (par exemple, une sauvegarde, un téléchargement de fichier) ou de suspect

2. Connexions suspectes/Hôtes inconnus

Si une connexion apparaît vers une IP/domaine que vous ne reconnaissez pas :

  • Filtrer vers cette connexion
  • Regarde le processus et le temps
  • Résoudre DNS de manière optionnelle ou vérifier la réputation IP

3. Surveillance des services

Si vous gérez un serveur web :

  • Filtrer pour le port 80 ou 443
  • Surveillez quels clients se connectent
  • Voir la taille/le délai de réponse

Conclusion

Dans ce guide, nous avons discuté de ce qu'est RustNet, et comment installer et utiliser RustNet pour surveiller votre réseau en temps réel.

La surveillance du réseau en temps réel est une tâche importante pour un administrateur système ou réseau. Elle vous permet de voir ce qui se passe sous le capot, de détecter les anomalies et de comprendre le comportement du réseau au fur et à mesure qu'il se déroule. RustNet TUI vous offre un outil léger mais efficace pour commencer.

La meilleure façon d'en savoir plus sur cet outil est de l'utiliser quotidiennement. Essayez de faire fonctionner RustNet sur un système de test, générez du trafic (par exemple, ouvrez quelques onglets de navigateur, transférez des fichiers), explorez les filtres et expérimentez.

Au fur et à mesure que vous vous sentez à l'aise, vous pouvez étendre cette configuration aux scripts, aux alertes ou aux tableaux de bord.

Ressource :

  • Dépot GitHub RustNet