Utilisation de Netcat pour la communication réseau simple

LinuxBeginner
Pratiquer maintenant

Introduction

Dans cet atelier, vous allez acquérir les bases de la communication réseau à l'aide de Netcat, un outil polyvalent souvent qualifié de « couteau suisse » du réseautage. Vous découvrirez comment cet utilitaire puissant permet de lire et d'écrire des données à travers des connexions réseau en utilisant les protocoles TCP ou UDP.

Grâce à des exercices pratiques, vous explorerez les fondamentaux de la communication client-serveur, créerez un système de chat rudimentaire et appréhenderez des concepts réseaux essentiels tels que les ports. Cet atelier introduira également des techniques de chiffrement de base pour sécuriser la transmission des données.

Installation de Netcat

Avant de commencer nos communications d'agent secret, nous devons nous équiper du bon outil. Netcat est souvent appelé le « couteau suisse » des outils réseau car il peut gérer de nombreuses tâches différentes. Installons Netcat sur notre système étape par étape.

  1. Tout d'abord, ouvrons le terminal. Sur votre bureau, localisez et ouvrez le Xfce Terminal. C'est ici que nous taperons toutes nos commandes pour travailler avec Netcat.
Capture d'écran de l'ouverture du terminal Xfce

Remarque : Les utilisateurs gratuits ne peuvent pas se connecter à Internet, c'est pourquoi Netcat est déjà pré-installé dans l'environnement de l'atelier. Vous pouvez passer directement au point 4 de la liste (vérifier si Netcat est installé). Passez à un compte Pro pour vous entraîner à installer Netcat par vous-même.

Utilisateurs Pro uniquement
  1. Une fois le terminal ouvert, nous devons mettre à jour les listes de paquets. Cela garantit que nous obtenons la version la plus récente de Netcat. Tapez la commande suivante et appuyez sur Entrée :
sudo apt update

Le système pourrait vous demander votre mot de passe. Tapez-le (les caractères ne s'afficheront pas pendant la saisie) et appuyez sur Entrée. Le préfixe sudo signifie que nous exécutons cette commande avec des privilèges d'administrateur.

  1. Maintenant que nos listes de paquets sont à jour, installons Netcat. Le gestionnaire de paquets s'occupera automatiquement de toutes les dépendances. Entrez la commande suivante :
sudo apt install netcat -y

L'option -y répond automatiquement « oui » à toutes les invites, ce qui rend l'installation plus fluide. C'est utile lorsque vous êtes certain de vouloir installer le paquet.

  1. Une fois l'installation terminée, vérifions que Netcat a été correctement installé. Nous pouvons le faire en vérifiant sa version. Entrez :
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 les informations d'aide, ce qui est un bon moyen de tester si un programme fonctionne.

  1. Félicitations ! Vous venez d'installer un outil réseau puissant. Netcat possède de nombreuses fonctionnalités, du simple transfert de fichiers à la création de connexions réseau complexes. Dans cet atelier, nous nous concentrerons sur son utilisation de base pour vous aider à comprendre ses capacités. Considérez Netcat comme un moyen simple de connecter des ordinateurs et d'envoyer 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 (listener). En réseau, les ports sont comme les différents canaux d'une radio : ils permettent à plusieurs communications de se dérouler simultanément sur le même appareil. Imaginez-les comme des portes numérotées où chaque porte mène à un service ou une application différente sur votre ordinateur.

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

    nc -l 12345

    Cette commande demande à Netcat d'écouter (option -l) sur le port 12345. Le -l signifie mode « listen » (écoute), ce qui veut dire que votre ordinateur attendra des connexions entrantes sur ce port.

  2. Le terminal semblera figé. Ne vous inquiétez pas ! C'est le comportement attendu car Netcat est maintenant en train d'écouter activement et attend que quelqu'un se connecte au port 12345. Le curseur clignotant signifie que le programme fonctionne correctement en mode écoute.

  3. Pour tester notre écouteur, nous devons ouvrir une autre fenêtre de terminal. Vous pouvez le faire en faisant un clic droit sur l'icône du terminal et en sélectionnant « Nouveau terminal » ou en utilisant le raccourci Ctrl+Shift+N. Ce second terminal agira comme notre « client » qui se connecte à l'écouteur.

  4. Dans ce nouveau terminal, nous allons nous connecter à notre écouteur. Tapez :

    nc localhost 12345

    Cette commande demande à Netcat de se connecter à localhost (ce 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 à votre machine actuelle.

  5. Maintenant, tapez un message simple comme « Bonjour » dans ce second terminal et appuyez sur Entrée. Vous devriez voir le message apparaître dans le premier terminal où l'écouteur est actif. Cela démontre comment les données voyagent du terminal de connexion vers le terminal d'écoute via le port réseau.

Écouteur Netcat et connexion
  1. Vous pouvez continuer à taper des messages dans l'un ou l'autre des terminaux, et ils apparaîtront dans l'autre. Cela montre la capacité « full-duplex » de Netcat, ce qui signifie que la communication peut circuler dans les deux sens simultanément. Essayez d'envoyer quelques messages pour voir comment cela fonctionne.

  2. Pour mettre fin à la connexion, appuyez sur Ctrl+C dans les deux terminaux. Ce raccourci clavier envoie un signal d'interruption qui ferme proprement les sessions Netcat. Il est important de fermer correctement les connexions lorsque vous avez terminé vos tests.

Transfert de fichiers avec Netcat

Maintenant que nous avons appris à é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 capacité simple mais puissante fait de Netcat un outil précieux pour les administrateurs système et les ingénieurs réseau.

  1. Tout d'abord, nous allons créer un fichier d'exemple à transférer. Dans votre terminal, tapez :

    cd ~/project
    echo "Top Secret : La recette du gâteau est un mensonge" > secret.txt

    Cette commande fait deux choses : elle se déplace 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.

  2. Nous allons maintenant configurer la partie réception de notre transfert de fichiers. Ouvrez une fenêtre de terminal et exécutez :

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

    Ici, nc -l 12345 lance Netcat en mode écoute sur le port 12345. Le > redirige toutes les données entrantes vers un nouveau fichier appelé received_secret.txt. Ce terminal va maintenant attendre silencieusement les connexions entrantes.

  3. Dans une fenêtre de terminal séparée (tout en laissant la première tourner), nous allons envoyer notre fichier :

    cd ~/project
    nc localhost 12345 < secret.txt

    Cette commande utilise Netcat pour se connecter à notre écouteur (localhost signifie « ce même ordinateur ») sur le port 12345. Le symbole < indique à Netcat d'utiliser secret.txt comme source d'entrée, envoyant ainsi le contenu du fichier à travers la connexion réseau.

  4. Le transfert est instantané car les deux extrémités sont sur la même machine. Pour vérifier la réussite du transfert, consultez 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 du transfert de fichiers Netcat
  1. Félicitations ! Vous avez réussi à transférer un fichier à l'aide de Netcat. Bien que nous ayons utilisé localhost pour cette démonstration, le même processus fonctionne entre différents ordinateurs sur un réseau : il suffit de remplacer localhost par l'adresse IP de l'ordinateur récepteur. Cette méthode simple peut être incroyablement utile pour des transferts de fichiers rapides lorsque des protocoles plus complexes ne sont pas disponibles.

Mise en œuvre d'une communication chiffrée

Dans notre dernière étape, ajoutons une couche de sécurité à notre communication en implémentant le chiffrement avec OpenSSL et en l'intégrant à Netcat. Le chiffrement est essentiel pour empêcher que des informations sensibles ne soient interceptées et lues par des tiers non autorisés lors de la transmission sur le réseau.

Nous avons déjà appris à utiliser OpenSSL dans les ateliers 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 à l'aide du chiffrement AES-256-CBC, qui est un algorithme de chiffrement symétrique puissant. Nous utiliserons également une phrase de passe pour dériver la clé de chiffrement — considérez cela comme un secret partagé entre l'expéditeur et le destinataire.

  1. Tout d'abord, créons le script d'envoi. Ce script s'occupera de chiffrer et d'envoyer les messages. Ouvrez un nouveau fichier nommé secure_sender.sh :

    nano secure_sender.sh
  2. Ajoutez le contenu suivant au fichier (vous pouvez copier et coller le contenu) :

    #!/bin/bash
    
    echo "Expéditeur sécurisé - Entrez les messages à envoyer. Appuyez sur Ctrl+C pour quitter."
    
    while true; do
      echo "Entrez le 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 fonctionne de la manière suivante :

    • Il vous demande continuellement des messages dans une boucle.
    • Il prend votre saisie et la transmet à OpenSSL pour le chiffrement.
    • Il utilise Netcat (nc) pour envoyer les données chiffrées au port 12345 sur localhost.
    • Les paramètres de chiffrement incluent un « salt » pour plus de sécurité, l'encodage base64 pour une transmission sûre, et la dérivation de clé PBKDF2 avec 10 000 itérations.
    Exemple de script d'expéditeur sécurisé
  3. Appuyez sur Ctrl+X, puis Y, et Entrée pour sauvegarder et quitter le fichier. Rendez le script exécutable :

    chmod +x secure_sender.sh
  4. Maintenant, créons le script de réception. Ce script écoutera et déchiffrera les messages entrants. Ouvrez un nouveau fichier nommé secure_receiver.sh :

    nano secure_receiver.sh
  5. Ajoutez le contenu suivant :

    #!/bin/bash
    
    echo "Récepteur sécurisé - En attente de messages. Appuyez sur Ctrl+C pour quitter."
    
    while true; do
      encrypted=$(nc -l -p 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 "Message reçu : $decrypted"
      fi
    done

    Ce script :

    • Écoute en continu sur le port 12345 pour les données entrantes.
    • Lorsque des données sont reçues, il les transmet à OpenSSL pour le déchiffrement.
    • Utilise les mêmes paramètres de chiffrement que l'expéditeur pour déchiffrer correctement le message.
    • Affiche le message original en texte clair.
  6. Appuyez sur Ctrl+X, puis Y, et Entrée pour sauvegarder et quitter le fichier. Rendez le script exécutable :

    chmod +x secure_receiver.sh
  7. Testons maintenant notre système de communication chiffré. Vous aurez besoin de deux fenêtres de terminal ouvertes simultanément : une pour le récepteur et une pour l'expéditeur.

  8. Dans le premier terminal, lancez le récepteur :

    ./secure_receiver.sh

    Vous verrez un message indiquant que le récepteur attend des messages. Le récepteur écoute maintenant activement sur le port 12345.

  9. Dans le second terminal, lancez l'expéditeur :

    ./secure_sender.sh

    On vous demandera d'entrer des messages. Tout ce que vous taperez ici sera chiffré avant d'être envoyé sur le réseau.

  10. Dans le terminal de l'expéditeur, tapez un message et appuyez sur Entrée. Vous devriez voir le message chiffré être envoyé (bien que vous ne voyiez que brièvement la version chiffrée lors de sa transmission).

Message chiffré
  1. Dans le terminal du récepteur, vous devriez voir apparaître le message déchiffré exactement tel que vous l'avez tapé dans le terminal de l'expéditeur.

  2. Vous pouvez continuer à envoyer des messages depuis le terminal de l'expéditeur ; ils seront automatiquement chiffrés, envoyés, reçus et déchiffrés dans le terminal du récepteur. Cela démontre une boucle de communication sécurisée complète.

  3. Pour mettre fin à la communication, appuyez sur Ctrl+C dans les deux terminaux. Cela termine les deux scripts en toute sécurité.

Cette configuration démontre un système de communication chiffré simple mais efficace. Bien que nous utilisions localhost pour les tests, cette même approche fonctionne à travers les réseaux. Les messages sont automatiquement chiffrés avant la transmission et déchiffrés à la réception, offrant ainsi un canal de communication sécurisé. N'oubliez pas que dans des applications réelles, vous devriez utiliser des méthodes plus sûres pour l'échange de clés qu'un mot de passe codé en dur.

Résumé

Dans cet atelier, vous avez appris les bases de la communication réseau à l'aide de Netcat et exploré des techniques de chiffrement élémentaires pour le transfert sécurisé 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 démontré l'importance du chiffrement dans les communications réseau grâce à une mise en œuvre concrète avec OpenSSL. Ces compétences fondamentales constituent un excellent point de départ pour comprendre des concepts de cybersécurité plus complexes et des protocoles de communication sécurisés.