Comment traverser du NAT avec Tor

Mais pourquoi tu es derrière du NAT ?

Bah tu rediriges ton port sur la machine

Oui, sauf qu'on a pas toujours la main sur le routeur. D'autant plus que vu l'engouement des telcos pour l'IPv6, on va vraisemblablement bouffer du CGN.

Concrètement, on fait comment ? Exemple pour ssh

Je vais vous expliquer comment faire pour ssh, pour les autres services, c'est encore plus court.

D'abord on commence par installer Tor (je te laisse voir ça avec la documentation de ton système).

Création d'un hidden service

Note, si tu penses que récemment il y a une faille sur les hidden services de Tor, je t'invite à fermer cette page puisque tu ne sais pas lire.

Une fois qu'on a installé Tor, il a du mettre dans /etc/tor son fichier de configuration, torrc. Dedans tu dois avoir

#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 22 127.0.0.1:22

Il suffit de décommenter les lignes, changer le port si sshd n'écoute pas sur le port 22. On relance Tor et normalement on a

/var/lib/tor/hidden_service# ls
hostname  private_key

Dans hostname se situe l'adresse du hidden service (et dans private_key, ô surprise, la clé privée).

# cat hostname 
l4dr3ss3duH5.onion

Une fois qu'on l'a récupéré, on installe socat si ce n'est déjà fait. Puis dans un terminal on entre la commande

socat TCP4-LISTEN:4252,fork SOCKS4A:127.0.0.1:l4dr3ss3duH5.onion:22,socksport=9050

Pour se connecter en ssh on tape

ssh user@127.0.0.1 -p 4252

Mais c'est inutilisable /o\ !

ssh sur une mauvaise connexion, c'est chiant. Tu te dis "pfff, je vais installer mosh", montre moi comment tu fais passer tes paquets UDP de mosh sur Tor qui est tcp-only.

Quand je disais que pour les autres services, c'était plus simple, c'est parce que les autres services ne sont pas interactif comme ssh. Donc ça sera plus lent que sur vanilla net mais ça marche.

Que faire ?

C'est là qu'on reconnait qu'OpenSSH-server a été codé par quelqu'un d'OpenBSD : il est complet et a une syntaxe simple </prosélitisme>.

$ man ssh
[...]
     -R [bind_address:]port:host:hostport
         Specifies that the given port on the remote (server) host is to be forwarded to the given host
         and port on the local side.  This works by allocating a socket to listen to port on the remote
         side, and whenever a connection is made to this port, the connection is forwarded over the
         secure channel, and a connection is made to host port hostport from the local machine.
[...]

On est connecté sur la machine derrière le NAT et on entre la commande :

machinenatée$ ssh -R 19999:localhost:22 user@pclocal

Boooootstrap \o/

Dans un autre terminal, on tape

pclocal$ ssh user@localhost -p 19999

Et hop on est connecté directement sans passer par Tor.

Petite précaution

Les hidden services sont récupérables plutôt facilement (on monte un relais, on attend 24 heures pour avoir le flag HSDIR et ... je ne sais pas la suite mais il me semble que c'est simple à faire :p).

Quand on se connecte sur le .onion, la machine voit comme hote distant localhost. Comme il y a toutes les chances que vous ne filtrez pas sur lo0, rien n'empêche le bruteforce.

On peut sans doute faire écouter l'hidden service sur une IP locale qu'on met en alias sur l'interface du serveur comme ça on peut filtrer sur cette IP. Mais là encore, si quelqu'un la brute force et il ne faut pas qu'elle soit bloquée éternellement sinon vous subirrez aussi le blocage.

By Vigdis in
Tags : #Tor, #auto-hébergement, #ssh, #NAT,
linkedin email