En tant qu'administrateur réseau, le dépannage des problèmes de réseau fait partie de votre quotidien. Un outil indispensable lorsque vous travaillez sur des problèmes liés au réseau est la commande Linux tcpdump.
Ce didacticiel vous guidera à travers des exemples concrets de la façon dont tcpdump peut vous aider à diagnostiquer les problèmes de réseau courants. À la fin de ce didacticiel, vous comprendrez mieux comment tirer parti de tcpdump pour résoudre vos propres problèmes de réseau.
Prérequis
Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir une machine Linux. Ce tutoriel utilise Ubuntu 20.04, mais n'importe quelle distribution Linux moderne fonctionnera.
Installation de l'outil Linux tcpdump
La plupart des distributions Linux modernes, en particulier les serveurs, ont déjà tcpdump. Mais si ce n'est pas le cas, ne vous inquiétez pas car l'installation est simple et rapide.
1. Connectez-vous à votre ordinateur Linux à l'aide de votre client SSH préféré.
2. Tout d'abord, vérifiez si tcpdump est déjà installé en exécutant la commande ci-dessous.
sudo apt list --installed tcpdump
Si tcpdump existe sur votre machine, vous verrez une sortie similaire à la capture d'écran ci-dessous.
Si tcpdump n'existe pas, vous obtiendrez le résultat ci-dessous à la place.
3. Une fois que vous avez confirmé que tcpdump n'est pas installé, exécutez les commandes ci-dessous pour l'installer.
# Update the package index
sudo apt update -y
# Install tcpdump
sudo apt install tcpdump -y
4. Enfin, vérifiez la version de tcpdump installée en exécutant la commande ci-dessous.
tcpdump --version
Au moment d'écrire ces lignes, la dernière version de tcpdump du référentiel Ubuntu est 4.9.3.
Capturer le trafic des paquets sur l'interface par défaut
L'utilisation principale de tcpdump est la capture de paquets. Grâce à la bibliothèque pcap, l'outil peut capturer des paquets de différents types de réseaux, tels que Ethernet, Wi-Fi, PPP, etc.
La syntaxe de la forme de base de la commande tcpdump est la suivante.
tcpdump [options] [expression]
Où :
options
:Définissez diverses options tcpdump. Les options contrôlent la façon dont tcpdump capture et affiche les paquets.expression
:filtrez ou spécifiez le type de trafic à capturer. Les expressions sont abordées plus en détail plus loin dans ce didacticiel.
Le cas d'utilisation le plus élémentaire de tcpdump consiste à capturer tout le trafic sur votre interface réseau par défaut et à afficher les données sur la sortie standard.
Exécutez le tcpdump
commande sans options ni expressions pour capturer tout le trafic sur votre interface par défaut.
sudo tcpdump
Vous devez exécuter tcpdump en tant que root ou avec le préfixe sudo car l'accès aux interfaces réseau est une opération privilégiée.
Le tcpdump
L'outil capture les paquets et imprime la sortie sur le terminal, comme indiqué ci-dessous. Lorsque vous pensez avoir capturé suffisamment de paquets, appuyez sur CTRL+C
pour arrêter la capture.
Limiter le nombre de captures de paquets
Le tcpdump
La commande Linux peut rapidement submerger votre terminal de sortie, et il est préférable de ne capturer qu'une petite quantité de données à la fois.
Vous pouvez inclure le -c
option pour spécifier le nombre de paquets tcpdump
devrait capturer avant de quitter. Cette option est souvent applicable lorsque vous ne souhaitez capturer qu'une petite quantité de données à analyser.
Pour ce faire, exécutez la commande ci-dessous et modifiez le nombre après le -c
option. Cet exemple capture jusqu'à 10 paquets uniquement et se termine automatiquement.
sudo tcpdump -c 10
Augmenter la verbosité
Lors de la capture de paquets, vous pouvez constater que, parfois, la sortie par défaut peut ne pas contenir ou afficher des informations détaillées. Heureusement, l'outil Linux tcpdump vous offre trois niveaux de verbosité représentés par les indicateurs -v, -vv et -vvv.
Lorsque vous utilisez ces options, tcpdump
analyse et imprime beaucoup plus d'informations pour chaque paquet, comme la durée de vie (TTL), l'identification, etc.
# Verbose
sudo tcpdump -v
# Even more verbose
sudo tcpdump -vv
# Most verbose
sudo tcpdump -vvv
Pour une meilleure perspective, reportez-vous aux images ci-dessous comparant la différence de détail entre -v
et -vvv
.
Capturer des paquets sur une interface spécifique ou sur toutes les interfaces
Dans l'exemple précédent, tcpdump capturait des paquets sur l'interface réseau par défaut, ce qui signifie que vous n'avez qu'une seule interface à l'esprit. Mais que se passe-t-il si vous avez plusieurs interfaces et que vous souhaitez capturer le trafic sur une interface spécifique ou sur toutes les interfaces ?
La commande Linux tcpdump vous permet de spécifier l'interface réseau à capturer à l'aide de l'indicateur -i. Cet indicateur accepte le nom de l'interface comme valeur, ce qui signifie que vous devez d'abord connaître le nom de l'interface.
1. Exécutez la commande tcpdump avec l'option -D pour imprimer une liste de toutes les interfaces disponibles sur la machine.
sudo tcpdump -D
Comme vous pouvez le voir ci-dessous, il y a sept interfaces sur cette machine. Votre ordinateur peut avoir un ensemble différent d'interfaces réseau. Cet exemple se concentre uniquement sur les interfaces réseau Ethernet, en particulier eth0 et eth1.
2. Ensuite, exécutez la commande ci-dessous pour commencer à capturer des paquets sur l'interface spécifique souhaitée. Cet exemple capture l'interface eth1. De plus, pour limiter le nombre de paquets capturés, la commande ci-dessous utilise l'indicateur -c suivi du nombre.
sudo tcpdump -i eth1 -c 5
3. Au lieu de spécifier une interface, vous pouvez également capturer des paquets sur toutes les interfaces simultanément. Pour ce faire, définissez any comme valeur de paramètre pour -i.
sudo tcpdump -i any -c 5
Pourquoi voudriez-vous capturer des paquets sur toutes les interfaces ? Voici quelques raisons courantes.
D'une part, la capture du trafic sur toutes les interfaces vous permet de voir tout le trafic transitant par votre système, même s'il n'est pas destiné à votre système.
Vous pouvez également voir quels services et protocoles transitent par votre réseau. Ces informations peuvent être utiles lors de la configuration des règles de pare-feu ou d'autres mesures de sécurité, en particulier lors de la création de nouveaux serveurs.
Ajout de filtres à la commande Linux tcpdump
La capture sauvage de paquets n'est pas toujours la meilleure approche. La quantité de données peut devenir confuse et peut entraver votre dépannage. Pourquoi? Parce que vous capturez peut-être du trafic qui n'est pas pertinent pour la situation.
Les filtres sont utiles dans ces situations. L'outil tcpdump possède de nombreux filtres intégrés pour capturer des types de trafic spécifiques. Vous pouvez combiner ces filtres pour capturer uniquement le trafic pertinent. Voici quelques exemples.
Filtrage par numéro de port
Par exemple, si vous résolvez un problème de serveur SSH, vous ne vous souciez probablement pas des autres types de trafic passant par votre réseau.
Exécutez la commande ci-dessous pour capturer tout le trafic destiné au port 22
, le port SSH par défaut.
sudo tcpdump -c 5 port 22
Comme vous pouvez le voir, l'outil n'a capturé que le trafic du port 22 comme source ou destination.
Et si vous n'êtes intéressé que par le trafic HTTP ? Il vous suffit de remplacer le numéro de port par votre port HTTP, qui par défaut est le port 80.
sudo tcpdump -c 1 port 80
Remarque :L'outil tcpdump est suffisamment intelligent pour reconnaître les noms de protocole de service à la place des numéros de port. Par exemple, au lieu de spécifier le port 22 pour filtrer le trafic SSH, vous pouvez spécifier le port ssh à la place. Il en va de même pour le port 80 pour le trafic HTTP, port http.
Filtrage par protocole
Ne laissez pas le nom tcpdump
vous faire croire que cela ne fonctionne qu'avec le trafic TCP. Cet outil peut également capturer le trafic non TCP comme ICMP ou UDP.
Par exemple, la commande ci-dessous capture les paquets de n'importe quelle interface mais ne filtre que le trafic UDP.
sudo tcpdump -i any -c 5 udp
Par conséquent, les résultats ci-dessous affichent uniquement le trafic UDP, qui semble être des paquets concernant les opérations NTP et DNS.
Et si vous n'aviez besoin que de capturer le trafic lié au DNS ? Dans ce cas, vous pouvez combiner les filtres udp
et port 53
. De cette façon, la sortie prévue ne doit afficher que les paquets liés au DNS.
sudo tcpdump -i any -c 5 udp port 53
Cette fois, vous n'avez capturé que le trafic lié au DNS (recherche A, PTR, AAA et réponse) limité au protocole de transport UDP.
Pensez-vous qu'une attaque par inondation ping se produit sur votre réseau ? Pourquoi n'essayez-vous pas de trouver la source et la destination en utilisant tcpdump
? Pour ce faire, exécutez la commande ci-dessous pour écouter sur n'importe quelle interface le trafic ICMP.
Le -n
L'indicateur empêche tcpdump de tenter de résoudre les noms d'hôte et affiche les adresses IP à la place. Dans ce type de situation, le contournement de la résolution de noms peut améliorer les performances.
sudo tcpdump -n -i any icmp
Vous avez peut-être déjà réalisé que le tcpdump
les filtres sont puissants et flexibles. En combinant différents filtres, vous pouvez capturer le trafic pertinent pour le résultat souhaité.
Pour plus d'informations sur les filtres tcpdump, consultez la page de manuel tcpdump.
Enregistrement des paquets capturés dans un fichier sur disque
L'affichage des captures de paquets à l'écran à la volée convient aux captures courtes. Mais si vous générez d'énormes captures de paquets, la sortie à l'écran n'est plus pratique. Vous avez besoin d'un moyen d'exporter les données capturées vers un fichier pour une analyse ou un partage ultérieur.
Heureusement, tcpdump prend en charge la possibilité d'enregistrer les paquets capturés dans un fichier sur le disque. Vous devez spécifier l'option -w suivie du chemin du fichier.
Exécutez la commande ci-dessous pour enregistrer tout le trafic passant par votre système dans un fichier appelé /tmp/capture.pcap. Cette commande écoute sur n'importe quelle interface et capture un maximum de 20 paquets avant de quitter automatiquement.
sudo tcpdump -i any -w /tmp/capture.pcap -vv -c 20
Vous avez maintenant le fichier de capture de paquets et, lorsque vous en avez besoin, vous pouvez relire le fichier dans le terminal. Pour lire une capture de paquet à partir d'un fichier, ajoutez le -r
suivie du nom du fichier de capture de paquets.
sudo tcpdump -r /tmp/capture.pcap
Conclusion
Ce didacticiel vous a appris à capturer et à analyser le trafic réseau à l'aide de la commande Linux tcpdump. Vous avez utilisé des options courantes et des filtres combinés pour générer des captures de paquets précises. Vous avez également utilisé l'outil pour capturer des paquets dans un fichier pour une analyse ultérieure et relire le fichier dans le terminal.
L'outil tcpdump Linux est essentiel dans la boîte à outils de chaque administrateur réseau. Les connaissances que vous avez acquises dans ce didacticiel vous aident à devenir efficace et efficient dans le dépannage des problèmes de réseau.