Aller au contenu
  1. Articles/

Héberger un site web sur Tor : un guide simple

Ixonae
Auteur
Ixonae
Sommaire

Avertissement : Cet article a été traduit de l’anglais par un LLM. La précision n’est pas garantie. Vous pouvez lire l’article original en anglais.

Dans cet article, nous allons voir comment mettre en place un service caché Tor (également appelé service onion), et quelles sont les options de base que nous pouvons utiliser pour le configurer. Ensuite, j’expliquerai plus en détail le protocole, et ce qui se passe exactement lorsqu’un client essaie d’accéder à un service caché.

J’écris ce tutoriel en me basant sur la dernière version d’Ubuntu, en supposant qu’un serveur web est déjà en fonctionnement.

Installation
#

Tout d’abord, nous devons installer Tor. Cela peut se faire via apt, mais la documentation officielle déconseille d’utiliser les dépôts communautaires, car ils ont l’habitude de ne pas être mis à jour correctement en temps voulu. Nous allons ajouter le dépôt maintenu par Tor dans notre /etc/apt/sources.list :

deb https://deb.torproject.org/torproject.org focal main
deb-src https://deb.torproject.org/torproject.org focal main

Ensuite, nous ajouterons la clé PGP du dépôt à notre système, et installerons Tor :

curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -
apt-update
apt install tor deb.torproject.org-keyring

Configuration
#

Fichier de configuration Torrc
#

Maintenant que Tor est installé, nous pouvons le configurer. Cette étape est étonnamment facile à réaliser, car il suffit d’éditer le fichier de configuration /etc/tor/torrc pour y ajouter ce qui suit. Notez que le service sera automatiquement créé en tant que v3. Vous pouvez créer un service v2, mais cela n’a pas d’intérêt, car la v2 sera bientôt désactivée.

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 127.0.0.1:80

Ces deux lignes feront ce qui suit :

  • HiddenServiceDir est l’emplacement où Tor va créer/lire l’adresse et les clés du service. Vous devez vous assurer que l’utilisateur debian-tor peut correctement lire/écrire dedans. De plus, comme il contiendra des informations sensibles, vous voudrez vous assurer que les droits d’accès sont 700.
  • HiddenServicePort nous permet de mapper un port vers un service. Ici, Tor enverra les connexions du port 80 vers 127.0.0.1:80. Vous pouvez avoir plusieurs ports cachés pour un seul répertoire de service. Il est également possible d’utiliser un socket pour servir le contenu en utilisant unix:/path/to/socket.

Notez également qu’il est possible d’avoir plusieurs services configurés. Vous devrez simplement répéter les deux lignes précédentes avec des informations différentes (le répertoire du service doit être différent également !) tout en gardant l’ordre HiddenServiceDir, puis HiddenServicePort.

Le répertoire du service caché
#

Lorsque la configuration est éditée et le service relancé en utilisant systemctl restart tor, nous devrions avoir les éléments suivants dans notre répertoire hidden_service :

Fichiers créés dans le HiddenServiceDir
Fichiers créés dans le HiddenServiceDir

hostname contiendra l’URL du service caché, et hs_ed25519_*_key les clés publique et privée. Vous voudrez sauvegarder soigneusement les clés, car les perdre entraînera la perte de l’URL de votre service.

Le répertoire authorized_clients permet de faire ce que son nom indique. Pour ce faire, vous devrez créer des fichiers au format something.auth. Chacun de ces fichiers ne doit contenir qu’une seule ligne au format <auth-type>:<key-type>:<base32-encoded-public-key>. Cette page explique très bien comment générer les informations pertinentes à mettre dans ce fichier, et comment configurer un client pour pouvoir s’authentifier.

Ajouter de la sécurité supplémentaire
#

Je n’entrerai pas dans les détails de la sécurisation d’un serveur lors de l’utilisation de Tor, mais voici une liste non exhaustive de choses que vous voudrez faire :

  • Assurez-vous de ne lier aucune information sur le serveur
  • Méfiez-vous de l’accès aux ressources locales via Tor
  • Utilisez de préférence Tor en tant que client et non en tant que relais (pour empêcher quiconque de faire une corrélation entre la panne de votre passerelle et la panne de votre service caché)
  • Consultez le Projet Vanguard, qui permet d’ajouter plus de sécurité contre les attaques de désanonymisation. En résumé, le scénario que Vanguard essaie d’éviter est le suivant : un adversaire fait beaucoup de requêtes à votre service caché tout en faisant fonctionner plusieurs relais. L’un de ses relais pourrait être choisi comme noeud intermédiaire (entre le garde et les relais de points de rendez-vous). À partir de là, il serait possible de compromettre le relais garde et de trouver l’IP du point de service.

Débogage
#

Si pour une raison quelconque rien n’est créé dans le répertoire que vous avez mis dans la configuration, ou si votre service est inaccessible, et si tout est correctement configuré, vous pouvez démarrer le serveur Tor en utilisant sudo -u debian-tor tor, ce qui donnera un peu plus d’informations sur l’initialisation du serveur (par exemple s’il ne peut pas se connecter au réseau).

Vous pouvez également activer la journalisation en ajoutant ce qui suit au fichier de configuration :

SafeLogging 0
Log notice file /path/nf.log
Log info file /path/if.log

Notez que si vous exécutez Tor en mode client, il n’est pas nécessaire d’ouvrir un port entrant dans le pare-feu. Vous devez simplement vous assurer d’autoriser les connexions sortantes vers le port 443.

Comment les clients se connectent au service caché
#

Maintenant, vous vous demandez peut-être comment tout cela fonctionne au niveau des connexions ? Cette partie est là pour vous aider à comprendre cela. Si après la lecture vous avez encore soif d’informations, vous pouvez consulter les spécifications du protocole.

Initialisation du service
#

  1. Comme nous l’avons vu dans la configuration, nous avons besoin d’une clé publique et d’une clé privée pour le service. Elles seront utilisées pour sécuriser les communications et pour générer l’adresse du service. Tor peut le faire lui-même, mais certains créeront manuellement la clé afin d’obtenir une adresse personnalisée en répétant la génération de clé un grand nombre de fois jusqu’à ce que l’adresse commence par une certaine chaîne. Par exemple, facebookcorewwwi.onion (voir la troisième partie de cet article)
  2. Lorsque les clés sont créées, le service caché choisira quelques noeuds pour agir comme points d’introduction.
  3. Le service caché se connecte ensuite à ces noeuds (en utilisant des circuits Tor, et jamais directement car cela annulerait l’objectif d’être anonyme !), et partage sa clé publique avec eux. Il maintiendra ensuite la connexion ouverte avec eux.
  4. Le service caché crée ensuite un descripteur de service caché contenant sa clé publique et l’identité de ses points d’introduction. Il signera ensuite ce descripteur avec sa clé publique et le téléversera vers 6 répertoires de services cachés (des noeuds réguliers avec le drapeau HSDir activé) qui font partie du système DHT (Table de hachage distribuée).

Notez que si l’étape (1) n’est évidemment exécutée qu’à la création du service, les suivantes sont répétées régulièrement. Si vous souhaitez en savoir plus sur le DHT, vous pouvez consulter cet article (présentant la collecte de données à partir du DHT).

Connexion des clients
#

Lorsqu’un client essaie de se connecter à un service caché, voici ce qui se passe :

  1. Le client demande au DHT le descripteur du service caché
  2. Le client choisit un relais aléatoire pour agir comme point de rendez-vous et s’y connecte (via un circuit)
  3. Le client crée un message d’introduction, incluant l’adresse du point de rendez-vous et un secret à usage unique. Il le chiffre ensuite en utilisant la clé publique du service caché et l’envoie à un point d’introduction
  4. Le point d’introduction transfère le message d’introduction au service caché
  5. Le service caché se connecte au point de rendez-vous et lui envoie le secret à usage unique dans un message de rendez-vous
  6. Le point de rendez-vous notifie ensuite le client que la connexion a réussi
  7. À partir de là, le client et le service caché peuvent communiquer ensemble. Le point de rendez-vous agira comme une passerelle et ne verra que des messages chiffrés