ssh via tor

publicado el 2018-10-07


rata panchis adentro de una cebolla

otra entrada encebollada

bajo inspiración del proyecto de freedombone, conseguí una computadora “vieja” para usar como servidor.

con todo esto de la (re)decentralización, no me interesa demasiado ponerle un dominio y estar a la merced del dns… he decidido entonces servir solo servicios onion via tor (por acá hay un video en español sobre qué es tor y su navegador)

cuando estoy en la misma red local que el servidor, puedo accederlo con ssh.

la pregunta entonces fue, ¿puedo accederlo remotamente a través de la red tor?

aquí sumarizo los pasos y configuraciones que tomé.

configuración básica del servidor ssh

instalé debian y habilité también la instalación de ssh.

en el archivo de configuración en /etc/ssh/sshd_config (notar la “d” que es para el servidor, pues hay otro archivo ssh_config)

cambié el puerto por defecto y descomenté las HostKey que fueron generadas al instalar:

# /etc/ssh/sshd_config
Port 3456
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

al iniciar o reiniciar el servicio ssh…

$ sudo systemctl start ssh

y revisando su dirección ip en la red local

$ ip address

(por ejemplo 192.168.1.3)

puedo conectarme desde otra computadora en la misma red:

$ ssh usuaria@192.168.1.3 -p 3456

(eventualmente habilité el inicio de sesión solo por llaves públicas, pero ese es otro tema :)

configuración del servicio oculto “onion”

hay que instalar tor en el servidor

$ sudo apt install tor

y editar el archivo torrc, que en este caso está en /etc/tor/torrc

hay una sección que habla de location-hidden services y trae unos ejemplos.

básicamente lo que hay que hacer es ponerle un nombre al servicio, indicar desde qué puerto será accesible (80 para el default de http, 22 para el default de ssh, etc), a qué puerto local se está conectando, y opcionalmente elegir la versión de dirección que queremos (versión 2 son más cortas y probablemente finitas, versión 3 son mucho más largas y por el momento aparentemente infinitas (?))

la sección que escribí:

# en /etc/tor/torrc
# servicio ssh
HiddenServiceDir /var/lib/tor/servicio_ssh
HiddenServicePort 22 127.0.0.1:3456
HiddenServiceVersion 3

entonces, lo que llegue al puerto 22 (via ssh) será redireccionado al puerto que elegimos para ssh.

cabe notarse que podríamos tener cualquier combinación que se nos ocurra… tener el servidor ssh en puerto 22 y servirlo en tor por el puerto 22, tener el servidor ssh en puerto 22 y servirlo en tor por otro puerto, tener el servidor ssh en otro puerto y servirlo en tor por puerto 22 (este ejemplo), o tener el servidor ssh en otro puerto y servirlo en tor en otro puerto (que no necesariamente tiene que ser el mismo)

también es posible que un servicio tenga varios puertos de acceso (a distintos o no puertos de entrada)…

con el archivo guardado, (re)iniciamos el servicio de tor:

$ sudo systemctl start tor.service

y esto va a generar el servicio nuevo; su llave privada que debe mantenerse escondida (de la llave privada depende la autenticación de la dirección del servicio, y su hostname o dirección.

podemos ver la dirección:

$ sudo cat /var/lib/tor/servicio_ssh/hostname

que será una línea de muchos caracteres seguidos de .onion.

conexión ssh via tor

para los dos pasos anteriores hay más guías. para el paso final encontré un par pero requerían programas que yo no tengo en mi computadora y que no pude encontrar.

la otra computadora tiene que también tener tor instalado y corriendo. y en mi caso también instalé (ya tenía) torsocks para “envolver” aplicaciones y que todas sus conexiones salgan via tor.

en parabola:

$ sudo pacman -S tor torsocks

versión de una línea

a fin de cuentas llegué a la conclusión que la siguiente era la forma de conectarme:

$ torsocks ssh usuaria@direccionmuchoscaracteres.onion

o de la siguiente forma si el puerto del hidden-service es distinto, por ejemplo 8888

$ torsocks ssh usuaria@direccionmuchoscaracteres.onion \
    -p 8888

versión con archivo de host

en el camino encontré que podía configurar en ~/.ssh/config de mi computadora los datos del servidor para no tener que escribir tanto.

en teoría en ese archivo se puede poder poner la configuración del proxy para que no sea necesario preceder el ssh con torsocks, pero no encontré cómo.

en el archivo puse la siguiente configuración:

# ~/.ssh/config
# Media host as Tor hidden service
Host servidoroculto
   Hostname direccionmuchoscaracteres.onion
   User usuaria
#  Port 8888
   CheckHostIP no
   Compression yes
   Protocol 2

y entonces, después de guardarlo (descomentando el puerto si es necesario), se puede acceder de la siguiente forma:

$ torsocks ssh servidoroculto

la conexión se siente algo lenta, como podría esperarse. pero si contribuimos más con la red, eso podría mejorar.

y sea como sea, lo mejor de todo es que estamos logrando acceder de manera anónima a una computadora dentro de una red local que incluso podría tener algún tipo de firewall para no recibir ssh desde el exterior :)