Esta nueva entrada del blog es relativa al grupo de publicaciones que pretenden demostrar que 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.
Una VPN (Virtual Private Network) es una tecnología de red que permite extender de forma segura una red LAN sobre una red pública (Internet), es decir, podemos conectarnos a la red local LAN de nuestra casa desde el exterior y a través de Internet, de la misma forma que si estuviésemos dentro de nuestra casa. Como se muestra en la siguiente imagen, gracias a esta tecnología se crea un tunel seguro entre el cliente VPN (Smartphone, Ordenador, etc.) y el servidor VPN para que toda la comunicación que existe sea segura.
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.
En mi caso quiero que el servidor VPN funcione con el protocolo UPD y el puerto 1194. Por lo tanto, tal y como se puede ver en la captura de pantalla, seleccionamos el protocolo UDP y escribimos el puerto de nuestro servidor OpenVPN (1194) en los puertos internos y externos.
Pasos:
- Instalamos Raspbian
- Si ya lo tenemos instalado entonces actualizamos nuestra Raspberry Pi
- Para tener nuestro VPN vamos a utilizar PiVPN, que se instala con el siguiente comando:
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 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):
-
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, 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, 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, seleccionamos Google:
-
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:
pivpn add
Notas adicionales:
- Todos los comandos de PiVPN:
::: Control all PiVPN specific functions! ::: ::: Usage: pivpn [option] ::: ::: Options: ::: -a, add [nopass] Create a client ovpn profile, optional nopass ::: -c, clients List any connected clients to the server ::: -d, debug Start a debugging session if having trouble ::: -l, list List all valid and revoked certificates ::: -r, revoke Revoke a client ovpn profile ::: -h, help Show this help dialog ::: -u, uninstall Uninstall PiVPN from your system!
-
Software en equipos o smartphones:
-
Windows: https://openvpn.net/index.php/open-source/downloads.html
-
Android: https://play.google.com/store/apps/details?id=net.openvpn.openvpn
-
iOS: https://itunes.apple.com/es/app/openvpn-connect/id590379981?mt=8