Solución de VPN basada en Raspberry Pi
Álvaro Núñez - Romero Casado Javier José Pecete García Alejandro Amorín Niño Juan Antonio Baeza Miralles
Índice Instalación del Sistema Operativo
3
Primera configuración e instalación de OpenVPN
4
Generación de claves y certificados
7
Configuración del cliente
13
Conexión con la VPN desde el móvil o PC
19
Posibles ataques
24
Implementación de funcionalidades de seguridad
25
Instalación
25
Configuración
26
Demostración
29
2
Instalación del Sistema Operativo Para empezar se instalará la distribución de Kali Linux para Raspberry Pi, es decir, una versión adaptada de Kali Linux para arquitectura ARM. La distribución se puede descargar en el sitio oficial: https://www.offensive-security.com/kali-linux-arm-images/, en dónde se encuentran las imágenes tanto para la Raspberry original como para la Raspberry 2/3, así como para muchos otros miniordenadores con arquitectura ARM. Para nuestro caso descargaremos la imagen para el modelo 2/3.
Para comenzar con la instalación, primero se tiene que descomprimir el archivo que se ha descargado para obtener el archivo de imagen (.img). Para ello usamos el comando xzcat en Linux: xzcat kali-2.1.2-rpi2.img.xz En Windows se puede utilizar el programa 7-zip para descomprimir este tipo de extensión. Ahora ya se puede “quemar” la imagen (.img) que se ha descomprimido en la microSD que llevará la Raspberry. Para ello se usa el comando dd (en Linux) con la ubicación dónde tenemos conectada la tarjeta microSD, en nuestro caso se emplea el comando: dd bs=4M if=kali-2.1.2-rpi2.img of=/dev/sdb
Para Windows se puede usar el programa Win32DiskImager. Este proceso puede llevar un largo período de tiempo (> 15 min). Una vez terminada la operación se puede introducir la microSD en la Raspberry y arrancar el sistema conectándola a corriente.
3
Primera configuración e instalación de OpenVPN Si se tiene un monitor, un teclado y un ratón se puede hacer uso de ello y manejar la Raspberry Pi como si fuera un ordenador normal, pero en nuestro caso, que no se dispone de estos elementos a mano, hacemos uso del protocolo SSH que viene por defecto instalado en la distribución de Kali Linux para ARM. Se emplea un analizador de redes para detectar en qué IP se encuentra la Raspberry y nos conectamos por SSH para configurarla: ssh
[email protected]
El usuario por defecto es “root” y la contraseña “toor”, por tanto se deberá cambiar cuanto antes la contraseña del superusuario. Para fortificar el sistema, es aconsejable crear un nuevo usuario no privilegiado con el que se inicie la sesión SSH y denegar el login como root directamente. Esto se puede establecer en la configuración de SSH. Para cambiar la contraseña del superusuario se ejecuta el comando: passwd
Para crear un nuevo usuario no privilegiado: useradd vpn En el comando de ejemplo se crea el usuario “vpn”. Se configura una IP estática privada editando el fichero /etc/network/interfaces, quedando de la siguiente forma:
4
De esta manera, si se reinicia la Raspberry Pi se podrá acceder siempre mediante SSH con la IP asignada, en el caso del ejemplo a la IP 192.168.1.90. Se deben realizar también configuraciones en el router para el correcto funcionamiento. Se puede fijar la IP para que se asigne siempre la misma a la Raspberry mediante la asignación estática por MAC como se ve en la figura fijándola en 192.168.1.160.
También se tiene que redireccionar el tráfico al puerto 1194 de la Raspberry ya que este será el puerto en el que funcione nuestro servicio VPN. Esto lo realizamos declarando una nueva regla en el Port Forwarding como sigue:
5
Por último, en los sistemas actuales domésticos, cuando se instala el router, este tiene una IP pública y genera una red de IPs privadas para todos los equipos conectados al mismo. Podemos mediante el DMZ que el router automáticamente asigne como receptor de las comunicaciones realizadas a esa IP pública la IP de nuestra red que deseamos, en este caso, la de nuestra Raspberry Pi. Esto se realiza como se muestra a continuación:
Se actualiza el sistema operativo para aplicar las últimas versiones de las aplicaciones, resolver vulnerabilidades y problemas conocidos. sudo apt-get update sudo apt-get upgrade Ahora se continua con la instalación del paquete de OpenVPN: sudo apt-get install openvpn Pide confirmación para instalar las dependencias que se deben aceptar para continuar pulsando “S”.
6
Generación de claves y certificados Se deben generar las claves RSA públicas y privadas. Para ejecutar la instrucción se tiene que ser superusuario: cp –r /usr/share/easy-rsa /etc/openvpn/easy-rsa Este comando copia todo el contenido del directorio /usr/share/easy-rsa en /etc/openvpn/ easy-rsa de forma recursiva. Se cambia de directorio, ahora al directorio dónde se han copiado las claves: cd /etc/openvpn/easy-rsa Y se edita el archivo vars: nano vars Hay que buscar la variable EASY_RSA y cambiarla por el directorio correcto, el directorio en el que hemos copiado las claves anteriormente: export EASY_RSA = “/etc/openvpn/easy-rsa”
Con esto ya se ha indicado el directorio dónde generar los ficheros de claves RSA. También se debe buscar la variable KEY_SIZE, que tiene un valor de 2048 y cambiar por: export KEY_SIZE = 1024 Para guardar y salir se pulsa Ctrl+X. Generamos los certificados CA y root CA. Para ello, estando en el directorio /etc/ openvpn/easy-rsa, se ejecutan los siguientes comandos: source ./vars 7
Este comando carga el archivo vars que se editó anteriormente. ./clean-all Con este comando se borran todas las claves que pudieran existir previamente. ./build-ca Por último se genera la entidad certificadora. Tras introducir el comando se mostrarán unos campos que se deben rellenar para completar la información.
Tras crear los certificados, se da un nombre al servidor para crear su certificado: ./bulid-key-server raspvpn Vuelven a salir unos campos para rellenar, dónde se tiene que prestar atención a los campos para poner el nombre que hemos asignado (raspvpn), el resto de campos dejarles en blanco, confirmación de la firma del certificado (“y”) y confirmar todo (“y”).
Con esto ya se tiene el certificado del servidor configurado. Ahora se genera la clave para el usuario con el nombre que se quiera, en el ejemplo el usuario se llamará “user”: ./build-key-pass phone De la misma manera que cuando se generan las claves del servidor, saldrán campos que se deben rellenar. En este caso es importante una contraseña de usuario que se 8
deberá recordar, el campo (contraseña de reto) dejarlo en blanco, confirmación de la firma del certificado (“y”) y confirmar todo (“y”).
Se cambia al directorio keys y se ejecuta: cd keys openssl rsa –in phone.key –des –out phone.3des.key De esta manera se está indicando que se quiere utilizar el algoritmo de encriptación des3. Tras ejecutar el comando pedirá la contraseña que se puso al generar el certificado del usuario. Se tiene que introducir las veces que lo solicite. Se vuelve al directorio anterior y se va a generar el intercambio de claves Diffie-Hellman, el cual permite que dos entidades, sin conocimiento previo una de la otra, intercambien las claves a través de un servidor público. cd /etc/openvpn/easy-rsa/ ./build-dh Este proceso lleva un rato, ya que utiliza números aleatorios y busca determinadas relaciones. Para una generación de 1024 bits se requieren entre 1 y 10 minutos aproximadamente.
Se va a proteger el servidor VPN contra posibles ataques de denegación de servicios (DOS): openvpn --genkey --secret keys/ta.key Se crea un fichero de configuración con las rutas de las certificaciones, así como las IPs y puertos debe utilizar, entre otras cosas: nano /etc/openvpn/server.conf El fichero está en blanco, por lo que se deberá escribir lo siguiente con la configuración adecuada:
9
# local 192.168.1.90 # SWAP THIS NUMBER WITH YOUR RASPBERRY PI IP ADDRESS dev tun proto udp #Some people prefer to use tcp. Don't change it if you don't know. port 1194 ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/raspvpn.crt # SWAP WITH YOUR CRT NAME key /etc/openvpn/easy-rsa/keys/raspvpn.key # SWAP WITH YOUR KEY NAME dh /etc/openvpn/easy-rsa/keys/dh1024.pem # If you changed to 2048, change that here! server 10.8.0.0 255.255.255.0 # server and remote endpoints ifconfig 10.8.0.1 10.8.0.2 # Add route to Client routing table for the OpenVPN Server push "route 10.8.0.1 255.255.255.255" # Add route to Client routing table for the OpenVPN Subnet push "route 10.8.0.0 255.255.255.0" # your local subnet push "route 192.168.1.90 255.255.255.0" # SWAP THE IP NUMBER WITH YOUR RASPBERRY PI IP ADDRESS # Set primary domain name server address to the SOHO Router # If your router does not do DNS, you can use Google DNS 8.8.8.8 push "dhcp-option DNS 8.8.8.8" # This should already match your router address and not need to be changed. # Override the Client default gateway by using 0.0.0.0/1 and # 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of # overriding but not wiping out the original default gateway. push "redirect-gateway def1" client-to-client duplicate-cn keepalive 10 120 tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 cipher AES-128-CBC comp-lzo user nobody group nogroup persist-key persist-tun status /var/log/openvpn-status.log 20 log /var/log/openvpn.log verb 1 Las líneas comentadas en mayúsculas son las que se deben modificar con la configuración correcta de la Raspberry Pi. La Raspberry por defecto no redirige el tráfico de Internet, por tanto hay que editar un parámetro para permite que el tráfico se redirija. Para ello editamos el archivo: nano /etc/sysctl.conf 10
Descomentamos la línea que pone “Uncomment the next line to enable packet forwarding for IPv4” Para aplicar los cambios se ejecuta el comando: sysctl –p El comando sysctl configura los parámetros del kernel en tiempo de ejecución, mientras que el modificador –p indica que se cargue el fichero con los cambios que acabamos de realizar. Ya se tiene un servidor en funcionamiento y con acceso a Internet, pero no se puede utilizar todavía porque hay un firewall integrado que puede bloquear las conexiones entrantes. Para arreglar esto, se crea una regla para el firewall que se cargará al inciar la Raspberry, ya que las reglas del firewall se borran al reiniciar el equipo. Creamos el archivo con: nano /etc/firewall-openvpn-rules.sh
El script está en blanco, por lo que se rellena con la configuración correcta: #!/bin/sh iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT -to-source 192.168.1.90 La IP se corresponde con la IP estática de nuestra Raspberry asignada al principio y eth0 se corresponde con nuestra tarjeta de red. En el caso de estar conectado a través de red inalámbrica la tarjeta de red tendrá la forma wlanX. Como los ficheros que se crean no son ejecutables por defecto se deben asignar los permisos correctos al archivo /etc/firewall-openvpn-rules.sh: chmod 700 /etc/firewall-openvpn-rules.sh 11
chown root /etc/firewall-openvpn-rules.sh Se ha creado el script con las reglas para el firewall pero todavía no se ha establecido para que inicie con cada arranque. Para ello se modifica el archivo interfaces: nano /etc/network/interfaces Se añade: pre-up /etc/firewall-openvpn-rules.sh Después de la linea: iface eth0 inet static
Ahora ya se pueden guardar los cambios y salir con Ctrl+X y reiniciar el sistema: sudo reboot Hasta aquí ya está listo el servidor. Ahora se debe seguir con la configuración del cliente.
12
Configuración del cliente Anteriormente se ha creado una clave diferente para cada dispositivo que se va a conectar a la VPN creada con la Raspberry. Ahora hay que generar el fichero de configuración de cada cliente. Para ello se hará uso de un script desarrollado por Eric Jodoin, del SANS Institute, que se encarga de generar los ficheros correspondientes para cada cliente según la configuración de la VPN. Para empezar se crea un archivo en blanco desde el que se leerán las configuraciones por defecto: nano /etc/openvpn/easy-rsa/keys/Default.txt Se rellenará con lo siguiente: client dev tun proto udp remote 1194 resolv-retry infinite nobind persist-key persist-tun mute-replay-warnings ns-cert-type server key-direction 1 cipher AES-128-CBC comp-lzo verb 1 mute 20 Hay que fijarse en donde pone , ya que aquí va la dirección IP pública de la Raspberry. De esta manera, si no se tiene una IP pública estática, se debe usar un sistema de DNS dinámico en el que se permite configurar un nombre de dominio y asignarlo a la IP pública, permitiendo acceder a nuestra IP pública mediante el nombre de dominio y aunque la IP pública cambie. Se ha elegido el servicio No-IP (https://www.noip.com) ya que es gratuito y permite elegir el nombre del dominio. Primero hay que registrarse en No-IP y crear un nuevo nombre de dominio. Para ello seleccionamos la opción "Hosts / Redirects" y pulsamos en "Add A Host".
13
Introducimos los datos de nuestra Raspberry en los campos los datos de la IP pública y el dominio que queremos crear.
14
Después se descarga el DUC (Dynamic Update Client) y se configura. Para ello se siguen los siguientes comandos: cd /usr/local/src/ wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz tar xf noip-duc-linux.tar.gz cd noip-2.1.9-1/ make install Si falla el comando make, probablemente no esté instalado el compilador gcc, en ese caso: sudo apt-get install build-essential Así se instalará la colección de paquetes para compilar programas en C/C++ en Linux. Al realizar la instalación del DUC se solicitarán los datos de la cuenta No-IP, como el usuario y la contraseña. Opcionalmente, una vez instalado, se pueden borrar los archivos descargados del DUC: rm noip-duc-linux.tar.gz rm -r noip-2.1.9-1/ Para que el servicio No-IP se inicie con la Raspberry en caso de reinicio: sudo nano /etc/init.d/noip2 El contenido del archivo será: #! /bin/bash ### BEGIN INIT INFO ### END INIT INFO sudo /usr/local/bin/noip2 Se asignan permisos de ejecución con: sudo chmod +x /etc/init.d/noip2 Y finalmente: sudo update-rc.d noip2 defaults Ahora ya se puede crear el script de Eric Jodoin: nano /etc/openvpn/easy-rsa/keys/MakeOVPN.sh El script automatizará la creación del fichero de configuración del programa cliente y se encuentra aquí: https://gist.github.com/laurenorsini/10013430 Queda de la siguiente manera: 15
#!/bin/bash # Default Variable Declarations DEFAULT="Default.txt" FILEEXT=".ovpn" CRT=".crt" KEY=".3des.key" CA="ca.crt" TA="ta.key" #Ask for a Client name echo "Please enter an existing Client Name:" read NAME #1st if [ echo exit fi echo
Verify that client’s Public Key Exists ! -f $NAME$CRT ]; then "[ERROR]: Client Public Key Certificate not found: $NAME$CRT" "Client’s cert found: $NAME$CR"
#Then, verify that there is a private key for that client if [ ! -f $NAME$KEY ]; then echo "[ERROR]: Client 3des Private Key not found: $NAME$KEY" exit fi echo "Client’s Private Key found: $NAME$KEY" #Confirm the CA public key exists if [ ! -f $CA ]; then echo "[ERROR]: CA Public Key not found: $CA" exit fi echo "CA public Key found: $CA" #Confirm the tls-auth ta key file exists if [ ! -f $TA ]; then echo "[ERROR]: tls-auth Key not found: $TA" exit fi echo "tls-auth Private Key found: $TA" #Ready to make a new .opvn file - Start by populating with the default file cat $DEFAULT > $NAME$FILEEXT #Now, append the CA Public Cert echo "" >> $NAME$FILEEXT cat $CA >> $NAME$FILEEXT 16
echo "" >> $NAME$FILEEXT #Next append the client Public Cert echo "" >> $NAME$FILEEXT cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/ p' >> $NAME$FILEEXT echo "" >> $NAME$FILEEXT #Then, append the client Private Key echo "" >> $NAME$FILEEXT cat $NAME$KEY >> $NAME$FILEEXT echo "" >> $NAME$FILEEXT #Finally, append the TA Private Key echo "" >> $NAME$FILEEXT cat $TA >> $NAME$FILEEXT echo "" >> $NAME$FILEEXT echo "Done! $NAME$FILEEXT Successfully Created." #Script written by Eric Jodoin \ No newline at end of file Es necesario dar permisos de ejecución al script, ya que por defecto no los tiene: cd /etc/openvpn/easy-rsa/keys/ chmod 700 MakeOVPN.sh Finalmente se ejecuta el script con: ./MakeOVPN.sh Cuando se ejecuta el script se piden los nombres de los certificados que se crearon anteriormente. Si todo va bien mostrará el mensaje: Done! Client1.ovpn Successfully Created. Se debe repetir este paso para todos los clientes creados. La última cosa que se debe hacer es conectarse a la Raspberry para descargarnos los ficheros generados con extensión .ovpn. Para ello es necesario usar el protocolo SCP (Secure Copy Protocol). En Windows se puede usar el programa WinSCP y para Mac Fugu. Si no es posible conectarse al directorio de OpenVPN es posible que sea por los permisos, por lo que es necesario cambiarlos momentáneamente para poder acceder: chmod 777 -R /etc/openvpn Una vez copiados los archivos se vuelven a poner los permisos anteriores para que solo el propietario tenga los permisos y no pueda acceder cualquiera: 17
chmod 600 –R /etc/openvpn Poner los archivos descargados en el programa cliente y ya está todo listo para conectarse a la VPN.
18
Conexión con la VPN desde el móvil o PC Una vez tenemos la VPN configurada podemos crear múltiples usuarios e instalar clientes en distintos equipos mediante las aplicaciones propias de cada sistema operativo. Lo primero que debemos hacer es repetir algunos de los pasos mostrados anteriormente para crear el nuevo usuario. Para ello navegamos a /etc/openvpn/easy-rsa y creamos el usuario mediante el script build-key-pass
Si hemos realizado algún reinicio previo deberemos realizar previamente un "source ./ vars". Recordemos que se debe realizar como usuario con privilegios root. Ahora nos moveremos al directorio keys y generaremos el fichero 3des y posteriormente el .ovpn que se usará en el programa cliente. A continuación debemos crear un fichero .ovpn para cada uno de los perfiles que vamos a configurar.
19
Debemos trasladar cada uno de los archivos de perfil al equipo que nos disponemos a configurar. En este caso vamos a realizar 3 instalaciones distintas:
- Macbook Pro Mid 2010 OS X El Capitan 10.11.4: para esta distribución utilizaremos el software Tunnelbrick. Primero lo instalaremos y una vez instalado pulsamos doble click en el archivo de perfil ovpn, seleccionamos quien puede usar el certificado e introducimos la clave del usuario del sistema para instalar el perfil.
20
A continuación pulsamos en el acceso directo de tunnelbrick y seleccionamos el perfil recién instalado. La primera vez que accedamos deberemos poner la clave configurada en el archivo al crearlo en la raspberry.
Una vez realizados estos pasos nuestra conexión ya está funcionando correctamente.
- Ordenador ASUS Windows 7: utilizaremos el software OPENVPN Connect. Para ello lo instalaremos e ubicaremos el archivo de perfil ovpn en la carpeta "C:/Archivos de Programa/Openvpn/config". Seleccionaremos en el acceso directo conectar al perfil recién instalado e introducimos la contraseña cuando la solicite.
Se realizará la autenticación y la conexión quedará establecida: - iPhone 5S IOS 9.3.1: Realizaremos la conexión con el software OpenVPN. Una vez instalado descargamos el fichero de perfil ovpn en el terminal y lo abrimos con la aplicación. Introducimos la contraseña y se realiza la conexión con el servicio VPN.
21
Para probar la conexión a la VPN usaremos nuestro teléfono móvil IOS con el software OpenVPN Connect. OpenVPN Connect es la aplicación oficial de OpenVPN, desarrollada por OpenVPN Technologies, que nos permitirá utilizar todas las prestaciones del programa de código abierto original en terminales IOS. Esta herramienta nos permitirá gestionar cualquier red privada virtual desde nuestro terminal IOS, de la misma forma que lo podríamos hacer desde el ordenador con el programa de sobremesa. Lo único que necesitaremos hacer será importar el perfil .ovpn a través de la tarjeta SD, OpenVPN Access Server, un túnel privado o un enlace del navegador. Existe un servicio Web alojado en https://www.whatismyip.com/es/ que permite mostrar cual es la IP pública de nuestra red por la cual salimos a la red por nuestro proveedor de servicios. Probaremos el acceso a la VPN desde el trabajo. En nuestro caso, si comprobamos nuestra IP sin estar conectados a la VPN tenemos que:
22
Podemos observar que la IP por la que salimos es la del router al cual estamos conectado por WIFI. Para este caso accederemos a la VPN desde nuestro terminal con conexión 4G como red externa.
La IP es la de la red pública en la cual tenemos nuestra Raspberry con la VPN configurada. Estamos recibiendo y enviando paquetes desde nuestra IP, en cambio el paquete origen y destino es el de nuestra VPN, y salimos a internet por dicha red. Como podemos observar, ya tenemos configurada nuestra VPN en nuestro terminal y actualmente estamos conectados a ella. Una vez que accedemos a ella, fisicamente no estaremos en ella, pero lógicamente sí, permitiéndonos así una conexión segura desde donde esté ubicada la VPN. Para la conexión se usará el concepto de tunneling, consiste en encapsular un protocolo de red sobre otro (protocolo de red encapsulador) creando un túnel dentro de una red de computadoras. Por lo tanto esto supone importantes ventajas de seguridad que son implementadas por la red virtual:
• La Confidencialidad de los datos, debido a que van cifrados mediante protocolos de encriptación en el túnel creado para la conexión con la VPN.
• Integridad de los datos, Por medio de una VPN podemos crear túneles en los cuales pasan la información encriptada entre los clientes por lo cual existe una integridad segura de los datos.
• La Autenticación y Autorización, garantiza que los datos están siendo trasmitidos o recibidos desde dispositivos remotos autorizados. Solo se permiten conectarse a los 23
equipos o dispositivos móviles autorizados, por medio de certificados de autenticación, llaves encriptadas y usuarios/contraseñas.
• Velocidad: Cuando enviamos o solicitamos información por medio de una red VPN es comprimida y descomprimida entre los 2 clientes de la VPN, esto hace que la VPN funcione mas veloz en la transferencia de información.
• Costos: Un VPN nos ahorra en costo de los equipos y otros servicios que se estén ofreciendo dentro de la red local.
• Nos permite conectar redes físicamente separadas sin necesidad de usar una red dedicada, si no que a través de internet.
• Nos permite asegurar la conexión entre usuarios móviles y nuestra red fija. • Este tipo de soluciones permite simplificar la administrador de la conexión de servidores y aplicaciones entre diferentes dominios.
• Una VPN puede crecer para adaptarse a más usuarios y diferentes lugares mucho más fácil que las líneas dedicadas. De hecho, la escalabilidad es otra de las grandes ventajas de una VPN sobre las líneas rent
Posibles ataques Si un atacante quisiera espiar nuestro tráfico, debido a la implementación de la VPN estamos acotando los vectores de ataque de este. Ya que al estar usando técnicas de tunneling para acceder a la VPN, todo el tráfico va cifrado hasta que llega al router de la VPN, el cual sería el encargado de desempaquetar la PDU (Packet Data Unit) y redirigir el tráfico al servicio que necesitamos. Por lo tanto, si un atacante usara técnicas de Man in the Middle, tendría que hacerlo en el router el cual está en la VPN, ya que es el único punto crítico de la conexión punto a punto. Para solventar esto, podríamos implementar un IDS en nuestro servidor que detectara peticiones ARP u otro tipo de poisoning en nuestro servidor.
24
Implementación de funcionalidades de seguridad Se han incluido dos funcionalidades aparentemente diferentes pero bastante relacionadas entre ellas debido a la implementación de la solución elegida. La solución elegida ha sido añadir Latch al servicio de VPN y al servicio SSH, para así, añadir una capa extra de seguridad en la Raspberry. Latch es una app móvil para proteger tus cuentas y servicios online cuando no estés conectado 100% gratuita. Además, te da el control para “apagar” tus servicios online cuando no estás conectado.
Instalación Para poder integrar Latch se deberá crear una cuenta en https://latch.elevenpaths.com/ Una vez creada, podremos descargar el paquete necesario del repositorio para integrar esta funcionalidad en la raspberry
• Descarga de Latch para Unix
• Extraer Latch
• Instalar Latch
25
Configuración Cuenta de Latch Crearemos una nueva aplicación llamada Raspberry Pi sobre la cual crearemos dos Operaciones, una para el servicio SSH y otra para el servicio de la VPN. Al crear la aplicación nos proporcionará dos parámetros que serán los que tendremos que incluir en la configuración de Latch en la Raspberry • ID de aplicación • Clave secreta Las operaciones nos crearán también una clave secreta.
• Creación de una aplicación nueva en Latch
Deberemos apuntar estos datos para luego ponerlos en los archivos de configuración de la raspberry. * Se han omitido los datos de acceso generados
Raspberry Al integrar Latch en la Raspberry, hay que parearlo con un usuario del sistema, que será sobre el que figuren los servicios protegidos, es decir, tanto para el SSH como para el servicio OpenVPN, deberá existir un usuario de sistema. Para emparejarlo, se pide el código de emparejamiento desde la aplicación móvil y se ejecuta el comando: latch -p TOKEN_GENERADO_POR_LATCH
• Configuración de Latch
26
En los campos app_id, secret_key, sshd-login y openvpn se deberán poner los datos que nos proporcionaba la aplicación en el apartado anterior.
• Servicios de la Raspberry Pi Para la implementación de Latch, se hace uso de los módulos PAM (Pluggable Authentication Modules) de Unix. Los PAM de Unix, en arquitectura ARM, se encuentran en /lib/arm-linux-*/ security/ Se deberá mover el PAM de Latch a la carpeta de PAM: mv /usr/lib/pam_latch.so /lib/arm-linux-*/security/
- Servicio SSH Está disponible en la ruta /etc/pam.d/sshd Para hacer uso de Latch, se deberá añadir la siguiente línea en el fichero sshd auth required pam_latch.so config=/etc/latch/latch.conf accounts=/ etc/latch/latch.accounts operation=sshd-login otp=no En el campo operation aparecerá el alias que le hayamos puesto en el archivo de configuración latch.conf 27
- Servicio OpenVPN El PAM de autenticación en OpenVPN está en /usr/lib/openvpn/openvpn-pluginauth-pam.so Se deberá crear un servicio en la carpeta /etc/pam.d/ bajo el nombre openvpn y en él. se deberá incluir la siguiente línea auth required pam_latch.so config=/etc/latch/latch.conf accounts=/ etc/latch/latch.accounts operation=openvpn otp=no En el campo operation aparecerá el alias que le hayamos puesto en el archivo de configuración latch.conf
- Servidor de VPN Debido a la restricción de este factor de autenticación, se deberá añadir la siguiente linea en el archivo de configuración de nuestro servidor VPN: plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
- Cliente de VPN Se deberá añadir la siguiente ruta en el fichero de configuración .ovpn auth-user-pass Se deberán reiniciar los servicios para que todo funcione correctamente.
28
Demostración La demostración consta de dos partes, la primera tiene que ver con la cuenta de Latch en la página de Telefónica, y la segunda, con la aplicación móvil. Cuenta de Latch Tendremos un panel de control, donde podremos ver las estadísticas relativas a nuestras aplicaciones pareadas con Latch, sincronizar nuevos dispositivos, etc.
• Estadísticas para nuestra cuenta de Latch
29
APLICACIÓN
• Pantalla inicial, con todos los servicios de la Raspberry Pi bloqueados
30
• Acceso permitido a SSH, bloqueado a VPN y notificado al usuario en caso de acceso
31
• Acceso permitido a VPN, bloqueado a SSH y notificado a usuario en caso de acceso
32
• Conexión en cliente OpenVPN con Latch configurado: ahora ha de ser usuario del sistema, poner su clave del certificado y tener acceso permitido en Latch
33