Analyse du trafic réseau et accès à distance sécurisé

CompTIABeginner
Pratiquer maintenant

Introduction

Bienvenue dans ce laboratoire sur l'analyse du trafic réseau et l'accès à distance sécurisé sous Linux. Comprendre comment surveiller l'activité réseau et sécuriser les communications est une compétence essentielle pour tout administrateur système, développeur ou passionné de sécurité.

Dans ce laboratoire, vous acquerrez une expérience pratique avec une suite d'outils puissants en ligne de commande. Vous apprendrez à :

  • Inspecter les connexions réseau actives et les services en écoute à l'aide de netstat et de son successeur moderne, ss.
  • Capturer et analyser les paquets réseau en direct avec tcpdump.
  • Établir une connexion à distance sécurisée à votre propre machine en utilisant ssh.
  • Vérifier l'intégrité des réponses DNS à l'aide de dig et DNSSEC.

À la fin de ce laboratoire, vous aurez une compréhension pratique de ces utilitaires réseau essentiels et de leur rôle dans la gestion et la sécurisation d'un système Linux.

Inspecter les connexions réseau actives avec Netstat/SS

Dans cette étape, vous apprendrez à visualiser les connexions réseau actives et les ports en écoute sur votre système. Ceci est fondamental pour comprendre quels services sont en cours d'exécution et accessibles sur le réseau. Nous utiliserons deux outils courants : netstat et ss.

Tout d'abord, utilisons netstat, un utilitaire classique et bien connu. Le paquet net-tools, qui contient netstat, a été installé pour vous lors de la configuration du laboratoire.

Exécutez la commande suivante pour lister tous les ports TCP (-t) et UDP (-u) en écoute dans un format numérique (-n) sans résoudre les noms, en se concentrant uniquement sur les sockets en écoute (-l) :

netstat -tuln

Vous devriez voir une sortie similaire à celle-ci. Notez les entrées pour le serveur SSH (port 22) et le serveur web Python (port 8000) qui ont été démarrés pour vous, ainsi que des services supplémentaires sur les ports 3001 et 3002 :

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3001            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3002            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.11:37199        0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 127.0.0.11:60120        0.0.0.0:*
udp        0      0 0.0.0.0:3001            0.0.0.0:*

Maintenant, utilisons ss, qui est le remplacement moderne de netstat. Il est généralement plus rapide et fournit des informations plus détaillées. La commande et les options sont très similaires.

ss -tuln

La sortie sera légèrement différente en format, mais affichera les mêmes informations essentielles : les services en écoute sur les ports 22, 3001, 3002 et 8000, ainsi que certains services Docker internes :

Netid                        State                         Recv-Q                        Send-Q                                               Local Address:Port                                                 Peer Address:Port                        Process
udp                          UNCONN                        0                             0                                                       127.0.0.11:60120                                                     0.0.0.0:*
udp                          UNCONN                        0                             0                                                          0.0.0.0:3001                                                      0.0.0.0:*
tcp                          LISTEN                        0                             128                                                        0.0.0.0:22                                                        0.0.0.0:*
tcp                          LISTEN                        0                             5                                                          0.0.0.0:3001                                                      0.0.0.0:*
tcp                          LISTEN                        0                             128                                                        0.0.0.0:3002                                                      0.0.0.0:*
tcp                          LISTEN                        0                             5                                                          0.0.0.0:8000                                                      0.0.0.0:*
tcp                          LISTEN                        0                             4096                                                    127.0.0.11:37199                                                     0.0.0.0:*
tcp                          LISTEN                        0                             128                                                           [::]:22                                                           [::]:*

En utilisant ces commandes, vous pouvez rapidement obtenir un aperçu des services exposés par votre système sur le réseau.

Capturer le trafic réseau local avec Tcpdump

Dans cette étape, vous utiliserez tcpdump, un puissant analyseur de paquets en ligne de commande, pour capturer et inspecter le trafic réseau en temps réel. Ceci est inestimable pour le débogage des problèmes réseau ou pour comprendre le fonctionnement des protocoles.

Tout d'abord, voyons quelles interfaces réseau sont disponibles pour la capture de trafic.

sudo tcpdump -D

La sortie listera les interfaces disponibles. lo est l'interface "loopback" (boucle locale), utilisée pour la communication réseau au sein de la même machine (par exemple, la connexion à localhost). Vous verrez diverses interfaces, y compris l'interface réseau principale eth1 :

1.eth1 [Up, Running, Connected]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.bluetooth-monitor (Bluetooth Linux Monitor) [Wireless]
5.nflog (Linux netfilter log (NFLOG) interface) [none]
6.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
7.dbus-system (D-Bus system bus) [none]
8.dbus-session (D-Bus session bus) [none]

Nous allons capturer le trafic sur l'interface de boucle locale (lo) pour voir les requêtes vers notre serveur web local. Pour ce faire, vous aurez besoin de deux terminaux.

Dans votre terminal actuel, exécutez la commande tcpdump suivante. Elle écoutera sur l'interface lo (-i lo) et s'arrêtera après avoir capturé 5 paquets (-c 5).

sudo tcpdump -i lo -c 5

Maintenant, cliquez sur l'icône + dans la barre d'onglets du terminal pour ouvrir un nouveau terminal. Dans ce nouveau terminal, générez du trafic réseau en effectuant une requête vers le serveur web local à l'aide de curl.

curl http://localhost:8000

Revenez à votre premier terminal. Vous verrez que tcpdump a capturé les paquets liés à votre requête curl. La sortie ressemblera à ceci, montrant la négociation TCP (handshake) et le transfert de données :

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:57:14.158058 IP localhost.57272 > localhost.8000: Flags [S], seq 2025143228, win 65495, options [mss 65495,sackOK,TS val 1006286113 ecr 0,nop,wscale 7], length 0
14:57:14.158072 IP localhost.8000 > localhost.57272: Flags [S.], seq 403368374, ack 2025143229, win 65483, options [mss 65495,sackOK,TS val 1006286113 ecr 1006286113,nop,wscale 7], length 0
14:57:14.158083 IP localhost.57272 > localhost.8000: Flags [.], ack 1, win 512, options [nop,nop,TS val 1006286113 ecr 1006286113], length 0
14:57:14.158129 IP localhost.57272 > localhost.8000: Flags [P.], seq 1:79, ack 1, win 512, options [nop,nop,TS val 1006286113 ecr 1006286113], length 78
14:57:14.158133 IP localhost.8000 > localhost.57272: Flags [.], ack 79, win 511, options [nop,nop,TS val 1006286113 ecr 1006286113], length 0
5 packets captured
24 packets received by filter
0 packets dropped by kernel

Notez que si vous exécutez tcpdump sans générer de trafic spécifique, vous pourriez voir des requêtes DNS en arrière-plan et d'autres communications système, comme indiqué dans vos journaux. C'est un comportement normal du système et cela démontre que même lorsque vous ne naviguez pas activement, votre système maintient diverses communications réseau.

Vous avez réussi à capturer et à visualiser le trafic réseau en direct.

Démontrer l'accès à distance sécurisé avec SSH

Dans cette étape, vous apprendrez à utiliser SSH (Secure Shell) pour un accès à distance sécurisé. Nous allons configurer l'authentification par clé, qui est plus sécurisée que l'utilisation de mots de passe, pour nous connecter à notre propre machine (localhost). Le openssh-server a déjà été démarré pour vous.

Tout d'abord, vous devez générer une paire de clés SSH (une clé privée et une clé publique). Nous allons créer une clé RSA avec une longueur de 2048 bits. L'option -f spécifie le fichier dans lequel enregistrer la clé, et -N "" définit une phrase secrète vide pour plus de commodité dans ce laboratoire.

ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""

Cette commande crée id_rsa (votre clé privée) et id_rsa.pub (votre clé publique) dans le répertoire ~/.ssh.

Ensuite, pour permettre à votre propre utilisateur de se connecter en utilisant cette clé, vous devez ajouter la clé publique au fichier authorized_keys. Ce fichier liste toutes les clés publiques autorisées à se connecter.

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Pour des raisons de sécurité, SSH exige des permissions strictes sur le répertoire .ssh et ses fichiers. Assurons-nous qu'elles sont correctement définies. Le script de configuration a déjà créé ces fichiers avec les bonnes permissions, mais il est bon de connaître ces commandes.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Tout est maintenant configuré. Vous pouvez tester la connexion sécurisée à localhost. La commande exécutera echo "Hello from SSH" à distance (sur votre propre machine) et affichera le résultat.

ssh labex@localhost 'echo "Hello from SSH"'

La première fois que vous vous connecterez, il vous sera peut-être demandé de vérifier l'empreinte digitale de l'hôte. Tapez yes et appuyez sur Entrée. Vous devriez ensuite voir la sortie de la commande echo.

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
Hello from SSH

Vous avez configuré et utilisé avec succès SSH pour une authentification sécurisée basée sur des clés.

Vérifier la résolution DNSSEC avec Dig

Dans cette étape, vous utiliserez dig (Domain Information Groper) pour effectuer des requêtes DNS et en apprendre davantage sur DNSSEC (DNS Security Extensions). DNSSEC aide à se protéger contre l'usurpation de DNS en ajoutant des signatures cryptographiques aux données DNS.

Tout d'abord, effectuons une requête DNS standard pour labex.io afin de voir son adresse IP.

dig labex.io

La sortie vous montrera les détails de la requête et, surtout, la ANSWER SECTION avec les enregistrements A (adresses IP). Notez que labex.io possède plusieurs adresses IP pour l'équilibrage de charge :

; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> labex.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9789
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;labex.io.                      IN      A

;; ANSWER SECTION:
labex.io.               10      IN      A       104.26.10.219
labex.io.               10      IN      A       104.26.11.219
labex.io.               10      IN      A       172.67.72.162

;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:16 CST 2025
;; MSG SIZE  rcvd: 85

Maintenant, effectuons la même requête mais demandons au résolveur DNS de fournir des données relatives à DNSSEC en ajoutant l'option +dnssec.

dig labex.io +dnssec

La sortie inclut des informations supplémentaires relatives à DNSSEC dans la OPT PSEUDOSECTION, indiquant que DNSSEC a été demandé (le drapeau do signifie "DNSSEC OK"). Cependant, notez que la section flags ne contient pas de drapeau ad (Authenticated Data) :

; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> labex.io +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1042
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;labex.io.                      IN      A

;; ANSWER SECTION:
labex.io.               5       IN      A       172.67.72.162
labex.io.               5       IN      A       104.26.11.219
labex.io.               5       IN      A       104.26.10.219

;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:21 CST 2025
;; MSG SIZE  rcvd: 108

L'absence du drapeau ad indique que, bien que des informations DNSSEC aient été demandées, le résolveur n'a pas pu valider les signatures ou que le domaine n'a pas DNSSEC activé.

Essayons un autre domaine bien connu qui utilise DNSSEC, icann.org, pour le voir à nouveau.

dig icann.org +dnssec

Là encore, inspectez l'en-tête dans la sortie :

; <<>> DiG 9.18.24-0ubuntu0.22.04.1-Ubuntu <<>> icann.org +dnssec
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54437
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 65494
; OPT=5: 05 07 08 0a 0d 0e 0f (".......")
; OPT=6: 01 02 04 ("...")
; OPT=7: 01 (".")
;; QUESTION SECTION:
;icann.org.                     IN      A

;; ANSWER SECTION:
icann.org.              10      IN      A       192.0.43.7

;; Query time: 72 msec
;; SERVER: 127.0.0.11#53(127.0.0.11) (UDP)
;; WHEN: Tue Aug 05 14:58:26 CST 2025
;; MSG SIZE  rcvd: 77

Comme pour la requête précédente, il n'y a pas de drapeau ad dans la réponse. Cela indique que le résolveur DNS dans cet environnement n'effectue pas la validation DNSSEC, ce qui est courant dans les environnements conteneurisés ou virtualisés où le résolveur DNS peut être configuré différemment d'un résolveur système standard.

Résumé

Félicitations pour avoir terminé le laboratoire ! Vous avez acquis une expérience pratique avec plusieurs outils essentiels de réseau et de sécurité sous Linux.

Dans ce laboratoire, vous avez appris à :

  • Utiliser netstat et ss pour inspecter quels services réseau sont en cours d'exécution et écoutent les connexions.
  • Capturer des paquets réseau en direct sur une interface spécifique à l'aide de tcpdump pour analyser le trafic.
  • Configurer et utiliser ssh avec authentification par clé pour un accès à distance sécurisé.
  • Utiliser dig pour interroger le système de noms de domaine (DNS) et comprendre les concepts de DNSSEC, y compris comment demander des informations DNSSEC et interpréter les résultats.

Ce sont des compétences fondamentales qui sont cruciales pour gérer, dépanner et sécuriser tout environnement Linux. Nous vous encourageons à continuer d'explorer les nombreuses options que ces outils puissants offrent.