mercredi 5 janvier 2011

Passerelle vers un réseau Tor

Le but de ce billet est de créer une passerelle qui sort directement sur le réseau Tor.
A quoi cela peut bien servir ? Par exemple en changeant la route par défaut d'un client lui permettre d'être anonyme sur la toile (attention aux données sensibles qui transitent dans le réseau Tor tout de même), ou encore fournir une passerelle, potentiellement ouverte, vers internet sans être reconnu comme IP source des paquets sortants.

Tor est un réseau d'ordinateurs (volontairement) zombies qui permet de faire du multi-proxy.

Installer Tor

La première étape est l'installation de Tor sur un serveur:
# apt-get install tor
... et ben voilà, première étape terminée ;)
| Comme toujours, il est possible d'installer Tor à partir de ses sources afin d'avoir la dernière version:
$ wget http://www.torproject.org/dist/tor-0.2.1.28.tar.gz
$ tar xzf tor-0.2.1.28.tar.gz && rm tor-0.2.1.28.tar.gz
$ cd tor-0.2.1.28
$ ./configure
$ make
$ su -c 'make install'

|| Requirements:
# apt-get install build-essential
# apt-get install libevent-dev
# apt-get install libssl-dev

Configuration de Tor

(Rappel: on ne souhaite pas dans ce billet configurer Tor comme relais, mais simplement comme point d'entrée dans le réseau Tor)

Emplacement: /etc/tor/torrc ou /urs/local/etc/tor/torrc

RunAsDaemon 1
# Port et adresse d'écoute du démon Tor(relai)

# ORPort 9001
# ORListenAddress 127.0.0.1
# Port et adresse d'écoute pour les requêtes DNS
DNSPort 53
# Port et adresse d'écoute pour Tor en mode proxy transparent
TransPort 8118
TransListenAddress 0.0.0.0

A présent, vous pouvez lancer Tor:
# invoke-rc.d tor start
ou
# tor

Configuration IP forward

Un simple echo 1 > /proc/sys/net/ipv4/ip_forward suffit, il est également possible d'éditer le fichier /etc/sysctl.conf afin d'activer l'IP forward systématiquement:

net.ipv4.ip_forward=1

Configuration netfilter/iptables

Afin de concentrer tout le trafic entrant vers le proxy transparent local, on configure quelques règles iptables simples:
iptables -F -t nat
iptables -F
iptables -X
## Règles locales
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 8118
iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
## Règles extérieures
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 8118
iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53

Vous pouvez tester si le proxy fonctionne en local simplement en vous rendant sur www.whatismyip.org (et vérifier que ce n'est pas votre IP) ou:
$ GET whatismyip.org
ou
$ w3m whatismyip.org
Le même test est réalisable à partir d'un client extérieur après lui avoir modifié sa route par défaut.

Configuration annexe

Si vous voulez que l'ensemble du trafic d'un hôte passe systématiquement dans le réseau Tor, il suffit de configurer le serveur DHCP en rajoutant une entrée host. Par exemple pour dhcpd, on peut rajouter l'entrée suivante dans le fichier /etc/dhcp3/dhcpd.conf

host monHote{
fixed-address A.B.C.D;
hardware ethernet XX:XX:XX:XX:XX:XX;
option routers {adresse IP du serveur Tor}
}

Mise à jour: Commande socat:
socat -d -d TCP4-LISTEN:8118,fork,reuseaddr TCP4:<address_ip>:8118