Routeur wifi anonymisant avec Tor et OpenWRT

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 :

  • RAM : ≥64Mio2
  • CPU : ≥ Qualcomm Atheros QCA9558@720MHz 3
  • un port USB pour adjoindre une clef USB5

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


  1. 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. 

  2. Pour avoir testé, 32MiO est trop peu. 

  3. 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. 

  4. et clairement pas la plus anonymisante. Dans des cas critiques, privilégiez le Tor browser bundle

  5. 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. 

  6. 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.