On a parfois besoin de sniffer des paquets sur sa passerelle faisant office de routeur/pare-feu, dans mon cas ça se passe avec un routeur Tomato (TomatoUSB plus précisément).
Le firmware alternatif ne contient pas l'utilitaire tcpdump, voici comment l'ajouter et l'exploiter avec des exemples de commandes.
Télécharger tcpdump
Avant tout je vous conseille d'utiliser une clé USB qui restera toujours connectée sur votre routeur, aujourd'hui ça ne coûte plus rien et cela évite d'user le JFFS pour rien (voir "principe de fonctionnement").
Dans mon cas c'est une clé 1G peu rapide qui ne me servait pas, je lui ai trouvé une seconde vie, ou plutôt une première. Cette clé me sert pour enregistrer la bande passante (download/upload) qui était effacée à chaque reboot du routeur, elle va désormais également nous servir à stocker des fichiers pcap. Formatez là comme bon vous semble : NTFS, EXT2/3 ou FAT, puis connectez-là sur le port USB derrière votre routeur.
Vérifiez dans l'interface de tomato :
- USB and NAS > USB Support : tout est coché excepté USB Printer Support
- Votre clé doit apparaître dans "attached devices" juste en dessous dans la même fenêtre :
- USB and NAS > File Sharing, activez ou non l'authentification (dépend si vous êtes tout seul sur votre réseau) puis sélectionner un montage en lecture/écriture (R/W) :
Il faut utiliser un binaire compilé pour tourner sur le CPU de votre routeur :
- WNR3500L v1 (MIPS 74K), à télécharger ici (merci Martin Denizet, mirroir).
- R6400, R7000, R8000, RT-AC68U (ARM) : télécharger ici (source) ou ici en v4.6.2
Copiez le binaire après l'avoir extrait sur votre clé USB, via SCP ou via le partage de la clé créé par le routeur (\\ip-routeur\nom_cle).
note : pour en savoir plus sur l'architecture CPU de votre routeur passez par la bible des routeurs et plus particulièrement sur la page broadcom pour identifier l'architecture de votre CPU
note bis : vous pouvez aussi passer par entware-ng (sorte de fork de ipkg / opkg) pour installer le binaire automatiquement, plus d'info sur le wiki dédié
Reniflons
Pour renifler rien de plus simple !
Il suffit de se connecter en SSH sur le routeur (activez SSH dans l'interface web si ce n'est pas fait). Puis rendez vous à l'endroit où vous avez déposé le binaire tcpdump, sur la clé pour mon cas :
cd /tmp/mnt/CLE1GO/outils
Quelques exemples de commandes tcpdump que j'utilise la plupart du temps.
Paquets venant et à destination de 192.168.0.1, affichage human readable ASCII plus de lisibilité ("-A") :
tcpdump -s0 -w ecoute.pcap host 192.168.0.1 -A
Identique avec un timestamp plus lisible (-tttt)
et plus verbeux (-vvv)
:
tcpdump -s0 -w ecoute.pcap host 192.168.0.1 -A -tttt -vvv
Capture les paquets contenant des trames FTP ou SSH sur l'interface WAN (vlan2 chez moi) :
tcpdump -s0 -w ecoute.pcap port ftp or ssh -i vlan2
Capture les paquets provenant et à destination de 192.168.0.1 sur le port 8443 :
tcpdump -s0 -w ecoute.pcap host 192.168.0.1 and port 8443
Capture les paquets entre les hôtes A, B ou C :
tcpdump -s0 -w ecoupte.pcap host A and host \( B or C\)
Capture les paquets igmp (ping par ex), sans résoudre les IP en nom :
tcpdump -s0 -w -n ecoute.pcap igmp
Capture les paquets tcp sur le port 80 provenant de 192.168.0.1 :
tcpdump -s0 -w ecoute.pcap tcp port 80 and src 192.168.0.1
Capture les paquets provenant et à destination de 192.168.0.1, sauf les paquets ssh (pour s'exclure des traces):
tcpdump -s0 -w ecoute.pcap host 192.168.0.1 and port not 22
tcpdump -s0 -w ecoute.pcap host 192.168.0.1 and port !22
Capture les paquets provenant et à destination de 192.168.0.1 sur les ports de destination 80 et 443 :
tcpdump -s0 -w ecoute.pcap host 192.168.0.1 and "(dst port 80 or dst port 443)"
Capture les paquets à destination des réseaux suivants :
tcpdump -s0 -w ecoute.pcap dst net 192.168.0.0/24 or 10.0.2.0/24
le "-s0" permet de capture sans limite de taille ("-s0 200" capture les 200 premiers octets)
le "-n" ne résoud pas les IP en nom (nom de machine local / nom de domaine)
Capture les paquets ICMP (pour flasher une IP grâce à ping par exemple) :
tcpdump -nni vlan2 icmp
vlan2 = patte wan (vérifiez avec "ip a").
Alternative avec DNS :
tcpdump -ni vlan2 udp port 53
Pour connaître tous les paramètres j'utilise ce mémo tcpdump et ce mémo wireshark (et une doc pour combiner).
Sinon en résumé :
- -i any : écoute sur toutes les interfaces
- -i eth0 : écoute sur l'interface eth0
- -D : affiche les interfaces disponibles
- -n : sans résolutions des noms d'hôtes
- -nn : sans résolution des noms d'hôtes et des ports
- -q : moins verbeux (quiet)
- -t : n'affiche pas le timestamp sur chaque ligne
- -tttt : horodatage lisible par un humain (heure, min, sec, fractions)
- -X : en plus des en-têtes affiche le contenu du paquet en hex et en ASCII
- -XX : identique à-X avec l'en-tête ethernet en plus
- -v, -vv, -vvv : augmente la versbosité
- -c : arrête la capture après avoir capturé ce nombre de paquets
- -s : taille de la capture (s0 pour illimité)
- -e : affiche les en-têtes ethernet
Nous pouvons maintenant exploiter ces fichiers pcap dans wireshark et profiter de la puissance de l'outil pour cherche de façon très fine. Dans mon cas je voulais débusquer un dysfonctionnement sur un module Somfy :
Conclusion
Vous n'êtes bien sûr pas forcés d'orienter les résultats vers un fichier de sortie si l'affichage dans le terminal vous suffit. C'est en tout cas bien pratique de pouvoir sniffer sur tous les équipements, y compris ceux en WiFi (smartphone, imprimante, tablette, alarme, etc). De nombreux logiciels utilisent des systèmes de type wget sans rien dire à l'utilisateur, c'est une excellente façon de savoir ce qui se trame dans votre dos (elle était facile...).
Même chose pour certains équipements propriétaires, on peut comprendre comment tout ça communique. Pour ma part j'ai investigué le matériel Somfy et je me suis aperçu que c'était plutôt blindé sur les échanges entre les équipements et les serveurs Somfy. Me voilà rassuré !
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
3 commentaires
bonjour
excellent travail et merci pour ton tuto.
on a tout :
la technique
l'application de cette technique
les explications qui permettent de comprendre et d'aller rechercher une doc supplémentaire
Vraiment c'est un plaisir de suivre pas à pas un tel document.
Bref, ton document s'apparente plus à l'application d'un protocole industriel qu'à un simple tuto.
Si ceux et celles qui réalisent des tutos pouvaient prendre exemple sur toi, cela doperait le site.
Ceux et celles qui ont plus de connaissances que moi ne verrons pas forcément les choses ainsi,
mais lorsque l'on a besoin d'affiner certains points, même en prenant des cours à distance, on arrive difficilement à de tels résultats.
Donc encore merci à toi.
C'est un régal
personnellement concernant TOMATOusb, je regrette de ne pas avoir plus de tuto comme celui là.
gestion de la BP par réseau virtuel
décider quel service - voip msger ftp etc - doit ou ne doit pas être bloqué et pourquoi
automatisation des logs avec un nas
etc...
des trucs basiques mais combien ch...t à comprendre et à mettre en application sans avoir la culture nécessaire
@benJenSaisRien-:): merci pour tes encouragements, ça fait plaisir. Si je partage ce genre d'infos c'est parce que j'ai moi même eu du mal à les trouver sur le web, donc je me dis que ça peut servir à d'autres.
C'est aussi pour cette raison qu'il ne faut pas hésiter à suggérer des sujets d'article. Tu parles de bande passante, je pense que tu fais allusion à la QoS ? De mon côté je l'ai désactivée car ma connexion fibre était trop rapide pour le routeur qui prenait trop de temps pour la QoS et je perdai 25% de débit. Mais oui sur une connexion <100 mbps c'est utile