tcpdump: débugger son réseau

tcpdump

Tcpdump est un outil sous linux en ligne de commande très utile (mais alors très très) . Il permet de « sniffer » les trames sur son réseau local notamment. Il nécessite de connaître un peu les protocoles réseaux , leur manière de fonctionner mais il permet aussi de mieux les comprendre.
A titre perso, j’utilise tcpdump dès que je rencontre un soucis de communication entre plusieurs machines de mon réseau ou qu’un service est mal configuré.
Un DNS qui ne marche pas, un parefeu trop restrictif, un proxy à tester etc…Ca me permet de voir où le problème réside ; si c’est côté client ou plutôt côté serveur. Et en plus un des gros avantages de tcpdump est qu’il peut capturer en format compréhensible par Wireshark.
Donc avant de se pencher sur tcpdump, mieux vaut connaitre dans les grandes lignes le modèle OSI et ses 7 couches ainsi que la composition d’une trame ethernet, d’un paquet IP ou d’un segment TCP.

TCPDUMP est un bavard

Si on tape juste la commande « tcpdump » sans arguments en root, une foultitude d’informations s’affiche à l’écran et on a pas le temps de les analyser.
root@serveur:~#tcpdump

(ci-dessous un petit extrait de ce qu’il nous raconte)

Résultat:

09:10:13.786903 IP 192.168.0.53.22 > 192.168.0.32.43618: Flags [P.], seq 1409896:1410100, ack 253, win 294, options [nop,nop,TS val 121006 ecr 153209934], length 204
09:10:13.787201 IP 192.168.0.53.22 > 192.168.0.32.43618: Flags [P.], seq 1410100:1410304, ack 253, win 294, options [nop,nop,TS val 121006 ecr 153209934], length 204
09:10:13.787538 IP 192.168.0.53.22 > 192.168.0.32.43618: Flags [P.], seq 1410304:1410508, ack 253, win 294, options [nop,nop,TS val 121006 ecr 153209934], length 204

Résultat des milliers de ligne en direct qui trahissent l’activité de votre carte réseau.

On ne va pas rentrer tout de suite dans l’analyse de ces lignes de trames . Je vous propose plutôt de voir les options de base de tcpdump qui permettront de ne sélectionner que les informations dont on a besoin.

1/ Les options de base

Pour retrouver des infos sur les numéros de port et de protocole correspondant, bien sûr vous pouvez les retrouver sur votre
moteur de recherche préféré (Qwant ou Duckduckgo hein;-) mais il existe aussi un fichier sur la plupart des distrib linux:
/etc/services
Essayez de rechercher tous les numeros de port en rapport avec le protocole web HTTP:
cat /etc/services |grep http
Résultat:

http 80/tcp www # WorldWideWeb HTTP
http 80/udp # HyperText Transfer Protocol
https 443/tcp # http protocol over TLS/SSL
https 443/udp
http-alt 8080/tcp webcache # WWW caching service
http-alt 8080/udp

Du coup,on comprend que:
Les numéros de port utilisés pour le protocole HTTP est le 80 et le 443 pour du HTTPS.
Ok là ce sont des infos connues mais pour des protocoles moins connus comme l’IMAP ou le MDNS ce fichier pourra vous aider ; – )

Les interfaces réseaux disponibles pour la capture:
tcpdump -D
Vous devriez voir la liste des cartes réseaux disponibles sur votre serveur ou votre pc ainsi que leur status:

1.eth0 [Up, Running]
2.wlan0 [Up, Running]
3.any (Pseudo-device that captures on all interfaces) [Up, Running]
4.lo [Up, Running, Loopback]

– Choix d’écoute sur une interface spécifique:
tcpdump -i wlan0
Ici je choisis d’écouter sur ma carte wifi.

– Activer le mode « bavard » (plus on a d’infos mieux c’est)
tcpdump -v

– Désactiver la résolution de nom de domaine (pour n’avoir que des IP, c’est u poil plus rapide car certaines résolutions inverses pourraient demander un peu plus de temps)
tcpdump -n

-Afficher les paquets en hexadecimal et en ASCII (pour lire les paquets issus de POP ou HTTP…)
tcpdump -X

Désactiver le mode promiscuous (mode furtif pour passer en dessous des IDS mais ne capture que paquets qui circulent à l’attention de notre interface. Du coup tous les autres paquets à destinatation d’autres machines ne seront pas capturés)

tcpdump -p

2/ les filtres

– Afficher que pour un seul protocole (ici ARP)
tcpdump -v arp
Résultat:

8:01:12.186720 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.27.1 tell 192.168.27.14, length 42

Petit rappel ARP (adress resolution protocol) permet au niveau de la couche 2, donc en réseau local de donner la correspondance entre les adresses IP et les adresses MAC des machines. La requête ARP d’une machine part en broadcast et demande à tout le réseau: »
« A qui appartient cette IP? Si quelqu’un se reconnait qu’il m’envoie sa MAC pour que je puisse lui envoyer mon message dans une trame ethernet à son intention ».
Dans notre exemple, la machine 192.168.27.14 demande à tout le réseau « quelle est la MAC de 192.168.27.1 ? »
Je ne rentre pas dans les détails de ce protocole mais il fallait que je l’évoque car cela représente une bonne part du trafic sur un réseau local . Si vous faites du tcpdump sur un réseau, forcément vous verrez passer ce type de requêtes.

-Filtrer les infos concernant uniquement le protocole UDP:
tcpdump -i wlan0 udp
Par exemple sur serveur DHCP permet de voir les changes client/serveur.
D’autres protocoles connus qui utilisent l’UDP sont le DNS , QUAKE3 (tout ce qui est jeu vidéo)…

-Afficher uniquement les paquets qui ont pour source une IP précise:
tcpdump src 192.168.0.254
-Afficher uniquement les paquets qui ont pour destination 192.168.0.254(le routeur freebox : – ):
tcpdump dst 192.168.0.254
-Filtrer tous les paquets sources et destination pour un seul hôte:
tcpdump host 192.168.0.254

Envoi du résultat dans un fichier :
tcpdump -w capture.log
Envoi du résultat dans un fichier exploitable dans Wireshark :
tcpdump -w capture.pcap

Lecture d’un fichier de capture:
tcpdump -r capture.log

Affichage des paquets ayant « tutox.fr » comme adresse source ou destination:
tcpdump host tutox.fr

Combiner plusieurs filtres

Affichage des paquets FTP venant de 192.168.1.100 et allant vers 192.168.1.2 et les enregistrer dans un fichier:
tcpdump src 192.168.1.100 and dst 192.168.1.2 and port ftp -w capture.log

Conclusion:

Nous venons de voir une petite partie des possibilités de Tcpdump. La suite logique serait d’utiliser un analyseur tel que Wireshark pour pouvoir diagnostiquer plus finement les protocoles mis en oeuvre sur notre réseau. Vous l’avez compris ce sera l’objet d’un futur billet…

1 commentaire sur tcpdump: débugger son réseau

Leave a Reply

Votre adresse de messagerie ne sera pas publiée.


*