sitio estático como servicio onion (o cebolla) en tor

publicado el 2019-02-27


comparto aquí el proceso que estamos usando en eccs para compartir nuestros sitos estáticos como servicios onion (onion services, hidden services) en la red tor, para que sean accesibles globalmente de manera anónima, segura, y sin que necesitemos de un nombre de dominio.

además, lo estamos realizando desde una computadora personal buscando autonomía al auto-alojarnos (self-hosting).

esta guía está basada en este artículo: configuring onion services for tor (en inglés); solo que acá le agregué la configuración del servidor web (nginx).

todo este proceso lo puedes realizar en una computadora que quieras usar como servidor (que normalmente esté encendida y conectada, y con la función de proveer servicios web como un sitio); si lo realizas en tu computadora personal también funciona pero tu servicio solo estará en línea cuando estés en línea tú (lo cual puede o no convenir según el caso)

el sistema operativo del servidor que usamos en esta guía es debian :)

rata panchis adentro de una cebolla

¡encebollémonos!

pre-requisitos

el sistema tiene que tener nginx y tor instalados:

$ sudo apt-get install nginx tor

todo este proceso se puede hacer desde la computadora/servidor en cuestión, o accediendo a ella via ssh.

supondré que el directorio que tiene el sitio que queremos servir como servicio onion es /home/ratapanchis/sitios/supersitio que tiene al menos un archivo index.html

servir el sitio con nginx

entiendo que nginx es un servidor web con muchas posibilidades. aquí solo usamos lo más básico - aceptaré recomendaciones si hay algo que se pueda mejorar.

escribir configuración

hay que crear un archivo de configuración para el sitio dentro de /etc/nginx/sites-available. con el siguiente comando usamos el editor de texto nano, pero se vale usar cualquier otro como vim):

$ sudo nano /etc/nginx/sites-available/supersitio

la configuración básica que hay que poner en el archivo:

# /etc/nginx/sites-available/supersitio
server {
    listen       127.0.0.1:9999;
    root /home/ratapanchis/sitios/supersitio;
    index index.html;

#    server_name aquí pondremos la dirección de onion
}

estamos indicando que vamos a servir el sitio en 127.0.0.1 - la dirección de localhost (es decir, la misma computadora) - en el puerto 9999: este número es arbitrario con un límite inferior de 1023 (los menores están probablemente reservados) y superior de 65535.

indicamos la ubicación del sitio, y del archivo a servir como índice (a servir cuando no se específique alguno)

ya que tengamos la dirección onion la pondremos en server_name, aunque no es necesario hasta donde veo.

para guardar en nano hay que presionar ctrl+o (^o) y para salir ctrl+x (^x)

ligar configuración

nginx lee su configuración del directorio /etc/nginx/sites-enabled. hay que “ligar” el archivo que acabamos de crear:

$ sudo ln -s /etc/nginx/sites-enabled/supersitio \
             /etc/nginx/sites-enabled/supersitio

cargar configuración

iniciamos el servicio de nginx:

$ sudo systemctl start nginx

desde la misma computadora probamos con un navegador que el servidor esté funcionando.

podemos usar curl para recibir el código html del archivo index:

$ curl 127.0.0.1:9999

o lynx, si está instalado, para verlo en versión solo texto

$ lynx 127.0.0.1:9999

(para salir de lynx hay que presionar q y confirmar con y)

si todo está bien, podemos habilitar el servicio de nginx para que siempre se inicie al encender la computadora:

$ sudo systemctl enable nginx

crear el servicio onion

ya que estamos sirviendo el sitio internamente con nginx, lo que queremos es crear un servicio onion con una dirección que lleve a ese sitio.

escribir configuración

hay que editar el archivo de configuración de tor, que está en /etc/tor/torrc:

$ sudo nano /etc/tor/torrc

buscamos una sección que habla de “location-hidden services” (servicios con ubicación escondida). ahí podemos ver una plantilla, que replicamos acá con la información de nuestro supersitio:

# /etc/tor/torrc

HiddenServiceDir /var/lib/tor/supersitio
HiddenServicePort 80 127.0.0.1:9999
HiddenServiceVersion 3

HiddenServiceDir indica dónde se van a guardar los datos del servicio: tanto la dirección como las llaves pública y privadas - por defecto el directorio de /var/lib/tor solo lo puede acceder el servicio de tor o alguien con permisos de root, y así está bien.

HiddenServicePort hace el mapeo entre el “puerto virtual” del servicio onion y el “puerto real” de la computadora. en este caso, el puerto 80 es por el que se sirve normalmente el protocolo http usado en sitios web, y por lo tanto no hay que especificarlo cuando usamos un navegador.

HiddenServiceVersion indica la versión de la dirección que tendremos, la versión 3 es la usada actualmente y la recomendada (más segura, más larga, etc)

cargar configuración

ya con todo listo, podemos iniciar el servicio de tor:

$ sudo systemctl start tor

cuando todo funcione bien, podemos habilitarlo para que siempre esté disponible:

$ sudo systemctl enable tor

obtener dirección

si todo salió bien, podremos ver la dirección de nuestro servicio onion dentro del archivo /var/lib/tor/supersitio/hostname, que podemos ver de la siguiente forma:

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

la dirección la podemos probar en un navegador tor, en la computadora original o en cualquier otra (en cualquier lado del mundo :)

respaldo

conviene respaldar la llave privada del servicio en un lugar seguro - solo quien tenga esa llave puede servir al servicio onion correspondiente.

esto implica que si la llave se pierde, la dirección dejará de funcionar. o también implica que si la llave la tiene alguien más, esa persona puede pretender ser nuestro servicio.

básicamente, y por si las dudas, vale la pena respaldar todo lo que esté en /var/lib/tor/supersitio :)

conclusión

este es el procedimiento que estamos usando para servir sitios estáticos en eccs, usando un servidor básico de nginx.

como mencioné en un post anterior hablando de ssh via tor, esta lógica de servicios onion se puede utilizar para cualquier otra aplicación o servicio web.

ya iré actualizando qué otras cosas hago por acá en la darkweb… cualquier duda por aquí estoy :)

(y no olvides que puedes agregar a tus marcadores del navegador tor a el lab de rata panchis )


para comentar, escríbeme a ratapanchis arroba eccs.world :)