Analyser ses communications sur Internet, découvrir de quels réseaux on dépend

Suite à la censure involontaire de The Pirate Bay par Cogent, j’ai percuté à quel point la censure au niveau des opérateurs de transit pouvait être dangereuse. Du coup, j’ai essayé de comprendre ma dépendance par rapport à Cogent et aux autres opérateurs.

Un peu de contexte

En gros, sur Internet, tous les fournisseurs d’accès, tous les gens qui gèrent un réseau ne peuvent pas se relier directement entre eux. C’est une toile, un patchwork et les communications circulent d’un bout à l’autre de la planète en traversant de nombreux réseaux. Les opérateurs dont le métier est de transporter les communications à longue distance sont appelés des opérateurs de transit. Certains d’entre eux (Cogent, Telia, Tata, etc) sont présent sur tout la planète et une énorme quantité du trafic global d’Internet passe par eux.

Si ces opérateurs colossaux se mettent à bloquer l’accès à certains coins d’Internet, l’impact est énorme. Il ne s’agit plus juste de censure au niveau d’un fournisseur d’accès à Internet et d’un pays, mais bel et bien à l’échelle d’un continent ou de la planète donc concernant des dizaines de millions de personnes.

[Si ça vous intéresse, je pourrais développer tout ça dans un article à part]

Comment analyser ses propres communications

Pour pouvoir comprendre à quel point je peux être dépendant de Cogent ou d’autres opérateurs d’Internet, j’ai dû trouver un moyen d’analyser mes propres communications. Concrétement, ça veut dire inspecter tout mon trafic Internet, et collecter toutes les adresses à laquelle mon ordinateur s’est connecté.

Comment ? Sysdig !

Pour relever toutes les adresses, j’ai utilisé un outil nommé Sysdig. Il propose divers scripts (appelés chisels) permettant d’inspecter/trier/aggréger des appels système Linux. J’utilise le chisel fdcount_by en filtrant sur les IP distantes (fd.rip) :

sudo sysdig -c fdcount_by fd.rip

En faisant ctrl+c, on récupère le résultat de la collecte sous la forme :

Adresse IP    Nombre de connexions
127.0.0.1       94
0.0.0.0         72
…

On fait quoi maintenant ?

Une fois qu’on a obtenu la liste des adresses à laquelle notre ordinateur s’est connecté, comment aller plus loin ?

Ce qu’on veut obtenir, c’est la liste des opérateurs traversés sur le chemin entre notre ordinateur et les adresses. Pour cela, on utilise un outil nommé mtr (My TraceRoute) qui va nous permettre de voir le chemin parcouru et notamment les réseaux (les AS) :

$ mtr -nrzc1 ffdn.org
Start: 2018-07-18T14:28:54+0200
HOST: taupo                       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. AS51083  80.67.180.10         0.0%     1   29.9  29.9  29.9  29.9   0.0
  2. AS51083  80.67.180.1          0.0%     1   24.1  24.1  24.1  24.1   0.0
  3. AS51083  91.216.110.10        0.0%     1   23.3  23.3  23.3  23.3   0.0
  4. AS29075  212.85.148.233       0.0%     1   30.1  30.1  30.1  30.1   0.0
  5. AS???    185.96.186.82        0.0%     1   31.6  31.6  31.6  31.6   0.0
  6. AS174    149.11.115.21        0.0%     1   33.4  33.4  33.4  33.4   0.0
  7. AS174    154.54.38.65         0.0%     1   30.9  30.9  30.9  30.9   0.0
  8. AS174    154.54.57.146        0.0%     1   41.2  41.2  41.2  41.2   0.0
  9. AS174    149.6.44.18          0.0%     1   39.8  39.8  39.8  39.8   0.0
 10. AS198985 185.233.100.13       0.0%     1   39.9  39.9  39.9  39.9   0.0

Si on laisse tourner Sysdig plusieurs heures, on va vite avoir plusieurs centaines d’adresses, on ne va pas pouvoir gérer ça manuellement.

Automatisation

Déjà, on va dire à Sysdig d’envoyer le résultat de son travail dans un fichier :

sudo sysdig -c fdcount_by fd.rip > /tmp/file

Puis, pour faire une analyse rapide, j’utilise l’outil GNU Parallel dans un script :

as-analyze.sh /tmp/file
#!/bin/sh
cat $1 | awk '{print $1}' | parallel -j0 -k mtr-sorted {} |  sort | uniq -c | sort -rn

qui lui-même fait appel à un autre script :

mtr-sorted
#!/bin/sh
mtr -znrc1 $1 | grep -v 'AS?' | grep 'AS' | awk '{print $2}' | sort -u

En sortie, on obtient le résultat suivant :

253 AS29075 # Nombre de fois où le réseau est apparu dans le chemin vers une adresse suivi de l'identifiant du réseau (ASXXX)
213 AS25091 # AS25091 : IP-Max, opérateur suisse
106 AS174   # AS174 : on retrouve Cogent
 69 AS2914
 46 AS198435
 …

Sur une analyse courte, pendant un échange en P2P, on voit que mes communications sont pas mal passées par Cogent. Lorsque j’avais fait le test depuis une fibre Free Cogent était également prépondérant.

Je vous invite à tester ce que ça donne sur vos réseaux, en laissant tourner Sysdig plusieurs heures, voire plusieurs jours.

Bonus : je vous laisse le fun de pondérer tout ça en utilisant la deuxième colonne renvoyée par Sysdig (nombre de connexions). Il est également possible de faire cette analyse en regardant le volume de trafic échangé plutôt que le nombre de connexions.