1
0
Bifurcation 0
miroir de https://github.com/PAPAMICA/Wiki-Tech.io.git synchronisé 2024-07-04 09:09:19 +02:00
Wiki-Tech.io/Réseaux/Tor.html

143 lignes
17 Kio
HTML
Brut Vue normale Historique

2021-05-11 21:44:44 +02:00
<!--
title: Tor : opérer un middle relay
description: Opérez un noeud Tor sous Debian
published: false
2021-05-11 23:56:30 +02:00
date: 2021-05-11T21:56:29.216Z
2021-05-11 21:44:44 +02:00
tags: linux, tor, réseau
editor: ckeditor
dateCreated: 2021-05-11T19:26:41.152Z
-->
2021-05-11 23:54:39 +02:00
<h1 style="text-align:justify;"><span class="text-big">Avant propos</span></h1>
<p style="text-align:justify;">Ce tutoriel n’a pas pour but d’enseigner ce qu’est Tor ou <span class="text-big">comment</span> vous y rendre : la documentation officielle de Tor et des milliers d’autres ressources sont à votre disposition sur Internet et seront certainement de meilleure qualité que ce que je pourrais écrire ici. Commencez donc par lire du contenu.</p>
<p style="text-align:justify;"><a href="https://en.wikipedia.org/wiki/Tor_(anonymity_network)">La page Wikipedia</a></p>
<p style="text-align:justify;"><a href="https://gitlab.torproject.org/tpo/team/-/wikis/home">L'incontournable documentation de Tor</a></p>
<p style="text-align:justify;">Ce wiki a pour but de vous montrer à vous, utilisateur intermédiaire de l’outil, comment aller plus loin. Ce n’est pas un guide pour débutant et encore moins un tuto Linux. Des bases en Linux sont nécessaires avant de s’attaquer à Tor sous Linux.</p>
<p style="text-align:justify;">&nbsp;</p>
<h3 style="text-align:justify;"><span class="text-big">I. Opérer un nœud Tor</span></h3>
<p style="text-align:justify;">Comme vous l’avez lu dans la documentation, lorsque vous vous contenez à Tor, une «&nbsp;route&nbsp;» est créée à l’intérieur du réseau. Les paquets sortant de votre poste sont chiffrés par trois fois (donc réencapsulés trois fois en AES localement) et à chaque nouveau «&nbsp;bond&nbsp;» («&nbsp;hops&nbsp;» en anglais / dans le jargon) une couche de chiffrement est retirée du paquet par les différents intermédiaires. Une fois arrivé à destination, la dernière couche est retirée afin que le host à qui vous vouliez communiquer au final puisse lire l’information en clair. Cette route n’est pas définitive et en fonction de votre configuration dans <a href="https://support.torproject.org/tbb/tbb-editing-torrc/">/etc/tor/torrc</a> elle sera plus oui moins éphémère. Une fois expirée, une nouvelle route sera créée par le client et ainsi de suite. Laissez les réglages par défaut à ce sujet.</p>
<p style="text-align:justify;">Il existe <a href="https://community.torproject.org/relay/types-of-relays/">plusieurs types de relais</a> et les héberger est plus ou moins dangereux pour l’opérateur (donc vous). Je vous déconseille plus que vivement d’héberger un nœud de sortie à moins que vous ne souhaitiez très fort que la police sonne à votre porte dans les heures à venir. De multiples opérateurs dans des pays pourtant libres et civilisés on eu de très gros problèmes légaux. Vous êtes prévenus.</p>
<p style="text-align:justify;">Un relais intermédiaire (middle relay) se charge de recevoir un paquet d’un côté à l’intérieur de Tor. Ce paquet est chiffré. Il retire une couche de chiffrement et le renvoie au prochain maillon de la chaîne de l’autre côté. Le paquet n’est pas totalement déchiffré ce qui veut dire qu’entant qu’opérateur d’un nœud à ce niveau vous ne pouvez pas lire l’information qu’il contient. Ce type de nœud est plutôt simple à maintenir et pas très dangereux puisque votre relai est caché à l’intérieur de Tor, rien ne sort sur Internet. La localisation géographique de votre relai n’est jamais divulgée et votre identité non plus.</p>
<p style="text-align:justify;">Avec le temps, votre relai va se voir confier de plus en plus de trafic à mesure que sa stabilité et sa fiabilité seront jugées «&nbsp;aptes&nbsp;» par l’algorythme du réseau. Si votre relai est robuste il se verra certainement attribuer le rôle «&nbsp;<i>d’entry guard&nbsp;</i>» (ou simplement «&nbsp;<i>guard&nbsp;</i>») ce qui est une consécration puisque le rôle des guards est primordial pour la sécurité des utilisateurs de Tor et le fonctionnement du réseau.</p>
2021-05-11 23:56:30 +02:00
<h3 style="text-align:justify;"><br><br><span class="text-big">II. Création de la machine virtuelle</span></h3>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">C’est parti&nbsp;! Comme souvent lorsqu’il s’agit de Tor, nous allons créer une machine virtuelle sur notre serveur. Je vous déconseille de faire fonctionner quoi que ce soit concernant Tor sur votre serveur en bare metal. Je préfère utiliser OpenBSD pour opérer des relais (principalement pour la possibilité de compiler Tor avec LibreSSL et pour le Secure Level 3) mais ce wiki est au sujet de Linux et surtout de Debian qui est un système plus que passable pour cet usage bien qu’un peu de hardening soit nécessaire à l’arrivée. Je n’ai pas utilisé Debian depuis 10 ans alors si vous voyez un truc choquant n’hésitez pas à le signaler.</p>
<p style="text-align:justify;">Pour créer la VM, quelques conseil sur les ressources&nbsp;:</p>
<p style="text-align:justify;"><strong>HDD&nbsp;:</strong> 5Go<br><strong>CPU&nbsp;:</strong> Entre 2 et 4 threads devraient suffire sur un CPU moderne équipé des instructions AES-NI, tout dépend de l’amour que vous voulez donner à votre relai.&nbsp;<br><strong>Mémoire&nbsp;:</strong> 512Mo si vous opérez moins de 40Mb en bnande passante, 1024Mo pour 40Mb et plus. Nous prendrons le soin de désactiver ls services inutiles… Debian n’est pas trop bloat on devrait s’en sortir pas mal.<br><strong>Réseau&nbsp;:</strong> Une interface réseau virtuelle avec un driver moderne. Un faites un bridge avec une interface physique pour exposer votre VM à votre LAN. Bien qu’aucune redirection ne sera necessaire il est toujours confortable de pouvoir accéder à votre machine via OpenSSH.<br>&nbsp;</p>
<p style="text-align:justify;"><i>Petite note pour les utilisateurs de Raspberry Pi : mes chers amis, un Raspberry Pi ne possède pas d'instructions AES-NI. Il galère à mort avec le chiffrement et génère d'horribles latences sur le réseau. Si vus voulez faire des expériences ponctuelles et vous former à Tor vous pouvez utiliser un Pi comme lab. Si vous souhaitez aider la communauté Tor merci de l’installer sur un </i><a href="https://fr.wikipedia.org/wiki/Serveur_informatique"><i>serveur.</i></a></p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;"><span class="text-big"><strong>a. Préparation de l'environnement</strong></span></p>
<p style="text-align:justify;">Un relais Tor est extrêmement simple… N’installez que le strict nécessaire sur votre machine (<a href="https://en.wikipedia.org/wiki/KISS_principle">KISS</a>):</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 22:44:00 +02:00
<pre><code class="language-plaintext">#&nbsp;apt install -y net-tools sudo vim</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">une adresse IP fixe n’est pas requise par Tor pour fonctionner correctement mais j’ai envie de pouvoir me connecter à ma VM en ssh&nbsp;:</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 22:06:43 +02:00
<pre><code class="language-plaintext">$ cat /etc/network/interfaces
2021-05-11 21:44:44 +02:00
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.17
netmask 255.255.255.0
gateway 192.168.1.1
2021-05-11 22:06:43 +02:00
</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">On redémarre le réseau :<br>&nbsp;</p>
2021-05-11 22:06:43 +02:00
<pre><code class="language-plaintext"># systemctl restart networking</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Le serveur doit impérativement être à l’heure. C’est un prérequis indispensable car le chiffrement se base sur le temps et Tor c'est du chiffrement. Vérifiez bien que l’heure réseau est activée, que votre TZ est correcte. Si ce n’est pas le cas il faut que vous l’activiez… Je trouve la gestion du temps très pourrie sous Debian, je vous laisse faire vous-même. Choisissez un démon entre chrony, ntp et je ne sais pas quoi d’autre à votre disposition . Personnellement j'aime ntpd(8) donc je l'utilise. Le résultat final doit ressembler à ça&nbsp;:</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 22:08:45 +02:00
<pre><code class="language-plaintext"># timedatectl
Local time: mar. 2021-05-11 17:43:45 CEST
Universal time: mar. 2021-05-11 15:43:45 UTC
RTC time: mar. 2021-05-11 15:42:03
Time zone: Europe/Paris (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">Bien que le firewall ne soit pas d'une utilité transcendante dans notre cas de figure je l'active par principe, surtout pour la sécurité du LAN.</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 22:11:45 +02:00
<pre><code class="language-plaintext"># apt install nftables
# systemctl enable --now nftables
# systemctl status nftables
● nftables.service - nftables
Loaded: loaded (/lib/systemd/system/nftables.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2021-05-11 20:08:40 CEST; 2h 2min ago
Docs: man:nft(8)
http://wiki.nftables.org
Process: 242 ExecStart=/usr/sbin/nft -f /etc/nftables.conf (code=exited, status=0/SUCCESS)
Main PID: 242 (code=exited, status=0/SUCCESS)</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Les repos du projet Tor sont toujours les premiers à recevoir les upgrades. C'est extrêmement important. Nous allons donc les installer afin d'être au top. N'utilisez <strong>JAMAIS</strong> les paquets maintenus par les distributions car ces derniers sont bien trop souvent anciens.</p>
<p style="text-align:justify;">Commencez par éditer <code>/etc/apt/sources</code><br>&nbsp;</p>
2021-05-11 22:39:22 +02:00
<pre><code class="language-plaintext"># cat /etc/apt/sources
deb https://deb.torproject.org/torproject.org stretch main
deb-src https://deb.torproject.org/torproject.org stretch main</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Ajoutez les PGP du repo :&nbsp;<br>&nbsp;</p>
2021-05-11 22:39:22 +02:00
<pre><code class="language-plaintext"># curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
# gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | apt-key add -</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Et pour finir on update :<br>&nbsp;</p>
2021-05-11 23:40:36 +02:00
<pre><code class="language-plaintext"># apt update &amp;&amp; apt install tor deb.torproject.org-keyring</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">On installe finalement Tor et Nyx sur la machine.</p>
2021-05-11 22:44:00 +02:00
<pre><code class="language-plaintext"># apt install tor Nyx</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;"><span class="text-big"><strong>b. Configuration du relai Tor</strong></span></p>
<p style="text-align:justify;">Par défaut sous OpenBSD on fait tourner le daemon <code>tor(1)</code> avec l’utilisateur <code>_tor</code> et on cloisonne l’exécutable avec <a href="https://man.openbsd.org/pledge.2">pledge(2)</a>. C’est la première fois que j’exécute le démon sous Linux en mode serveur et j’étais très surpris de voir que l’option «&nbsp;User&nbsp;» n’est pas activée par défaut dans le torrc. Je ne sais pas &nbsp;trop s'il le fait automatiquement (ou s'il le lance avec l'utilisateur daemon)… dans le doute :<br>&nbsp;</p>
2021-05-11 22:13:16 +02:00
<pre><code class="language-plaintext"># sudo useradd _tor
# sudo usermod -s /sbin/nologin _tor
# id _tor
# uid=1001(_tor) gid=1001(_tor) groupes=1001(_tor)</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Dans une prochaine version de ce tuto nous intégrerons un chroot optionnel mais pour le moment on va rester comme ça… Nous allons maintenant modifier notre fichier <code>/etc/tor/torrc</code>. Vous trouverez la version complète de mon fichier de sur le git mais en substance ce que vous devez modifier / dé-commenter / ajouter se trouve ici :&nbsp;<br>&nbsp;</p>
2021-05-11 22:19:06 +02:00
<pre><code class="language-plaintext">User _tor #&nbsp;pour doper les privilèges
2021-05-11 22:39:22 +02:00
DataDirectory /var/lib/tor # Si on se sert de notre VM pour autre chose qu'un relay
2021-05-11 22:19:06 +02:00
Log notice file /var/log/tor/notices.log # oui on log ce que fait Tor autrepart que dans syslog
2021-05-11 22:39:22 +02:00
ControlPort 9051 # Pour Nyx
2021-05-11 22:19:06 +02:00
SocksPort 0 # pas de proxy SOCKS
RunAsDaemon 1 #&nbsp;on le fait tourner comme un daemon en background
2021-05-11 22:39:22 +02:00
ORPort 9001 # man torrc
2021-05-11 22:19:06 +02:00
Nickname RoxXoRNOde666 #&nbsp;Le nom de votre node de HaxXoR
2021-05-11 22:30:01 +02:00
ContactInfo TonMailDeRoxXor@hacker.com # le mail de contact. Utilisez un mail que vous allez lire mais aussi votre cerveau
2021-05-11 22:24:53 +02:00
DirPort 9030 # notre serveur sera un directory mirror (voir doc)
ExitPolicy reject *:* # ce n’est pas un noeud de sortie, on interdit l'écoute explicitement sur toutes les interfaces</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;"><br>Nous créons maintenant les fichiers nécessaires pour les logs.<br>&nbsp;</p>
2021-05-11 22:30:01 +02:00
<pre><code class="language-plaintext">#&nbsp;touch /var/log/tor/notices.log
# chown _tor:_tor /var/log/tor/notices.log
#&nbsp;chrmod 650 /var/log/tor/notices.log</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Et on donne des droits à notre utilisateur <code>_tor</code> afin qu’il puisse écrire dans <code>/var/lib/tor</code><br>&nbsp;</p>
2021-05-11 22:30:01 +02:00
<pre><code class="language-plaintext">#&nbsp;chown -R _tor:_tor /var/lib/tor</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Assurez-vous que les droits UNIX sur les répertoires auxquels le démon a accès soient bien en 650 &nbsp;pour <code>_tor :_tor</code> si non il va vous rappeler à l’ordre au lancement. On check que tout s’exécute correctement :<br>&nbsp;</p>
2021-05-11 22:30:01 +02:00
<pre><code class="language-plaintext"># tor
May 11 20:09:59.818 [notice] Tor 0.3.5.14 running on Linux with Libevent 2.1.8-stable, OpenSSL 1.1.1d, Zlib 1.2.11, Liblzma 5.2.4, and Libzstd 1.3.8.
May 11 20:09:59.819 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
May 11 20:09:59.821 [notice] Read configuration file "/etc/tor/torrc".
May 11 20:09:59.836 [notice] Opening Socks listener on 127.0.0.1:9050
May 11 20:09:59.836 [notice] Opened Socks listener on 127.0.0.1:9050</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Pas d'erreur ni de warning, la classe. Votre node de roxXor est bientôt prêt. On upgrade le système, on active le daemon et on reboot !<br>&nbsp;</p>
2021-05-11 22:30:01 +02:00
<pre><code class="language-plaintext"># systemctl enable tor
# apt update &amp;&amp; apt full-upgrade &amp;&amp; systemctl reboot</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">wooOOT !</p>
<p style="text-align:justify;"><span class="text-big"><strong>c. Audit du daemon</strong></span></p>
<p style="text-align:justify;">A ce stade votre relai est lancé. Comme pour n'importe quel serveur vous avez besoin de l'auditer, savoir combien de bande passante il consomme etc. <code>nyx(1)</code> est la pour vous aider ! Nyx c'est un outil qu'il est bien. Il va vous permettre d'observer en mode console votre trafic de manière semi-graphique un peu comme un htop. Nous l'avons déjà installé plus haut. Nous avons déjà écrit le nécessaire à son fonctionnement dans notre <code>/etc/tor/torrc</code> &nbsp;il ne nous reste plus qu'à le lancer !</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 23:08:42 +02:00
<figure class="image"><img src="/nyx.png"></figure>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">Je vous laisse checker la doc&nbsp;<a href="https://nyx.torproject.org/"> à cet endroit</a> ainsi que dans le manuel e nyx(1). Ce qu'il y a de bien avec Nyx c'est qu'on peut faire beaucoup de choses avec. Il n'est pas indispensable pour tout mais toujours le bienvenu pour avoir un visuel sur nos ressources. Vous remarquerez que les notices s'affichent ici, bref il vous le faut !</p>
<p style="text-align:justify;"><span class="text-big"><strong>d. Nyx</strong></span></p>
<p style="text-align:justify;">En ouvrant Nyx vous avez sûrement remarqué la ligne <code>Bandwidth (limit: 1 GB/s, burst: 1 GB/s)</code>C'est que Tor va vous pomper votre bande passante. Beaucoup plus que vous ne le pensez surtout lorsque l’algorithme de Tor va juger votre serveur “apte à prendre du gros trafic”. Si vous opérez un relai il va saturer votre NIC. J'ai une grosse connexion et le fait que ma VM consomme 1Gb ne me gêne pas mais je comprendrais si vous vouliez ajouter cette petite option à la fin de votre <code>/etc/tor/torrc</code> :</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 23:17:40 +02:00
<pre><code class="language-plaintext">RelayBandwidthRate 40000 KBytes
RelayBandwidthBurst 100000 KBytes</code></pre>
2021-05-11 23:54:39 +02:00
<p style="text-align:justify;">Il existe d'autres options (comme pour tout avec Tor) <a href="https://support.torproject.org/operators/limit-total-bandwidth/">mais je vous laisse les découvrir</a>.</p>
<p style="text-align:justify;"><span class="text-big"><strong>e. Maintenir le système à jour.</strong></span></p>
<p style="text-align:justify;">Comme vous l'avez constaté un relai Tor n'est vraiment pas compliqué à mettre en prod… Le travail que cela demande est quasi nul. Prenez le temps de donner un peu d'amour à votre VM avec un joli <code>cron(8)</code> de mise à jour automatique et un petit reboot par semaine. Je vais créer un papier dans ce wiki avec tout ça mais en attendant, <a href="https://wiki.debian.org/UnattendedUpgrades">RTFM</a>.</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">&nbsp;</p>
2021-05-11 23:10:35 +02:00
<p>&nbsp;</p>