.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
- IETF / .onion - blog.torproject.org
- Tor / Nginx - Nicolas Simond sur Abyssproject.net
- Documention de Ghost - themes.ghost.org
- À propos des RFC - Request for comments