Crear servicio oculto para sitio web en Nginx (clearnet y darknet)

¿Quieres crear un sitio web usando un servidor Nginx y quieres tener también ese sitio web como servicio oculto para usuarios de Tor? Aquí te explico cómo hacerlo en Debian GNU/Linux.

Primero instalamos los siguientes paquetes:

sudo apt install nginx tor

Luego hay que descomentar las siguientes líneas del archivo /etc/tor/torrc:

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

Yo he cambiado el nombre del directorio del servicio oculto a servicio_oculto, quedando así:

HiddenServiceDir /var/lib/tor/servicio_oculto/
HiddenServicePort 80 127.0.0.1:80

A continuación, reiniciamos el servicio de Tor:

sudo systemctl restart tor

Al reiniciarse Tor crea el directorio servicio_oculto/ y lo llena con la URL del servicio oculto (archivo hostname) y las claves pública y privada.

Si tenemos tanto Nginx y Tor ejecutándose como servicios y nos metemos en la dirección que hay en /var/lib/tor/servicio_oculto/hostname, podremos ver la página de bienvenida de Nginx.

Por defecto, el sitio web para Nginx se ha de ubicar en la ruta /var/www/html/. Así pues, solo tenemos que desarrollar el sitio web en esa ubicación. No importa que se use la URL de Tor o una URL convencional, el sitio web es el mismo. Ten en cuenta de que para que los enlaces a otras páginas de tu sitio web funcionen usando URLs .onion es necesario usar URLs relativas.

Extra: añadir cabecera de .onion disponible

Simplemente hay que añadir la siguiente línea add_header a la parte del archivo de configuración de Nginx1 que pone location /:

location / {
    # Otras cosas que hay en location /
    add_header Onion-Location http://[el_nombre_de_tu_servicio_oculto]/$request_uri;
}

Deberás reemplazar [el_nombre_de_tu_servicio_oculto] por el nombre que se encuentra en el archivo /var/lib/tor/servicio_oculto/hostname, quedando algo así2:

location / {
    add_header Onion-Location http://63xpbju6u6kzge3k5mobwivob2seui4ka26l2iboraw5lxz262brgjad.onion/$request_uri;
}

  1. En este caso /etc/nginx/sites-available/default

  2. El nombre del servicio oculto es un ejemplo, no lo copies y lo pegues así; pon el nombre del servicio oculto que has creado. 

Comentarios