.onion & Shallot

.onion & Shallot

Si vous avez toujours rêvé de voir votre site sur le réseau Tor avec une jolie extension en .onion n'attendez plus, il vous suffit d'avoir 10 minutes devant vous.

Je précise ici la marche à suivre avec Tor et Shallot pour obtenir un nom de domaine en .onion qui ressemblera à son nom de domaine connu, ainsi que la configuration avec un blog Ghost (petit trick sympa, vous verrez) et NGinx.

HTTPS / Let's Encrypt

Depuis Octobre 2015 l'Internet Engineering Task Force (IETF) - un groupe informel qui contribue à l'élaboration des standards de l'Internet - a reconnu dans son RFC 7686 l'extension .onion comme étant une Special-Use (Top-Level) Domain Name ( domaine de premier niveau spécial ). Autrement dit elle peut être utilisée comme n'importe quel autre domaine de premier niveau à ceci prêt que du fait de son caractère non-centralisé - n'importe qui peut créer son domaine avec l'extension .onion et s’affranchir de toute autorité de contrôle, c'est le principe même de Tor - les .onion sont des extensions spéciales (comme le .arpa).

The Tor network is designed to not be subject to any central
controlling authorities with regards to routing and service
publication, so .onion names cannot be registered, assigned,
transferred or revoked. "Ownership" of a .onion name is derived
solely from control of a public/private key pair that corresponds to
the algorithmic derivation of the name.

In this way, .onion names are "special" in the sense defined by
Section 3 of [RFC6761] (...) / RFC 76 86

Il est donc tout à fait probable que dans un avenir proche les autorités de certification comme Let's Encrypt, permettent d'enregistrer des domaines en .onion. Une très belle avancée en matière de sécurité, d'anonymat et de liberté. :)

Aussi pour le moment il n'est pas possible d'obtenir de certificat reconnu pour son .onion, vos usagers auront donc le droit à un message d'alerte de la part de leur navigateur lorsqu'ils visiteront votre site. Qu'à cela ne tienne tant qu'ils sont anonymes et que vous chiffriez tout de même votre traffic en https. Ce n'est qu'une question de temps.

== Je mettrai à jour mon article détaillant la procédure pour authentifier son .onion auprès de Let's Encrypt, dès que ça sera possible. ==

Installation & configuration

Tor

1 - On installe Tor

apt-get update && apt-get install tor -y

2 - On édite le fichier de configuration de Tor

nano /etc/tor/torrc

3 - Ajoutez à la fin ce qui suit, en l'adaptant à vos besoins puis enregistrez

HiddenServiceDir /var/lib/tor/domaine.ext/
HiddenServicePort 80 0.0.0.0:80
HiddenServicePort 443 0.0.0.0:443

4 - Relancez Tor

service tor restart

Voilà! Tor à maintenant généré un répertoire pour votre nom de domaine, contenant deux fichiers private_key et hostname qui déterminent entre autre votre .onion et valide votre propriété

5 - Allons jeter un œil à ce répertoire et obtenons notre nom de domaine en .onion

cd /var/lib/tor/domaine.ext
cat hostname

Votre prompt devrait vous afficher le domaine .onion créé. Sympa, quasi-aléatoire mais pas toujours facile à retenir. Le but pour nous c'est d'obtenir un nom de domaine qui restera vraisemblable avec l'officiel, si j'ose dire.

== Attention, le domaine en .onion généré ressemblera fortement au votre mais il ne sera pas identique, pas nécessairement plus simple à retenir cependant il sera plus facilement reconnaissable. ==

Shallot

Shallot - Échalote dans la langue de M.Pokora - permet de débusquer (le terme sied à merveille vu le contexte) un nom de domaine en .onion qui restera plus ou moins vraisemblable avec votre ndd public.

== Dans mon cas avec hiob.fr, Shallot a déniché le ndd suivant : jdcs7cehiobbfrqo.onion ==

Sexy, hein?
Allez, on installe Shallot.

1 - Rendez vous dans le répertoire /tmp et clonons Shallot. Vous devez avoir Git installé, je vous fais confiance pour le faire par vous-même si jamais ce n'était pas le cas.

cd /tmp
git clone https://github.com/katmagic/Shallot.git

2 - Configurons et installons Shallot

cd shallot
./configure && make

3 - Générons maintenant la clé RSA qui nous permettra d'avoir notre hostname vraisemblable.

./shallot domaine.ext

Shallot va mouliner un peu et finira par nous retourner un résultat qui collera avec notre nom de domaine! Copiez soigneusement la clé RSA obtenue en n'omettant pas de sélectionner aussi le header -----BEGIN RSA PRIVATE KEY----- et le footer -----END RSA PRIVATE KEY----- (et la clé comprise entre les deux, bien évidemment)

On y est presque! Il ne nous reste plus qu'à indiquer à Tor cette nouvelle clé.

4 - Rendez-vous dans le répertoire HiddenServiceDir créé pour votre nom de domaine - à savoir /var/lib/tor/domaine.ext- et ouvrez le fichier private_key généré par Tor

cd /var/lib/tor/domaine.ext
nano private_key

5 - Remplacez maintenant la clé RSA générée par Tor, par celle générée par Shallot. Enregistrez, relancez Tor et vérifiez l'hostname

service tor restart
cat hostname

L'hostname correspond à celui trouvé par Shallot? Parfait! Vous avez votre ndd en .onion, il ne reste plus qu'à configurer NGinx pour le faire pointer vers votre blog.

NGinx

Rien de plus simple.

Il vous suffit déclarer dans le fichier de configuration NGinx de votre nom de domaine, le domaine en .onion de telle sorte:

server {
        listen 0.0.0.0:80;

        server_name domaine.ext domaine.onion;
...

1 - Éditez donc le fichier de configuration en question. Admettons que vous avez créé un fichier pour votre blog en le baptisant avec son ndd

1 -
2 - Testez votre configuration NGinx

nginx -t

3 - Et relancez votre serveur NGinx si le test est réussi

service nginx restart

Trick: Lien relatif sur vos articles Ghost

Techniquement avec Ghost, vous n'avez rien de plus à faire à part peut-être ajouter l'url sur votre blog que ce soit en dur ou dans le menu de navigation comme j'ai pu le faire.

Mais le must-have est de proposer directement sur ses articles un lien vers l'article homologue sur son site en .onion. Étant donné que Ghost embarque tout à un tas de modèles sémantiques grâce à Handlebars, créer un petit lien relatif spécifique à chaque article n'est pas sorcier.

Dans notre cas nous allons utiliser le tag {{url}} qui permet de fournir un lien relatif vers l'article courant, en l'utilisant dans le fichier post.hbs.

Pour ma part je souhaite placer ce lien vers la version .onion dans les meta, en haut de mes articles comme ci-dessous

Je détaille ici la procédure que j'ai suivi, l'appliquer à votre thème et à sa structure ne sera pas plus compliqué.

1 - Ouvrez le fichier post.hbs

nano /content/themes/VOTRETHEME/post.hbs

2 - Placez le code qui suit là où vous souhaitez voir ce fameux lien, sur mon thème je l'ai placé juste après la balise <span class="post-title">{{{title}}}</span>(le titre)

<span class="onion" ><a href="http://domaine.onion{{url}}">voir .onion?</a></span>

Comme vous pouvez le constater j'ai attribué la class .onion à mon span, il ne vous reste plus qu'à éditer votre css pour embellir ce lien. sur mon thème j'ai fait au plus simple et l'ai calqué sur les autres metas.

3 - Relancez votre blog Ghost (avec Supervisord comme pour Isso?). Voilà, vous avez un lien relatif à chacun de vos articles redirigeant vers votre site en .onion.

Liens / sources