Un service onion Tor permet aux gens d'accéder à votre site via le réseau Tor sans que ni l'un ni l'autre ne connaisse l'adresse IP de l'autre. Le serveur se connecte vers Tor, il n'a donc besoin d'aucun port entrant ouvert. Ce guide en met un en place sur un VPS Ubuntu, avec Nginx servant un petit site.
Ce qu'apporte un service onion
- Une adresse
.oniondérivée d'une clé, donc auto-authentifiée et sans besoin d'autorité de certification. - Un chiffrement de bout en bout entre le visiteur et votre serveur, à l'intérieur de Tor.
- Aucun besoin d'exposer l'adresse IP publique de votre serveur aux visiteurs.
Il ne rend pas le contenu de votre site légal, et il ne masque pas les erreurs commises ailleurs, comme un domaine du web classique pointant vers la même machine.
Étape 1 : installer Tor et Nginx
sudo apt update
sudo apt install -y tor nginx
sudo systemctl enable --now tor
Étape 2 : lier Nginx uniquement à localhost
Le serveur web ne doit pas répondre sur l'interface publique, sinon l'IP du web classique et le site onion deviennent liables. Modifiez la configuration de votre site pour qu'il écoute sur la boucle locale.
server {
listen 127.0.0.1:8080;
server_name _;
root /var/www/onion;
index index.html;
server_tokens off;
}
sudo mkdir -p /var/www/onion
echo '<h1>Hello from onion space</h1>' | sudo tee /var/www/onion/index.html
sudo nginx -t && sudo systemctl reload nginx
Étape 3 : déclarer le service caché
Ajoutez ces lignes à /etc/tor/torrc :
HiddenServiceDir /var/lib/tor/my_site/
HiddenServiceVersion 3
HiddenServicePort 80 127.0.0.1:8080
sudo systemctl restart tor
sudo cat /var/lib/tor/my_site/hostname
La dernière commande affiche votre adresse .onion de 56 caractères. Ouvrez-la dans Tor Browser pour tester. Sauvegardez le dossier /var/lib/tor/my_site/ : la clé qu'il contient est votre adresse, et la perdre signifie une nouvelle adresse.
Étape 4 : autorisation client facultative
Pour un service privé, ajoutez une clé que seuls les visiteurs approuvés détiennent. Créez le fichier /var/lib/tor/my_site/authorized_clients/alice.auth avec une ligne de la forme descriptor:x25519:PUBLIC_KEY, puis rechargez Tor. Les visiteurs sans la clé privée correspondante ne peuvent même pas voir que le service existe.
Étape 5 : colmater les fuites courantes
- Ne référencez jamais de ressources, polices ou outils d'analyse du web classique depuis vos pages.
- Rendez les pages d'erreur et les en-têtes génériques, et gardez
server_tokens off. - Gardez l'horloge du serveur précise ; Tor en a besoin.
- Bloquez tout avec le pare-feu sauf SSH :
sudo ufw default deny incoming, puisque Tor n'a besoin d'aucun port entrant. - N'exécutez pas de site du web classique sur le même hôte, sauf si vous les avez totalement séparés.
Lisez les habitudes OpSec des serveurs avant de publier quoi que ce soit, et utilisez la liste de durcissement sur un nouveau serveur.