Utiliser Netcat pour des communications réseau simples

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, vous découvrirez les fondamentaux des communications réseau avec Netcat, un outil polyvalent souvent surnommé le « couteau suisse » des réseaux. Vous apprendrez comment cet utilitaire permet de lire et d’écrire des données sur des connexions réseau utilisant les protocoles TCP ou UDP.

Grâce à des exercices pratiques, vous explorerez les bases de la communication client-serveur, créerez un système de discussion simple et assimilerez des notions réseau essentielles, comme les ports. Le laboratoire vous présentera également des techniques de chiffrement élémentaires pour sécuriser la transmission des données.

Installer Netcat

Dans cette première étape, nous allons nous munir de l’outil adéquat avant de commencer nos communications d’agents secrets. Netcat est souvent appelé le « couteau suisse » des outils réseau, car il permet d’effectuer de nombreuses tâches différentes. Installons-le étape par étape sur notre système.

Commencez par ouvrir le terminal. Sur votre bureau, recherchez puis ouvrez le terminal Xfce. C’est dans ce terminal que nous saisirons toutes les commandes nécessaires pour travailler avec Netcat.

Capture d’écran de l’ouverture du terminal Xfce

Remarque : les utilisateurs gratuits ne peuvent pas se connecter à Internet. Netcat est donc déjà préinstallé dans l’environnement du laboratoire. Vous pouvez passer directement au point 4 de la liste (vérifier que Netcat est installé). Passez à la version Pro pour vous entraîner à installer Netcat vous-même.

Réservé aux utilisateurs Pro

Une fois le terminal ouvert, nous devons mettre à jour les listes de paquets. Cela permet de récupérer la version la plus récente de Netcat. Saisissez la commande suivante, puis appuyez sur Entrée :

sudo apt update

Le système peut vous demander votre mot de passe. Saisissez-le — les caractères ne s’afficheront pas pendant la frappe — puis appuyez sur Entrée. La partie sudo indique que la commande est exécutée avec les privilèges administrateur.

Maintenant que les listes de paquets sont à jour, installons Netcat. Le gestionnaire de paquets se chargera automatiquement des dépendances. Saisissez la commande suivante :

sudo apt install netcat -y

L’option -y répond automatiquement « oui » aux éventuelles demandes de confirmation, ce qui rend l’installation plus fluide. Elle est pratique lorsque vous êtes certain de vouloir installer le paquet.

Une fois l’installation terminée, vérifions que Netcat a été correctement installé. Pour cela, affichons sa version. Saisissez :
nc -h

Vous devriez voir une sortie commençant par « OpenBSD netcat », suivie d’une liste d’options. Cela signifie que Netcat est installé et prêt à l’emploi. L’option -h affiche l’aide du programme ; c’est un moyen simple de vérifier qu’il fonctionne correctement.

Félicitations ! Vous venez d’installer un puissant outil réseau. Netcat offre de nombreuses fonctionnalités, du simple transfert de fichiers à la création de connexions réseau. Dans ce laboratoire, nous nous concentrerons sur son utilisation de base afin de vous aider à comprendre ses possibilités. Considérez Netcat comme un moyen simple de connecter des ordinateurs et d’échanger des informations entre eux.

Comprendre les ports et créer un écouteur

Maintenant que notre outil de communication est prêt, découvrons les ports et configurons un écouteur. En réseau, les ports ressemblent à différentes fréquences radio : ils permettent à plusieurs communications d’avoir lieu simultanément sur un même appareil. Imaginez-les comme des portes numérotées, chacune donnant accès à un service ou à une application différente de votre ordinateur.

Créons un écouteur. Nous utiliserons le port 12345 pour notre communication. Les numéros de port vont de 0 à 65535 ; nous choisissons 12345 parce qu’il est facile à retenir et qu’il n’est généralement pas utilisé par les services système. Dans le terminal, saisissez :

nc -l 12345

Cette commande demande à Netcat d’écouter (-l) sur le port 12345. L’option -l active le mode « listen », c’est-à-dire que votre ordinateur attendra les connexions entrantes sur ce port.

Le terminal semblera se figer. Ne vous inquiétez pas : c’est le comportement attendu, car Netcat écoute désormais activement et attend qu’un autre programme se connecte au port 12345. Le curseur qui clignote indique que le programme fonctionne correctement en mode écoute.

Pour tester notre écouteur, nous devons ouvrir une autre fenêtre de terminal. Vous pouvez cliquer avec le bouton droit sur l’icône du terminal, puis sélectionner « New Terminal », ou utiliser le raccourci Ctrl+Shift+N. Ce deuxième terminal jouera le rôle de « client » et se connectera à l’écouteur.

Dans ce nouveau terminal, connectons-nous à l’écouteur. Saisissez :

nc localhost 12345

Cette commande demande à Netcat de se connecter à localhost — qui désigne votre propre ordinateur — sur le port 12345. localhost est un nom d’hôte spécial qui fait toujours référence à la machine utilisée.

Saisissez maintenant un message simple, comme « Hello », dans ce deuxième terminal, puis appuyez sur Entrée. Le message devrait apparaître dans le premier terminal, là où l’écouteur est en cours d’exécution. Cela montre comment les données circulent du terminal qui se connecte vers le terminal en écoute, en passant par le port réseau.

Écouteur et connexion Netcat

Vous pouvez continuer à saisir des messages dans l’un ou l’autre des terminaux : ils apparaîtront dans l’autre. Cela illustre la capacité bidirectionnelle de Netcat, aussi appelée communication en duplex intégral : les données peuvent circuler simultanément dans les deux directions. Essayez d’envoyer quelques messages dans les deux sens pour observer le fonctionnement.

Pour mettre fin à la connexion, appuyez sur Ctrl+C dans les deux terminaux. Ce raccourci envoie un signal d’interruption qui ferme proprement les sessions Netcat. Il est important de fermer correctement les connexions une fois les tests terminés.

Transférer des fichiers avec Netcat

Maintenant que nous savons établir une communication réseau de base avec Netcat, explorons l’une de ses applications les plus pratiques : le transfert de fichiers entre systèmes. Cette fonctionnalité simple, mais puissante, fait de Netcat un outil précieux pour les administrateurs système et les ingénieurs réseau.

Commençons par créer un fichier d’exemple à transférer. Dans votre terminal, saisissez :

cd ~/project
echo "Top Secret: The cake recipe is actually a lie" > secret.txt

Cette commande effectue deux opérations : elle se rend dans votre répertoire de projet et crée un nouveau fichier nommé secret.txt, contenant notre message d’exemple. Le symbole > redirige la sortie de la commande echo vers un fichier.

Configurons maintenant la réception du fichier. Ouvrez une fenêtre de terminal et exécutez :

cd ~/project
nc -l 12345 > received_secret.txt

Ici, nc -l 12345 démarre Netcat en mode écoute sur le port 12345. Le symbole > redirige les données reçues vers un nouveau fichier appelé received_secret.txt. Ce terminal attendra alors silencieusement les connexions entrantes.

Dans une autre fenêtre de terminal, tout en laissant la première active, nous allons envoyer le fichier :

cd ~/project
nc localhost 12345 < secret.txt

Cette commande utilise Netcat pour se connecter à notre écouteur (localhost signifie « cet ordinateur ») sur le port 12345. Le symbole < indique à Netcat d’utiliser secret.txt comme entrée, ce qui revient à envoyer le contenu du fichier via la connexion réseau.

Le transfert est instantané, car les deux extrémités se trouvent sur la même machine. Pour vérifier qu’il s’est déroulé correctement, affichez le contenu du fichier reçu :

cat received_secret.txt

La commande cat affiche le contenu du fichier, qui devrait correspondre exactement à notre message secret d’origine.

Capture d’écran d’un transfert de fichier avec Netcat

Félicitations ! Vous avez transféré un fichier avec succès à l’aide de Netcat. Nous avons utilisé localhost pour cette démonstration, mais le même procédé fonctionne entre différents ordinateurs d’un réseau : il suffit de remplacer localhost par l’adresse IP de l’ordinateur destinataire. Cette méthode simple peut être très utile pour effectuer rapidement des transferts lorsque des protocoles plus complexes ne sont pas disponibles.

Mettre en œuvre une communication chiffrée

Ajoutons maintenant une couche de sécurité à notre communication en mettant en œuvre un chiffrement avec OpenSSL et en l’intégrant à Netcat. Le chiffrement est essentiel pour protéger les informations sensibles contre l’interception et la lecture par des personnes non autorisées pendant leur transmission sur le réseau.

Nous avons déjà appris à utiliser OpenSSL dans les laboratoires précédents. OpenSSL fournit des fonctions cryptographiques robustes que nous allons exploiter pour sécuriser nos messages. Plus précisément, nous utiliserons la commande openssl enc pour chiffrer et déchiffrer les messages avec l’algorithme AES-256-CBC, un chiffrement symétrique robuste. Nous utiliserons également une phrase secrète pour dériver la clé de chiffrement : considérez-la comme un secret partagé entre l’expéditeur et le destinataire.

Commençons par créer le script d’envoi. Ce script chiffrera les messages avant de les envoyer. Ouvrez un nouveau fichier nommé secure_sender.sh :

nano secure_sender.sh

Ajoutez le contenu suivant au fichier (vous pouvez le copier-coller) :

#!/bin/bash

echo "Secure Sender - Enter messages to send. Press Ctrl+C to exit."

while true; do
  echo "Enter message:"
  read message
  encrypted=$(echo "$message" | openssl enc -aes-256-cbc -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
  echo "$encrypted" | nc -N localhost 12345
done

Ce script :

  • vous demande continuellement des messages dans une boucle ;
  • transmet votre saisie à OpenSSL afin de la chiffrer ;
  • utilise Netcat (nc) pour envoyer les données chiffrées sur le port 12345 de localhost ;
  • applique plusieurs paramètres de chiffrement, notamment un sel pour renforcer la sécurité, un encodage base64 pour permettre une transmission fiable et une dérivation de clé PBKDF2 avec 10 000 itérations.

Exemple de script d’envoi sécurisé

Appuyez sur Ctrl+X, puis sur Y et sur Enter pour enregistrer le fichier et quitter. Rendez ensuite le script exécutable :

chmod +x secure_sender.sh

Créons maintenant le script de réception. Il écoutera les messages entrants et les déchiffrera. Ouvrez un nouveau fichier nommé secure_receiver.sh :

nano secure_receiver.sh

Ajoutez le contenu suivant :

#!/bin/bash

echo "Secure Receiver - Waiting for messages. Press Ctrl+C to exit."

while true; do
  encrypted=$(nc -l 12345)
  if [ ! -z "$encrypted" ]; then
    decrypted=$(echo "$encrypted" | openssl enc -aes-256-cbc -d -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null)
    echo "Received message: $decrypted"
  fi
done

Dans l’environnement Ubuntu 22.04 utilisé par ce laboratoire, la syntaxe par défaut d’OpenBSD Netcat pour l’écoute est nc -l 12345. N’ajoutez pas -p avec -l dans ce contexte.

Ce script :

  • écoute en continu les données entrantes sur le port 12345 ;
  • transmet les données reçues à OpenSSL afin de les déchiffrer ;
  • utilise les mêmes paramètres de chiffrement que l’expéditeur pour restaurer correctement le message ;
  • affiche le message original en clair.

Appuyez sur Ctrl+X, puis sur Y et sur Enter pour enregistrer le fichier et quitter. Rendez ensuite le script exécutable :

chmod +x secure_receiver.sh

Testons maintenant notre système de communication chiffrée. Vous devrez ouvrir simultanément deux fenêtres de terminal : une pour le récepteur et une pour l’expéditeur.

Dans le premier terminal, démarrez le récepteur :

./secure_receiver.sh

Un message indiquant que le récepteur attend des messages s’affichera. Le récepteur écoute désormais activement sur le port 12345.

Dans le deuxième terminal, démarrez l’expéditeur :

./secure_sender.sh

Le programme vous invitera à saisir des messages. Tout ce que vous écrirez sera chiffré avant d’être envoyé sur le réseau.

Dans le terminal de l’expéditeur, saisissez un message puis appuyez sur Entrée. Le message chiffré sera envoyé — vous n’en verrez brièvement que la version chiffrée pendant la transmission.

Message chiffré

Dans le terminal du récepteur, le message déchiffré devrait apparaître exactement comme vous l’avez saisi dans le terminal de l’expéditeur.

Vous pouvez continuer à envoyer des messages depuis le terminal de l’expéditeur : ils seront automatiquement chiffrés, envoyés, reçus puis déchiffrés dans le terminal du récepteur. Vous obtenez ainsi une boucle complète de communication sécurisée.

Pour mettre fin à la communication, appuyez sur Ctrl+C dans les deux terminaux. Les deux scripts seront ainsi arrêtés proprement.

Cette configuration montre comment mettre en place un système de communication chiffrée simple, mais efficace. Même si nous utilisons localhost pour les tests, la même approche fonctionne sur un réseau. Les messages sont automatiquement chiffrés avant leur transmission, puis déchiffrés à leur arrivée, ce qui fournit un canal de communication sécurisé. Dans un environnement réel, n’oubliez pas qu’il faudrait utiliser des méthodes d’échange de clés plus sûres qu’un mot de passe inscrit en dur dans le script.

Résumé

Dans ce laboratoire, vous avez découvert les fondamentaux des communications réseau avec Netcat et exploré des techniques de chiffrement de base pour sécuriser le transfert de données. Vous vous êtes exercé à installer Netcat, à établir des connexions via des ports spécifiques et à transférer des fichiers entre systèmes.

Cette expérience pratique a montré, grâce à une mise en œuvre avec OpenSSL, l’importance du chiffrement dans les communications réseau. Ces compétences fondamentales constituent un excellent point de départ pour comprendre des concepts de cybersécurité plus avancés et les protocoles de communication sécurisés.