Après avoir présenté le réseau Tor et son utilisation sous Ubuntu, voici comment mettre en place un serveur Tor sur sa machine, pour contribuer à la qualité du réseau. La lenteur inhérente au principe de fonctionnement de Tor est en effet améliorable, dans une certaine mesure, en multipliant les serveurs présents sur le réseau.

tor-logo.png


Pour aider le réseau à tourner il est donc possible de mettre en place un nœud sur votre propre connexion. Un tel nœud devrait rester actif aussi souvent que possible, donc l'intérêt de l'activer sur une machine éteinte régulièrement est moindre, mais néanmoins pas négligeable. Mais si votre serveur ne tourne pas en permanence il n'est pas recommandé de l'enregistrer auprès du projet Tor.
Dans le cas contraire, rendez-vous sur la page de contacts du projet pour vous faire connaitre une fois votre serveur en place.

Tor va consommer de la bande passante sur votre connexion à internet, et même si le débit alloué à Tor est paramétrable, ne laisser que quelques Ko/s au nœud n'est pas une grande aide pour le réseau. Il faut donc être prêt à offrir de la place pour Tor sur votre bout de tuyau, les recommandations du projet Tor indiquent 20 Ko/s minimum dans les deux sens, il s'agit là d'un strict minimum.

Ce qui suit concerne avant tout la distribution Ubuntu. Des adaptations (mineures sur les systèmes Debian-like) seront nécessaire sur d'autres distributions.

Sommaire

  1. Mise en place
  2. Affiner la configuration
  3. Avertissements et alternatives

Mise en place

Installation

Ce qui suit concerne avant tout la distribution Ubuntu. Des adaptations seront nécessaire sur d'autres distributions.

Il faut ajouter le dépôt de torproject.org à votre fichier "/etc/apt/sources.list". Ne surtout pas utiliser les paquets disponibles dans les dépôts universe d'Ubuntu, ils ne sont plus maintenus depuis plusieurs mois !

Voici les lignes à ajouter dans le fichier "sources.list" :

## DEPOT TOR
deb http://deb.torproject.org/torproject.org karmic main
# Decommenter la ligne ci-dessous pour activer le dépôt
# de la branche de developpement.
# Cette version comporte plus de bugs, soyez sur dans avoir besoin.
# deb http://deb.torproject.org/torproject.org experimental-karmic main

Vous pouvez remplacer "karmic" par le nom de votre distribution. Pour Ubuntu 9.04 c'est "jaunty", pour la 8.10 c'est "intrepid" et la 8.04 c'est "hardy". Pour Debian Etch, c'est "etch", et pour Debian Lenny c'est "lenny".

Il faut ensuite importer la clé du dépôt en exécutant les deux commandes suivantes :

gpg --keyserver keys.gnupg.net --recv 886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -

Et enfin mettre à jour la liste des paquets :

sudo apt-get update

Tor et Privoxy s'installent ensuite avec la commande suivante :

sudo apt-get install tor tor-geoipdb

Plus d'informations sur ce dépôts sur la page dédiée du site torproject.org


Configuration

La configuration du serveur se réalise dans le fichier /etc/tor/torrc. Voici les paramètres importants pour une configuration minimale :

SocksPort 9050
SocksListenAddress 127.0.0.1
DataDirectory /var/lib/tor
Nickname un_pseudo_au_choix
Address votre_ip_publique (ou un nom DynDNS/No-IP)
ContactInfo une_adresse_mail@domaine.tld
ORPort 9001
RelayBandwidthRate 20 KBytes
RelayBandwidthBurst 35 KBytes
ExitPolicy reject *:*

Nickname sera le nom du serveur, il doit impérativement être unique. Si vous déplacez votre serveur sur une nouvelle machine, il faut réutiliser ce même nickname, ainsi que le même fichier "keys/secret_id_key" pour garder la même identité.

Address doit spécifier l'adresse IP publique du serveur. Si votre adresse est dynamique, il faut indiquer un nom que vous pouvez obtenir grâce à DynDNS ou NoIP.

ContactInfo accepte une clé GPG, sous cette forme :

ContactInfo 1234E/1B3D5F6 Prenom Nom adresse@domaine.tld

RelayBandwidthRate indique le débit maximum alloué au serveur Tor, sans prendre en compte votre propre utilisation local. Une valeur de 20 KBytes est vraiment le minimum pour un serveur.

RelayBandwidthBurst, indique une limite haute, en cas de gros trafic sur le serveur, qui permet d'apporter un peu de "punch" en cas de besoin.

La politique de sortie

L'option ExitPolicy est importante, puisqu'elle permet de déterminer le type de serveur. Un serveur Tor peut être de deux types :

  • Serveur de transfert (relay server)
  • Serveur d'entrée/sortie (exit server)

On parle aussi parfois de bridge relays", qui sont des relais du réseau Tor non enregistré dans les listes de serveurs. Au niveau de la configuration du serveur, il n'y a pas de différences entre un bridge relay et un normal relay''.

Dans l'exemple ci-dessus, la politique est de rejeter tout le trafic en sortie (ExitPolicy reject *:*), ainsi le serveur sera uniquement un serveur de transfert, et aucune connexion ne semblera venir de votre IP. Votre serveur fera toujours du transit d'un serveur tor à un autre, ne sera jamais en début ou fin de chaîne, et ne touchera jamais la cible de la connexion, vous garantissant la tranquillité vis à vis d'éventuelles problèmes avec votre IP.

tor-reseau.png

ExitPolict permet de filtrer le trafic selon les ports TCP utilisés, une politique de rejet plus souple peut donc être utilisée pour permettre à votre serveur d'être un serveur d'entrée/sortie pour certains types de trafic. Pour celà il est possible de spécifier une série de port à rejeter, puis en dernière règle d'accepter tout le reste. Voici un exemple :

ExitPolicy reject *:25
ExitPolicy reject *:119
ExitPolicy reject *:135-139
ExitPolicy reject *:445
ExitPolicy reject *:465
ExitPolicy reject *:587
ExitPolicy reject *:1214
ExitPolicy reject *:4661-4666
ExitPolicy reject *:6346-6429
ExitPolicy reject *:6699
ExitPolicy reject *:6881-6999
ExitPolicy accept *:*

Pour savoir quel trafic correspond à quel port, vous pouvez consulter le site www.iana.org, ou plus simplement votre fichier "/etc/services" ainsi :

$ cat /etc/services |grep numero-du-port

Il est également possible de définir des limites sur des adresses IPs ou réseaux :

ExitPolicy reject 0.0.0.0/8:*
ExitPolicy reject 169.254.0.0/16:*
ExitPolicy reject 127.0.0.0/8:*
ExitPolicy reject 192.168.0.0/16:*
ExitPolicy reject 10.0.0.0/8:*
ExitPolicy reject 172.16.0.0/12:*
ExitPolicy reject 213.112.108.246:*

Affiner la configuration

Augmenter la limite de fichiers ouverts simultanément

Pour permettre à votre serveur d'être rapide, il peut être utile de modifier la limite du nombre de fichiers ouvrable par l'utilisateur système qui fait tourner le serveur. Il s'agit de l'utilisateur "debian-tor" sous Ubuntu, à vérifier avec un ps aux |grep tor.

Pour augmenter cette limite à par exemple 4092 fichiers en même temps, ajoutez la ligne suivante au fichier ''/etc/security/limits.conf :

debian-tor hard nofile 4092
Limiter le trafic par période

Il est possible de limiter le trafic de votre serveur sur une période donnée avec les options AccountingStart et AccountingMax. Elles s'emploient ainsi :

AccountingStart day|week|month [day] HH:MM
AccountingMax N bytes|KB|MB|GB|TB

Par exemple les lignes suivantes limitent le trafic à 15 GB par semaine, avec remise à zéro du compteur tous les dimanche à 12 heures :

AccountingStart week 7 12:00
AccountingMax 15 GB

Attention, cette limite s'applique aussi à vous en temps qu'utilisateur de votre serveur, votre trafic personnel sur Tor peut donc être perturbé pas ces limites.

En outre, le serveur ne va pas remettre à zéro son compteur exactement à 12 heures le dimanche, dans la mesure ou il garde une trace de la vitesse à laquelle il atteint sa limite et se réveille en conséquence.

Il faut aussi savoir que l'utilisation de AccountingMax n'est pas compatible avec la mise en place d'un Directory Server. Celui ci sera automatiquement coupé si AccountingMax est activé, les logs en témoigneront :

[notice] Not advertising DirPort (Reason: AccountingMax enabled)
Vérifier que tout est correct

Simplement en allant jeter un œil au logs. Les lignes suivantes indiquent que le serveur est en marche et joignable :

Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Now checking whether ORPort *.*.*.*:* is reachable... (this may take up to 20 minutes -- look for log messages indicating success)

Dans le cas ou un "Directory Server" est paramétré, la ligne suivante confirme son bon fonctionnement et son accessibilité :

Self-testing indicates your DirPort is reachable from the outside. Excellent.
Vérifier que le serveur est connu

Quelques sites proposent une liste de serveurs disponibles.
L'un des plus connu est torstatus.kgprog.com (qui ne répond plus), mais il y a aussi torstatus.blutmagie.de ou torstatus.all.de, et vous trouverez sur ces pages les autres miroirs existant. Bientôt votre serveur s'y affichera peut-être !

torstatus.png

Vous pouvez si vous disposez d'un serveur web solide mettre en place votre propre TorStatus en récupérant les sources sur la page des téléchargements du site du projet TorStatus.

Et pour les amoureux des graphiques et statistiques, il existe metrics.torproject.org/, ainsi que le projet Atlas.

Paramétrer et consulter les logs

Sous Ubuntu, Tor enregistre les logs dans le fichier /var/log/tor/log. Par défaut le niveau d'enregistrement est positionné sur "notice", mais il est possible de choisir parmi 5 niveaux :

  • err : Enregistre uniquement les erreurs critiques qui empêchent le fonctionnement du serveur.
  • warn : Enregistre les erreurs non-critiques.
  • notice : Le niveau par défaut. Enregistre les informations de démarrage/extinction du serveur et de construction initial du circuit.
  • info : Déjà un niveau beaucoup plus verbeux. Contient de nombreuses informations inutiles dans la majorité des situation.
  • debug : Enregistre pratiquement tout. Quasi illisible pour le comum des mortels, d'autant que les logs de Tor à ce niveau ne sont pas particulièrement explicites. À éviter donc...

Il est possible de passer par syslog en utilisant la ligne suivante :

Log notice syslog

Il est aussi possible de spécifier le fichier de logs :

Log info file /var/log/tor/info.log

Avec une telle ligne, tous les logs de niveau "info" ou supérieur vers le fichier "/var/log/tor/info.log".

Cependant, la configuration par défaut est probablement la meilleur si vous n'envisagez pas de vous plonger dans les arcanes de Tor.

Un système de monitoring est également disponible sur la page du projet ARM.

Installer un service caché

Tor permet de paramétrer divers services cachés, principalement un serveur HTTP, mais aussi une serveur FTP ou SSH. Ces serveurs seront accessibles sans avoir à révéler votre adresse IP aux visiteurs, via une adresse se terminant par .onion.

Il n'est pas question ici de traiter de la configuration d'un serveur, aussi nous allons nous concentrer sur la configuration de Tor pour rendre accessible des services cachés.

La configuration passe par le fichier /etc/tor/torrc, il faudra y ajouter deux lignes comme dans l'exemple ci-dessous :

HiddenServiceDir /usr/local/tor/http_hidden_service/
HiddenServicePort 80 127.0.0.1:3128
  • HiddenServiceDir contient un répertoire qui accueillera les donnés de votre service. Un fichier nommé hostname sera crée par Tor dans ce répertoire, il contiendra l'adresse onion de votre service caché. Il est donc important que l'utilisateur faisant tourner Tor ai les droits lecture/écriture sur ce répertoire, d'autant que ce répertoire sera créé au lancement de Tor si besoin. Un autre fichier nommé private_key contiendra les clés clés publique/privée pour votre service caché. Attention à ne pas partager ce fichier !
  • HiddenServicePort contient d'abord un port virtuel qui sera vu par les visiteurs, puis une adresse IP et un port hébergeant le service à atteindre, vers lesquels le port virtuel sera redirigé.

Il est possible d'indiquer plusieurs services cachés, dans l'exemple ci dessous un serveur HTTP puis une serveur SSH :

HiddenServiceDir /usr/local/tor/http_hidden_service/
HiddenServicePort 80 127.0.0.1:8080

HiddenServiceDir /usr/local/tor/ssh_hidden_service/
HiddenServicePort 22 127.0.0.1:22

N'oubliez pas de redémarrer Tor après chaque modification ! Ensuite il ne reste plus qu'à communiquer de façon adéquate les adresses onion de vos services.

Prenez en considération les possibilités de fuite d'informations par les services cachés. Il est primordiale de bien configurer les serveurs HTTP, FTP ou encore SSH qui seront accessible via Tor. Une première bonne idée consiste à utiliser un serveur aussi simple que possible, et donc par exemple de préférer thttpd à Apache pour un serveur HTTP.

Si vous contrôlez plusieurs serveurs

C'est évidemment une bonne chose pour le réseau de faire tourner plusieurs serveurs sur différentes machines, mais il faut noter qu'il n'est pas recommandé de faire tourner trop de serveurs sur le même réseau, puisque le but de Tor est aussi de disperser le trafic pour le rendre difficile à tracer.

Il est également important dans un tel cas de positionner l'option MyFamily dans le fichier de configuration de Tor. Cette option va permettre aux utilisateurs du réseau de ne pas construire de circuit passant par des serveurs liés par leurs propriétaires. L'option MyFamily doit simplement indiquer l'empreinte de la clé de chaque nœud sous votre contrôle, sans espace, séparée par une virgule et précédée d'un $. Cette empreinte comportent 40 caractères :

MyFamily $AD5GK8U3FE54FDZH78K5NB3DC7YH89H44G21DCSZ,$2DE68KJNE35G12CFGJH9IKL0PMS24DVRGHN783G3

Pour obtenir l'empreinte d'un nœud, il est possible d'utiliser la commande suivante :

$ tor --list-fingerprint 
Dec 30 07:18:27.102 [notice] Tor v0.2.1.20. This is experimental software. Do not rely on it for strong anonymity. (Running on Linux i686)
Dec 30 07:18:27.238 [notice] Your Tor server's identity key fingerprint is 'NomDuServeur 2DE68KJNE35G12CFGJH9IKL0PMS24DVRGHN783G3'

Il est inutile d'indiquer le "NomDuServeur" ni l'espace juste avant l'empreinte de la clé. Notez qu'il est aussi possible d'indiquer uniquement le nom du serveur, sans la clé. Mais il est plus prudent de ne pas utiliser cette possibilité pour éviter des problèmes.

Directory Server

Les "Directory Server" sont des miroirs de la liste des serveurs Tor connus, mais aussi des adresses en .onion. Il est facile de configurer son serveur pour qu'il agisse comme miroir, mais soyez sur de disposer de suffisamment de bande passante et de débit pour le faire.

Pour mettre en place un "Directory Server", il suffit de décommenter la ligne suivante de fichier torrc :

DirPort 9030

Il faut que ce port TCP 9030 soit accessible de l'extérieur. Notez aussi qu'utiliser une limite de bande passante ne permet pas d'être "Directory Server".

Avertissements et alternatives

Vidalia

Vidalia est une interface graphique de configuration de Tor comme simple client ou comme relay. Son utilisation est très simple, l'interface étant traduite en français et particulièrement claire.

L'installation se fait classiquement :

sudo apt-get install vidalia

L'interface s'ouvre lors du premier lancement du programme et dispose de liens vers plusieurs outils de configurations et/ou de surveillances.

tor-vidalia.png

Les diverses options de configuration sont évidemment les mêmes que dans le fichier torrc, je ne m'étant pas la dessus, mais notez tout de même que Vidalia ne stock pas les fichiers dans les mêmes répertoires que Tor. Par défaut Vidalia utilise les répertoires /home/utilisateur/.vidalia pour les fichiers de configurations et '/home/utilisateur/.tor/'' pour les fichiers du relay. Ces répertoires sont modifiables (attention à couper le relay avant de les modifier) graphiquement dans les options de Vidalia.

Il faut aussi notez que rien ne permet d'indiquer une adresse IP ou un nom DNS pour rendre votre relais accessible.
Cherchant à résoudre les adresses localhost puis celle de mon réseau privé, Tor ne parvenais pas à trouver mon adresse IP publique. Il faut dans ce cas ajouter à la main la ligne suivante dans le fichier torrc de Vidalia :

Address votre_ip_publique (ou un nom DynDNS/No-IP)

vidalia-allopen.png

Je préfère avoir la main sur le fichier de configuration d'un serveur, c'est pourquoi je n'utilise pas Vidalia. Il s'agit néanmoins d'un outil très pratique qui vaut largement la peine d'être testé.

Chrooter Tor

Traduction de ce texte à venir.

Tor Weather

Ce service proposer gratuitement à tout les gestionnaires d'un serveur Tor qui accède au status de "Stable Server" permet d'être automatiquement averti si le serveur est down depuis plus de x heures/jours/mois, si le serveur fait tourner une version de Tor à mettre à jour, etc.

tor-weather.png

L'inscription se fait sur le site du service Tor Weather. Il vous sera demandé le fingerprint de votre serveur, disponible dans le fichier "/var/lib/tor/fingerprint".


Avertissements

Faire tourner un serveur Tor d'entrée/sortie sur votre connexion n'est pas sans risque. Si quelqu'un s'amuse à aller modifier n'importe comment des pages WikiPedia en passant par votre serveur, il arrivera un jour ou les admins de WikiPedia banniront votre IP. Sachez aussi que plusieurs serveurs UseNet refusent purement et simplement les IP hébergeant un serveur Tor.
Bien sûr, ces problèmes concernent surtout les gros serveurs Tor, mais avec le temps, certains petits serveurs peuvent avoir de mauvaises surprises. Une liste de serveurs Tor est disponible ici.

Cette FAQ vous donnera de nombreuses informations sur les utilisations abusives de Tor. Cependant, Tor est dépendant de ses nœuds, et plus ces derniers seront nombreux, plus le réseau sera rapide et solide. Un petit serveur Tor disposant de quelques dizaines de KBytes de bande passante est déjà une aide pour le réseau, même s'il ne s'agit pas d'un serveur de sortie.

Commentaires

1. Le 21 janvier 2010, 15:21 par Galepin

Excellent tuto, bravo et merci !