una Raspberry Pi se puede utilizar como una herramienta de seguridad. En ella vamos a crear un servidor VPN en nuestra Raspberry Pi, pero antes de nada vamos a explicar que es una VPN.
QUÉ ES UNA VPN
Antes de entrar en mayores vicisitudes, debemos comentar que VPN responde a las siglas Virtual Private Network, una denominación
que ya a priori nos permite hacernos una pequeña idea de qué se trata: una privada virtual capaz de conectar varios dispositivos como si se encontrasen físicamente en el mismo lugar, emulando las conexiones de redes locales. Virtual, porque conecta dos redes físicas; y privada, porque solo los equipos que forman parte de una red local de uno de los lados de la VPN pueden acceder.
Tanto el cliente VPN como el servidor VPN podrían ser routers con el objetivo de interconectar 2 redes de comunicaciones, pero en el caso que nos ocupa nos vamos a centrar en el esquema anterior.
Las principales ventajas que ofrece esta tecnología son las siguientes:
- Permite interconectar redes geográficamente separadas sin necesidad de una línea dedicada.
- Permite acceder a los recursos de la red de destino: impresoras, discos en red, carpetas compartidas, intranets, etc.
- Asegura que la información intercambiada entre ambas redes es confidencial.
- Permite la navegación segura a través de Internet aunque la red origen sea insegura, ya que todo el tráfico estará cifrado.
- Permiten anonimizar direcciones origen, ya que va todo encaminado por la VPN y el origen de nuestras peticiones a diferentes servidores de Internet sería la red a la que nos conectamos donde está el servidor VPN.
Todas las ventajas son importantes, pero en este caso concreto nos vamos a centrar en la parte de navegación segura a través de Internet. Esto es muy importante, ya que a lo largo de la ciudad existen:
- Redes abiertas.
- Redes con un cifrado inseguro como WEP.
- Redes vulnerables al tener configurado WPS.
- Redes con un punto de acceso falso (fake AP).
Si navegáramos por estas redes sin una VPN toda la información podría ser obtenida por un atacante y descubrir cuáles son nuestras contraseñas, por qué paginas navegamos, cuáles son nuestros gustos de navegación o qué aplicaciones móviles utilizamos.
Por otra parte, los protocolos que se pueden utilizar para montar una VPN son:
- PPTP (Point to Point Tunneling Protocol): Es un protocolo de capa 2 para crear conexiones VPN. Fué desarrollado en 1999 por un grupo de empresas entre las que se encontraba Microsoft. Este protocolo encapsula y encripta tráfico PPP. Actualmente no se recomienda su utilización, ya que han sido encontradas algunas vulnerabilidades relacionadas con la implementación de los algoritmos criptográficos utilizados y con la longitud máxima del tamaño de clave (128 bits).
- IPSec/L2TP (Layer 2 Tunneling Protocol): Por un lado, L2TP se encarga de establecer un tunel entre el origen y el destino encapsulando una trama L2TP dentro de un datagrama UDP y que posteriormente irá encapsulado en un paquete IP. L2TP no proporciona por sí mismo ningún mecanismo de seguridad y utiliza IPSec para ello. Por otro lado, IPSec es un conjunto de protocolos utilizados para asegurar las comunicaciones en el nivel IP de la pila de protocolos TCP/IP.
- SSTP (Secure Software Tunneling Protocol): Este protocolo encapsula tráfico PPP sobre una conexión SSL (actualmente SSL v3), por tanto, tiene la ventaja de poder atravesar firewalls con mayor facilidad. Fue introducido por Microsoft con la aparición del Windows Vista, pero actualmente tiene soporte para distintos sistemas operativos.
- IKEv2: Es un tunel VPN basado en IPSec, el cual fue desarrollado por Microsoft y Cisco. No es tan extendido como IPSec/L2TP, pero es considerado tan bueno o incluso superior que IPSec/L2TP en términos de seguridad, rendimiento y estabilidad.
- OpenVPN: Es una solución de software libre con licencia GNU (creada por Jame Yonan) que es capaz de crear VPNs, utilizando SSL/TLS para el intercambio de claves. Además, es capaz de atravesar NATs y firewalls. La librería criptográfica que utiliza este software es OpenSSL. Permite seleccionar entre 2 opciones de funcionamiento: TAP que es una VPN de capa 2 (la cual, encapsula tramas Ethernet 802.3), y TUN que es una VPN de capa 3 (que encapsula paquetes IP). Esta es la opción que se va a utilizar para configurar una VPN casera en una raspberry pi.
Para configurar nuestro servidor VPN vamos a utilizar un proyecto llamado PiVPN, el cual permite configurar OpenVPN de manera sencilla en una raspberry.
será necesario actualizar nuestro sistema operativo utilizando los siguientes comandos:
- apt-get update
- apt-get dist-upgrade
Se deberá cambiar el password con el comando passwd, porque, como todos sabéis, es un gran agujero de seguridad dejar el password por defecto del sistema operativo instalado.
Seguidamente, utilizaremos el siguiente comando para comenzar la instalación:
- curl -L https://install.pivpn.io | bash
Primero, el programa comprueba que el sistema operativo esté actualizado, pero como en nuestro caso estará actualizado, seguirá la instalación:
En este punto nos informa que la aplicación transformará nuestra raspberry en un servidor OpenVPN:
Además, nos indica que nuestra IP debe ser estática, lo cual es normal para que la dirección del servidor OpenVPN sea siempre la misma:
En este momento, nos pide seleccionar una interfaz de red que será la que proporcione Internet:
Y se asigna la IP que tiene la interfaz de red anterior como IP estática:
Entonces, la instalación advierte que es posible que el router asigne esta IP a otro dispositivo y haya conflicto. En el caso de que haya problemas, puedes realizar la asignación de IPs manualmente:
En este momento la instalación indica que será necesario seleccionar un usuario local. Por temas de seguridad, lo más recomendable es crear un usuario nuevo distinto del administrador.
En nuestro caso, para realizar la prueba de concepto (PoC) utilizaremos el usuario que viene por defecto, aunque previamente hemos cambiado la contraseña del mismo:
En este punto, nos informa de que sería recomendable habilitar las actualizaciones no-atendidas manualmente, ya que el servidor estará expuesto a Internet:
Como es lógica la recomendación que nos da la instalación, habilitamos las actualizaciones no-atendidas:
Ahora nos indica si el protocolo que queremos utilizar es TCP o UDP. Cada protocolo tiene sus ventajas y sus desventajas. En nuestro caso, hemos utilizado TCP porque asegura la entrega de paquetes y puede llegar a ser más recomendable para navegar por Internet que es lo que pretendemos. Si el objetivo fuese mejorar la velocidad, intercambiado vídeo, audio o ficheros pesados, lo más recomendable sería UDP:
Seguidamente, tenemos que seleccionar un puerto donde se pondrá a la escucha el servidor OpenVPN. El puerto por defecto es el 443, pero como queremos que esté algo oculto y no sea un puerto conocido, seleccionaremos otro puerto (en nuestro caso 44344), pero podemos poner otro distinto:
Nos pide que confirmemos el puerto seleccionado para que no haya ningún error:
En este punto, la instalación nos solicita seleccionar un tamaño de clave y seleccionamos 2048-bits:
Seguidamente, la instalación nos indica que va a generar las claves necesarias:
Y a continuación inicia la creación de las claves, el cual, es un proceso que tarda un rato:
Cuando acaba de realizar la generación de claves, el programa pregunta la forma de acceder al servidor de VPN. En nuestro caso para la Prueba de Concepto (PoC), seleccionaremos la IP pública que nos proporciona nuestro proveedor de Internet (ISP), aunque la forma más correcta de hacerlo es utilizar un servicio como No-IP para que aunque cambie la IP nuestro proveedor de Internet (ISP), no se vea afectado el acceso:
Cuando acaba de realizar la generación de claves, el programa pregunta la forma de acceder al servidor de VPN. En nuestro caso para la Prueba de Concepto (PoC), seleccionaremos la IP pública que nos proporciona nuestro proveedor de Internet (ISP), aunque la forma más correcta de hacerlo es utilizar un servicio como No-IP para que aunque cambie la IP nuestro proveedor de Internet (ISP), no se vea afectado el acceso:
Seguidamente, seleccionamos el servidor DNS que utilizaremos para conectarnos a Internet. En este caso para la Prueba de Concepto (PoC) hemos seleccionado Google:
En la siguiente imagen se muestra cómo seleccionar un DNS propio.
Además, será necesario modificar el fichero /etc/dnsmasq.conf y añadir la siguiente línea para permitir la resolución DNS a la interfaz VPN:
listen-address=127.0.0.1, 192.168.1.2, 10.8.0.1
La primera IP es localhost, la segunda IP corresponde a la IP local donde está instalada la Pi-Hole (que puede ser la misma donde está instalado este mismo proyecto), y la tercera IP corresponde a la IP de la interfaz VPN en la parte del servidor.
De esta forma, conseguimos el filtrado de publicidad y páginas fraudulentas a la hora de navegar, lo cual, en este proyecto concreto que estamos montando puede ser muy recomendable.
A continuación muestra la forma de crear usuarios, cómo se accede a la ayuda y dónde se almacenan los logs generados:
El último mensaje de instalación pide reiniciar el sistema operativo:
A continuación, será necesario crear, al menos, un cliente para que se conecte al servidor. En la siguiente imagen se muestra un ejemplo de creación de un cliente con el nombre client:
Tras insertar el comando anterior en un terminal, pedirá el nombre del usuario y la contraseña para completar la creación del usuario. Además, paralelamente se creará un fichero con la extensión ovpn (en nuestro caso, client.ovpn), el cual se encuentra en la carpeta /home/pi que es el usuario del sistema seleccionado previamente. Éste es el fichero que deberemos cargar en el cliente OpenVPN para conectarnos a nuestro servidor.
Además, en el NAT de nuestro router casero deberemos añadir una regla para que todo el tráfico que nos llegue al puerto 44344 nos lo dirija al mismo puerto, pero de la ip interna configurada previamente (192.168.1.2).
Por último, ya podemos probar que el servidor OpenVPN está correctamente configurado, utilizando un cliente OpenVPN.
Conexión de cliente OpenVPN en Windows
En Windows será necesario instalar la aplicación openvpn-install-2.X.0.exe, de la siguiente página Web: https://openvpn.net/index.php/open-source/downloads.html
Se importa el fichero de configuración obtenido previamente en el paso 29:
Pulsamos en Connect:
Introducimos la contraseña previamente introducida en el paso 29:
Y ya estaríamos conectados a nuestro servidor VPN, y por tanto a nuestra red doméstica. Si verificamos la IP, podemos ver que es una de las IP de nuestra red doméstica, y que además podemos acceder a todos nuestros periféricos: impresoras, discos duros en red, etc.
Para probar que realmente tenemos otra IP que es capaz de conectarse a nuestra red local, podemos utilizar el comando ipconfig de Windows como vemos en la siguiente imagen:
Por último, para estar seguros que todo el tráfico está saliendo por la VPN y no por la otra interfaz de red, probamos el comando tracert que nos muestra los saltos hasta una dirección IP destino, y como se puede ver el tráfico va por la VPN:
Conexión de cliente OpenVPN en Linux
Si utilizamos un sistema operativo Linux también podemos conectar un cliente OpenVPN a nuestro servidor:
En la siguiente imagen se puede ver que se crea una nueva interfaz de red conectada a nuestra VPN:
Además, se puede eliminar la conexión VPN únicamente cerrando el terminal abierto con la conexión o mediante el comando killall para eliminar el proceso:
Conexión de cliente OpenVPN en Iphone
Por último, también se puede conectar un cliente de OpenVPN desde un terminal iphone al servidor configurado previamente. Primero será necesario descargar e instalar la aplicación OpenVPN desde Apple Store:
https://itunes.apple.com/es/app/openvpn-connect/id590379981?mt=8
Además, será necesario transferir mediante itunes el fichero ovpn generado anteriormente en el paso 29. La forma de incluir el fichero se realizará seleccionando la aplicación como se ve en la imagen inferior y utilizando el botón Añadir archivo…:
Finalmente, pinchamos en el botón conectar dentro de la app OpenVPN instalada en el paso 1 e introducimos la contraseña. De esta forma, ya estaremos conectados al servidor VPN y podremos navegar de forma segura con nuestro terminal iphone, sin preocuparnos de estar conectado a una red wifi insegura.