L'usage du réseau d'anonymisation Tor se démocratise, notamment grâce au Tor browser bundle et à la distribution tails, qui facilite l'usage de Tor dans de bonnes conditions d'anonymat.
Une autre approche, plus légère pour l'utilisateur est d'anonymiser systématiquement le trafic au niveau du routeur (wifi ou non), on parle d'anonymizing middlebox. C'est l'approche que propose la brique internet, c'est également celle que nous allons détailler en utilisant un point d'accès tournant sous OpenWRT.
Note: cet article n'explique pas le fonctionnement global de Tor, si vous n'êtes pas familier avec, je ne peux que vous encourager à en comprendre les grandes lignes avant de vous lancer.
Avantages
- Infiniment plus simple pour l'utilisateur (totalement transparent, il suffit de se connecter au wifi) ;
- tous les services sortent sur internet via tor, on minimise les risques de fuite (c'est à dire le risque qu'une partie du trafic ne passe pas par Tor), les service incapables de sortir via Tor sont bloqués.
Inconvénients
- Nécessite de faire confiance à l'administrateur du point d'accès wifi pour anonymiser le trafic ;
- le trafic n'est pas anonymisé entre le poste « client » (ex: ordinateur portable) et le point d'accès wifi, il est donc possible de l'espionner localement1
- Par rapport au TBB, votre navigateur continue à fournir des informations identifiantes au site visité (cookies, browser-id, plugins...).
Bref, c'est une solution parmi d'autres4, qui s'adapte à certains besoins, comme par exemple celui de partager un accès à internet en offrant à ses « invités » un certain anonymat et en évitant de lier ses propres adresses IP publiques à l'activité de ses invités.
Mise en œuvre avec OpenWRT
Nous allons considérer que le routeur sous Openwrt 14.04 est déjà installé et configuré basiquement, dispose d'un accès à internet (WAN) et émet un réseau wifi.
Le but du jeu va être d'émettre un deuxième réseau (SSID différent) qui fera sortir tout trafic via TOR.
Besoins matériels
Il vous faut un routeur supportant OpenWRT, j'utilise pour l'exemple un TP-Link TL-WR1043ND v2, mais n'importe quel routeur avec les caractéristiques fera l'affaire :
Il vous faudra en outre une clef USB d'une taille ≥ 32Mio (donc une vieille récup fait l'affaire).
Utiliser une clef USB pour le stockage
L'application tor est gourmande en espace, nous allons donc utiliser le mécanisme d'overlay, d'OpenWRT pour utiliser une clef USB.
Si vous utilisez déjà une clef USB en overlay, vous pouvez passer cette étape.
Sur une machine tierce
Brancher la clef usb et la formater (ex: si la clef apparaît comme /dev/sde1):
umount /dev/sde1
mkfs.ext4 /dev/sde1
sync
Puis retirez la clef de l'ordinateur et branchez là sur le routeur.
Sur le routeur OpenWRT
Connectez vous en SSH puis :
opkg update
opkg install kmod-fs-ext4 kmod-usb-storage block-mount
Il est possible que vous voyez une erreur : kmod: failed to insert /lib/modules/3.10.49/ext4.ko , vous pouvez l'ignorer.
Redémarrez ensuite le routeur et reconnectez vous.
Il nous faut maintenant copier le système actuel sur la clef :
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -
umount /mnt/sda1
Puis ajoutez la clef USB de manière permanente, et activez le montage automatique de l'overlay :
block detect > /etc/config/fstab
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].target=/overlay
Redémarrez le routeur et reconnectez vous, en faisant df -h
, vous devriez
observer que la partition "/" contient un peu plus que les maigres Mio initiaux
:-) (ici, 6.6Gio) :
df -h
Filesystem Size Used Available Use% Mounted on
rootfs 7.0G 21.2M 6.6G 0% /
/dev/root 2.3M 2.3M 0 100% /rom
tmpfs 30.0M 6.7M 23.3M 22% /tmp
/dev/sda1 7.0G 21.2M 6.6G 0% /overlay
overlayfs:/overlay 7.0G 21.2M 6.6G 0% /
tmpfs 512.0K 0 512.0K 0% /dev
Installer et configurer tor
Une fois connecté en ssh au routeur :
opkg update
opkg install tor
cat << 'EOF' > /etc/tor/torrc
User tor
RunAsDaemon 1
PidFile /var/run/tor.pid
DataDirectory /var/lib/tor
# Proxy transparent
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 9040
TransListenAddress 192.168.2.1
DNSPort 9053
DNSListenAddress 192.168.2.1
Log notice file /var/log/tor/notice.log
EOF
Nous ajoutons un nouveau réseau wifi pensez à personnaliser le SSID et à changer la phrase de passe (ou l'enlever) dans la commande ci-dessous :
cat << 'EOF' >> /etc/config/wireless
# will create wlan0-1
config wifi-iface
option device radio0
option network transtor
option mode ap
option ssid 'Transparent TOR'
option encryption psk2
option key mypassphrase
EOF
Nous ajoutons ensuite un réseau « transtor » interne à OpenWRT
cat << 'EOF' >> /etc/config/network
config interface transtor
option ifname "wlan0"
option proto static
option ipaddr 192.168.2.1
option netmask 255.255.255.0
EOF
cat << 'EOF' >> /etc/config/dhcp
config 'dhcp' 'transtor'
option 'interface' 'transtor'
option 'start' '23'
option 'limit' '250'
option 'leasetime' '12h'
EOF
… En définissons les règles d'accès…
cat << 'EOF' >> /etc/config/firewall
#Allow Tor Bridge incoming for censored users
config rule
option src wan
option proto tcp
option dest_port 443
option target ACCEPT
config zone
option name transtor
option input REJECT
option output ACCEPT
option forward REJECT
option syn_flood 1
option conntrack 1 #this setting is mandatory
# Allow Transparent clients the ability to DHCP an address
# XXX TODO: Audit this to ensure it doesn't leak UDP port 67 to the net!
config rule
option src transtor
option proto udp
option dest_port 67
option target ACCEPT
# Tor transparent-proxy-port (set in /etc/tor/torrc)
config rule
option src transtor
option proto tcp
option dest_port 9040
option target ACCEPT
# Tor DNS-proxy-port (set in /etc/tor/torrc)
config rule
option src transtor
option proto udp
option dest_port 9053
option target ACCEPT
EOF
… Et faisons en sorte que tout le trafic de ce réseau soit redirigé via Tor :
cat << 'EOF' >> /etc/firewall.user
# Redirection rules for Transparent Tor
iptables -t nat -A PREROUTING -i wlan0-1 -p udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A PREROUTING -i wlan0-1 -p tcp --syn -j REDIRECT --to-ports 9040
EOF
Il ne reste plus qu'à activer et relancer les services nécessaires6 :
echo '*/5 * * * * ps w|grep /usr/sbin/tor |grep -v grep || /etc/init.d/tor start > /dev/null' > /etc/crontabs/root
wifi
/etc/init.d/network restart
/etc/init.d/firewall reload
/etc/init.d/tor start
/etc/init.d/cron reload
/etc/init.d/tor enable
Utiliser…
Si connectez votre machine sur le bon réseau wifi (ici : « Transparent Tor »), vous devriez sortir automatiquement par Tor, pour vérifier, vous pouvez vous rendre sur https://check.torproject.org/?lang=fr.
… ou déboguer !
La première connexion au réseau Tor peut être un peu longue (2/3 minutes), il peut donc être normal que tout ne fonctionne pas juste après le démarrage. Vous pouvez consulter les logs pour en suivre la progression, ou bien pour diagnostiquer certaines erreurs :
tail -f /var/log/tor/notice.log
Limitations
D'abord, on est dans le cadre des limites de Tor : seuls le DNS et les protocoles s'appuyant sur TCP sont supportés, ensuite, la configuration actuelle du routeur ne prend pas en charge l'IPv6 via Tor (mais cela doit être possible).
Enfin, un des clients du routeur wifi utilisant déjà Tor ferait du tor-via-tor : ça fonctionne mais on risque d'avoir des performances désastreuses, et c'est un fonctionnement peu étudié d'un point de vue sécurité .
Au fait…
L'usage de Tor est libre mais l'infrastructure du réseau possède un coût, n'hésitez pas à donner quelques deniers à l'association Nos Oignons qui monte et jardine avec amour quelques nœuds de sortie à grande vitesse pour le réseau Tor.
Références
- Transparent proxy sur le wiki Tor
- OpenWRT et OpenWRT setup notes sur le même wiki (certaines infos sont assez anciennes).
- Roll Your Own Anonymizing Tor Proxy with a Raspberry Pi sur lifehacker
- Rootfs on External Storage (extroot) sur le wiki OpenWRT
-
Comme sur tout point d'accès wifi si vous n'utilisez pas Tor, un proxy ou bien un VPN. Cela suppose que votre adversaire ait accès au réseau local. ↩
-
Pour avoir testé, 32MiO est trop peu. ↩
-
Le processeur conditionne directement le débit de sortie, le Qualcomm Atheros QCA9558@720MHz permet un débit de 10Mbps (il est pour l'instant rare d'atteindre ce débit sur Tor, de toutes façons...), si vous avez besoin de moins, un cpu plus faible peut faire l'affaire. ↩
-
et clairement pas la plus anonymisante. Dans des cas critiques, privilégiez le Tor browser bundle. ↩
-
une installation typique du système en fonctionnement va occuper à peu près 30MiO, donc si la flash du routeur est >= 32MiO, on peut se passer du stockage externe, mais des mémoires de telles capacité sur les routeurs du commerce sont très rares. ↩
-
Bizarrement, je suis obligé de surveiller le service avec cron car si
/etc/init.d/tor enable
me rajoute bien un lien dans /etc/rc.d, le service ne démarre pas au boot. ↩