Crear un hidden service (una pagina .onion) desde 0.

Buenas,

Como he mencionado en el post anterior, vamos a crearnos un servidor en la "Deep Web" o mejor dicho, la red de Tor.

La idea es básicamente crear una máquina virtual, instalar Debian, instalar Apache y PHP, instalar Tor, configurar lo para que actué de hidden service, abrir puertos y tirar a Internet. ¿Suena fácil? Pues lo es =)

Empecemos por configurar la máquina virtual. Yo utilizare VirtualBox pues es gratuito y una alternativa a tener un servidor, para los que tengan alguna Raspberry, algún router capaz de tirar de OpenWrt o simplemente un servidor.. perfecto, solo os tenéis que saltar el paso de configuración de VirtualBox.

Nota
Obviamente es mejor tener el hidden service en una maquina virtual o un servidor aparte. NO recomiendo para nada tenerlo configurado en nuestro SO principal ya que en caso de algún leak (brecha), se pueden ver afectados los datos personales.

Configurando VirtualBox


Empezaremos por descargar Debian. La versión actual a fecha de hoy es Debian Wheezy 7.5. Con descargar una ISO Small CD basta.

Obviamente también nos hace falta VirtualBox → https://www.virtualbox.org/wiki/Downloads

Teniendo esto, nos vamos a VirtualBox y creamos una maquina nueva. De nombre la pondré "Tor Server", versión Linux Debian 32bit512Mb de RAM, imagen de disco Virtualbox (VDI) con tamaño dinámico pero limitado a 8Gb.

Una vez creada la maquina, antes de iniciarla vamos a configurar la. Seleccionamos la maquina, le damos a Settings (configuración), y:

- En la pestaña de Storage (almacenamiento) en el espacio vació de controlador IDE vamos a poner la ISO que acabamos de descargar. Es básicamente seleccionar "Vació", a la derecha darle al icono de disco, seleccionar disco virtual, buscar la ISO y listo.

- En la pestaña de Audio, vamos a deseleccionar la casilla "Enable Audio" (Habilitar audio). En recientes versiones de VirtualBox y Debian, al parecer hay un problema y la instalación se queda congelada si el audio esta habilitado.

- En la pestaña de Red, en Adaptador 1 vamos a seleccionar que es un Bridged Adapter (Adaptador Puente). Esto es importante ya que queremos conectarnos por SSH a nuestra maquina virtual para subir archivos y otras cosas.. y para ello es mejor que esta tenga su propia IP local.

Hecho esto, le damos a OK (Aceptar) y ya podemos iniciar la maquina virtual.

Instalando Debian


Una vez arrancada la maquina, le damos a Install (no el gráfico), esperamos que cargue y seguimos los pasos. Realmente es todo muy sencillo:


1 - Seleccionar el idioma

2 - Seleccionar el territorio (Other → resto de países/continentes).

3 - Seleccionar la configuración regional (fuentes)

4 - Seleccionar el mapa de teclado

5 - Seleccionar el host (puedes inventarte cualquier cosa..)

6 - Seleccionar el dominio (localhost)

7 - La contraseña root.. aseguraros de que sea segura.

8 - Nombre de usuario (el real*).. yo me llamare Ben Rodriguez ...

9 - Nick

10 - Contraseña de usuario.

11 - Zona horaria.

12 - Tabla de particiones. Puesto que lo hacemos para experimentar, Guiado - Usar el disco entero.

13 - Seleccionar disco..

14 - Todos los archivos en una partición (?), Finalizar, Guardar cambios.

15 - Seleccionar el servidor mas cercado... (sin proxy)

16 - No participar en la encuesta.

17 - De-seleccionar [Debian desktop enviroment] y [Print server]. (Usar espacio). Continuar.

18 - Instalar GRUB.

19 - Sacamos la unidad virtual del menú "dispositivos", damos a continuar y esperamos que cargue Debían.

Configurando Debian


Vamos a entrar con nuestro nick.

Debian GNU/Linux 7 debian tty1
debian login: usuario
Password:

El siguiente paso es añadir nuestro usuario al grupo sudo y instalar el propio sudo.. para poder instalar el software que vamos a necesitar.
Para ello vamos a tener que utilizar un momento el usuario root. Comando: su y meter contraseña.

usuario@debian:~$ su
Password:
root@debian:/home/usuario# apt-get install sudo
root@debian:/home/usuario# adduser usuario sudo

Una vez añadido, hay que desloguarse y volver a entrar para que tome en cuenta los efectos.

root@debian:/home/usuario# exit
usuario@debian:~$ logout

Y hecho esto, volvemos a loguear. Nos toca instalar Apache y PHP para ir montando el servidor..

usuario@debian:~$ sudo apt-get install apache2 php5

Ponemos la contraseña y le damos a Y.

También nos hará falta un servidor SSH para poder controlar el servidor desde nuestro SO y subir archivos.. etc.

usuario@debian:~$ sudo apt-get install openssh-server

Nos hará falta asegurarnos de que no se pueden meter con el usuario root y que tampoco nos jodan a base de bruteforce así que.. vamos a editar el archivo de configuración.

usuario@debian:~$ sudo nano /etc/ssh/sshd_config

Vamos a cambiar la linea PermitRootLogin yes por PermitRootLogin no
Guardamos (Ctrl + X , Y) y vamos a instalar denyhosts para evitar bruteforce.

usuario@debian:~$ sudo apt-get install denyhosts

Este servicio baneara las IP's que intenten hacer bruteforce en el archivo /etc/hosts Otro parecido es fail2ban que hace uso de iptables.

Bien, teniendo el servidor iniciado, nos hace falta darle permisos a la carpeta /var/www para que nuestro usuario pueda subir/modificar/tocar archivos sin pedir permisos a sudo. Al instalar apache se crea automáticamente un grupo de usuarios llamado www-data. Tenemos que formar parte de el así que..

usuario@debian:~$ sudo adduser usuario www-data

Vamos ademas a comprar las acciones de /var/www..

usuario@debian:~$ sudo chown usuario:www-data -R /var/www
usuario@debian:~$ sudo chmod 0755 -R /var/www
usuario@debian:~$ sudo chmod g+s -R /var/www

Bien, ahora vamos a configurar Apache para que solo acepte conexiones de 127.0.0.1. Así, si alguien intenta conectarse al puerto 80 de nuestra IP real no podrá ver el contenido.. por tanto sera visible solo desde localhost o desde TOR =)

Vamos a modificar el vhost de Apache.

usuario@debian:~$ sudo nano /etc/apache2/sites-enabled/000-default

Cambiamos por . Guardamos (Ctrl + X, Y), y tambien toca cambiar el ports.conf

usuario@debian:~$ sudo nano /etc/apache2/ports.conf

Cambiamos NameVirtualHost *:80 por NameVirtualHost 127.0.0.1:80 y Listen 80 por Listen 127.0.0.1:80. De nuevo guardamos y reiniciamos apche.

Y reiniciamos apache.

usuario@debian:~$ sudo service apache2 restart

Por ultimo en esta parte, vamos a instalar UFW. UFW es un cliente-firewall que nos permite de manera sencilla bloquear ciertos puertos, y dado que a nosotros nos interesa tener solo unos pocos puertos abiertos, mejor que mejor.

usuario@debian:~$ sudo apt-get install ufw
usuario@debian:~$ sudo ufw disable
usuario@debian:~$ sudo ufw reset
usuario@debian:~$ sudo ufw default deny incoming
usuario@debian:~$ sudo ufw default allow outgoing
usuario@debian:~$ sudo ufw allow 80
usuario@debian:~$ sudo ufw allow 9050
usuario@debian:~$ sudo ufw allow OpenSSH
usuario@debian:~$ sudo ufw allow ntp
usuario@debian:~$ sudo ufw enable


Instalar Tor


Bien, nos queda lo mas importante instalar TOR.

usuario@debian:~$ sudo apt-get install tor

Bien, una vez instalado, vamos a modificar lo para que actué de servidor.

usuario@debian:~$ sudo nano /etc/tor/torrc

Vamos un poco mas abajo de la linea:
############# This section is just for location-hidden services ###

Y quitamos la almohadilla (#) de las siguentes lineas.
HiddenServiceDir /var/lib/tor/hidden_service
HiddenServircePort 80 127.0.0.1:80

Guardamos (Ctrl + X, Y) y reiniciamos tor.
usuario@debian:~$ sudo service tor restart

Si todo ha ido bien, al escribir:
usuario@debian:~$ sudo cat /var/lib/tor/hidden_service/hostname

Nos saldrá.. el dominio .onion que nos ha sido asignado. En la carpeta /var/lib/tor/hidden_service hay dos archivos. El hostname que tiene el dominio asignado y el private_key que tiene el hash de dicho dominio. Si no queréis perder este dominio, os recomiendo que os hagáis una copia y la guardéis en algún lugar seguro xD.


Bien, si habéis hecho todo, y habéis apuntado la url del hidden service, ejecutando tor desde otro ordenador habitual y poniendo la url debería daros un resultado tal que así:



Conexión por SSH


En la mayoria de las distros GNU/Linux el cliente ssh viene instalado por defecto. De no ser asi, basta con leeros la wiki de la distro. Si estais en Windows, podeis utilizar Putty.

Para ver la IP de la maquina virtual, podemos utilizar
usuario@debian:~$ sudo ifconfig

En eth0, buscamos inet addr. Luego basta con conectarse a esa IP, aceptar que no es segura, poner nuestro usuario si hace falta, y nuestra contraseña. Desde aquí podeis hacer lo mismo que hemos estado haciendo hasta ahora.


Subir un archivo


Vamos a subir un archivo .php muy sencillo. Le dare de nombre phpinfo.php y contendra:
<?php phpinfo(); ?>

En una terminal de nuestra distro basta con:

scp /ruta/del/archivo/elarchivo usuario@IPlocalMAQUINA:/var/www/


Si estáis en PuTTy podéis leer esta explicación, pero es básicamente igual.

Y...


Bueno, esto es todo. Gracias por leer =)

Saludos

Comentarios

Entradas populares de este blog

Añadir Sublime Text 2 al menú contextual.