SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
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 root@192.168.1.41
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 <YOUR PUBLIC IP ADDRESS HERE> 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 <YOUR PUBLIC IP ADDRESS HERE>, 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 Verify that client’s Public Key Exists
if [ ! -f $NAME$CRT ]; then
echo "[ERROR]: Client Public Key Certificate not found: $NAME$CRT"
exit
fi
echo "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 "<ca>" >> $NAME$FILEEXT
cat $CA >> $NAME$FILEEXT
16
echo "</ca>" >> $NAME$FILEEXT
#Next append the client Public Cert
echo "<cert>" >> $NAME$FILEEXT
cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/
p' >> $NAME$FILEEXT
echo "</cert>" >> $NAME$FILEEXT
#Then, append the client Private Key
echo "<key>" >> $NAME$FILEEXT
cat $NAME$KEY >> $NAME$FILEEXT
echo "</key>" >> $NAME$FILEEXT
#Finally, append the TA Private Key
echo "<tls-auth>" >> $NAME$FILEEXT
cat $TA >> $NAME$FILEEXT
echo "</tls-auth>" >> $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-plugin-
auth-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

Contenu connexe

Tendances

Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2cyberleon95
 
Tecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemasTecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemasRafael Seg
 
IPTABLES y SQUID‏
IPTABLES y SQUID‏IPTABLES y SQUID‏
IPTABLES y SQUID‏ingpuma
 
Ethical hacking 02
Ethical hacking 02Ethical hacking 02
Ethical hacking 02Tensor
 
Tutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicasTutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicasUTP
 
Manual de squid creado por juanextk
Manual de squid creado por juanextkManual de squid creado por juanextk
Manual de squid creado por juanextkjuanextk
 
Ethical hacking 01
Ethical hacking 01Ethical hacking 01
Ethical hacking 01Tensor
 
Latch, el pestillo digital
Latch, el pestillo digitalLatch, el pestillo digital
Latch, el pestillo digitalbilaljbr
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIker Canarias
 
Servidor ftp windows server 2008
Servidor ftp  windows server 2008Servidor ftp  windows server 2008
Servidor ftp windows server 2008cyberleon95
 
Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...
Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...
Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...rameses
 
Servidor FTP en Centos 6
Servidor FTP en Centos 6Servidor FTP en Centos 6
Servidor FTP en Centos 6AngiePalacios03
 
Debian Jessie (8.0) + GLPI 9.0 + FusionInventory
Debian Jessie (8.0) + GLPI 9.0 + FusionInventoryDebian Jessie (8.0) + GLPI 9.0 + FusionInventory
Debian Jessie (8.0) + GLPI 9.0 + FusionInventoryobytuario
 
Manual de instalacion de servidor zentyal 3
Manual de instalacion de servidor zentyal 3Manual de instalacion de servidor zentyal 3
Manual de instalacion de servidor zentyal 3Marco Arias
 
Installacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En LinuxInstallacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En Linuxandres
 
Ssh
SshSsh
SshRafa
 
Configuracion de proxy squid en centos
Configuracion de proxy squid en centosConfiguracion de proxy squid en centos
Configuracion de proxy squid en centosmurilloyair
 

Tendances (20)

Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2Manual PXE - RHEL 6.2
Manual PXE - RHEL 6.2
 
Tecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemasTecnicas avanzadas de penetracion a sistemas
Tecnicas avanzadas de penetracion a sistemas
 
PROXY CENTOS 6.5
PROXY CENTOS 6.5PROXY CENTOS 6.5
PROXY CENTOS 6.5
 
Manual FTP, SSH y OpenMedia Vault
Manual FTP, SSH y OpenMedia VaultManual FTP, SSH y OpenMedia Vault
Manual FTP, SSH y OpenMedia Vault
 
IPTABLES y SQUID‏
IPTABLES y SQUID‏IPTABLES y SQUID‏
IPTABLES y SQUID‏
 
Ethical hacking 02
Ethical hacking 02Ethical hacking 02
Ethical hacking 02
 
Tutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicasTutorial linux centos configuraciones básicas
Tutorial linux centos configuraciones básicas
 
OpenVPN
OpenVPNOpenVPN
OpenVPN
 
Manual de squid creado por juanextk
Manual de squid creado por juanextkManual de squid creado por juanextk
Manual de squid creado por juanextk
 
Ethical hacking 01
Ethical hacking 01Ethical hacking 01
Ethical hacking 01
 
Latch, el pestillo digital
Latch, el pestillo digitalLatch, el pestillo digital
Latch, el pestillo digital
 
Introducción a Servidor HTTP Apache
Introducción a Servidor HTTP ApacheIntroducción a Servidor HTTP Apache
Introducción a Servidor HTTP Apache
 
Servidor ftp windows server 2008
Servidor ftp  windows server 2008Servidor ftp  windows server 2008
Servidor ftp windows server 2008
 
Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...
Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...
Montando un Servidor FreeNX en CentOS - Freenx-I - Instalación y Configuració...
 
Servidor FTP en Centos 6
Servidor FTP en Centos 6Servidor FTP en Centos 6
Servidor FTP en Centos 6
 
Debian Jessie (8.0) + GLPI 9.0 + FusionInventory
Debian Jessie (8.0) + GLPI 9.0 + FusionInventoryDebian Jessie (8.0) + GLPI 9.0 + FusionInventory
Debian Jessie (8.0) + GLPI 9.0 + FusionInventory
 
Manual de instalacion de servidor zentyal 3
Manual de instalacion de servidor zentyal 3Manual de instalacion de servidor zentyal 3
Manual de instalacion de servidor zentyal 3
 
Installacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En LinuxInstallacion De Una Base De Datos Mysql En Linux
Installacion De Una Base De Datos Mysql En Linux
 
Ssh
SshSsh
Ssh
 
Configuracion de proxy squid en centos
Configuracion de proxy squid en centosConfiguracion de proxy squid en centos
Configuracion de proxy squid en centos
 

Similaire à Solución VPN Raspberry Pi

188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...Agencia Aduanera Almeida
 
Servidor VPN en Linux - Bilal Jebari
Servidor VPN en Linux - Bilal JebariServidor VPN en Linux - Bilal Jebari
Servidor VPN en Linux - Bilal Jebaribilaljbr
 
Unidad III: Seguridad de las redes
Unidad III: Seguridad de las redesUnidad III: Seguridad de las redes
Unidad III: Seguridad de las redesJavierRamirez419
 
IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2
IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2
IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2camilaml
 
Lab 3 cifrado criptografia
Lab 3   cifrado criptografiaLab 3   cifrado criptografia
Lab 3 cifrado criptografiaJosé Moreno
 
Manual de instalacion servicios en red hat
Manual de instalacion servicios en red hatManual de instalacion servicios en red hat
Manual de instalacion servicios en red hatjcausil1
 
Trabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensivaTrabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensivaarbeycardona2
 
Vpn linux a linux
Vpn linux a linuxVpn linux a linux
Vpn linux a linuxxinoxino
 
SSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraSSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraJose Diaz Silva
 
Gestion de nubes de servidores
Gestion de nubes de servidoresGestion de nubes de servidores
Gestion de nubes de servidoresrossykeles
 
Instalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónInstalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónSocialBiblio
 
Taller sistemas distribuidos sobre Windows usando VMWare
Taller sistemas distribuidos sobre Windows usando VMWareTaller sistemas distribuidos sobre Windows usando VMWare
Taller sistemas distribuidos sobre Windows usando VMWareDamian Barrios Castillo
 

Similaire à Solución VPN Raspberry Pi (20)

188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
188997662 como-configurar-servidor-punto-multipunto-con-open vpn-y-cliente-en...
 
Trabajo de 2 previo en sistemas operativos en red
Trabajo de 2 previo en sistemas operativos en redTrabajo de 2 previo en sistemas operativos en red
Trabajo de 2 previo en sistemas operativos en red
 
Configuracion vpn
Configuracion  vpnConfiguracion  vpn
Configuracion vpn
 
Configuraion vpn
Configuraion  vpnConfiguraion  vpn
Configuraion vpn
 
Servidor VPN en Linux - Bilal Jebari
Servidor VPN en Linux - Bilal JebariServidor VPN en Linux - Bilal Jebari
Servidor VPN en Linux - Bilal Jebari
 
Seguridad de las redes
Seguridad de las redesSeguridad de las redes
Seguridad de las redes
 
Unidad III: Seguridad de las redes
Unidad III: Seguridad de las redesUnidad III: Seguridad de las redes
Unidad III: Seguridad de las redes
 
IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2
IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2
IMPLEMENTACIÓN DE OPENVPN EN RED HAT 6.2
 
Openvp non redhat
Openvp non redhatOpenvp non redhat
Openvp non redhat
 
Openvp non redhat
Openvp non redhatOpenvp non redhat
Openvp non redhat
 
Lab 3 cifrado criptografia
Lab 3   cifrado criptografiaLab 3   cifrado criptografia
Lab 3 cifrado criptografia
 
Manual de instalacion servicios en red hat
Manual de instalacion servicios en red hatManual de instalacion servicios en red hat
Manual de instalacion servicios en red hat
 
Trabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensivaTrabajo final seguridad ofensiva defensiva
Trabajo final seguridad ofensiva defensiva
 
Vpn
VpnVpn
Vpn
 
Vpn linux a linux
Vpn linux a linuxVpn linux a linux
Vpn linux a linux
 
Squid lpt
Squid lptSquid lpt
Squid lpt
 
SSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia SeguraSSH en Ubuntu - Transferencia Segura
SSH en Ubuntu - Transferencia Segura
 
Gestion de nubes de servidores
Gestion de nubes de servidoresGestion de nubes de servidores
Gestion de nubes de servidores
 
Instalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuraciónInstalación KOHA: desarrollo, requerimientos y configuración
Instalación KOHA: desarrollo, requerimientos y configuración
 
Taller sistemas distribuidos sobre Windows usando VMWare
Taller sistemas distribuidos sobre Windows usando VMWareTaller sistemas distribuidos sobre Windows usando VMWare
Taller sistemas distribuidos sobre Windows usando VMWare
 

Plus de Telefónica

Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWordÍndice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWordTelefónica
 
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...Telefónica
 
Índice del libro "Hacking Web3: Challenge Acepted!" de 0xWord
Índice del libro "Hacking Web3: Challenge Acepted!" de 0xWordÍndice del libro "Hacking Web3: Challenge Acepted!" de 0xWord
Índice del libro "Hacking Web3: Challenge Acepted!" de 0xWordTelefónica
 
Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...
Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...
Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...Telefónica
 
Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...
Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...
Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...Telefónica
 
Índice del Libro "Storytelling para Emprendedores"
Índice del Libro "Storytelling para Emprendedores"Índice del Libro "Storytelling para Emprendedores"
Índice del Libro "Storytelling para Emprendedores"Telefónica
 
Digital Latches for Hacker & Developer
Digital Latches for Hacker & DeveloperDigital Latches for Hacker & Developer
Digital Latches for Hacker & DeveloperTelefónica
 
Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"
Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"
Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"Telefónica
 
WhatsApp INT: OSINT en WhatsApp
WhatsApp INT: OSINT en WhatsAppWhatsApp INT: OSINT en WhatsApp
WhatsApp INT: OSINT en WhatsAppTelefónica
 
Índice del libro "De la Caverna al Metaverso" de 0xWord.com
Índice del libro "De la Caverna al Metaverso" de 0xWord.comÍndice del libro "De la Caverna al Metaverso" de 0xWord.com
Índice del libro "De la Caverna al Metaverso" de 0xWord.comTelefónica
 
20º Máster Universitario de Ciberseguridad UNIR
20º Máster Universitario de Ciberseguridad UNIR20º Máster Universitario de Ciberseguridad UNIR
20º Máster Universitario de Ciberseguridad UNIRTelefónica
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyTelefónica
 
Índice del libro "Ciberseguridad de tú a tú" de 0xWord
Índice del libro "Ciberseguridad de tú a tú"  de 0xWordÍndice del libro "Ciberseguridad de tú a tú"  de 0xWord
Índice del libro "Ciberseguridad de tú a tú" de 0xWordTelefónica
 
Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...
Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...
Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...Telefónica
 
Índice del libro "Social Hunters" de 0xWord
Índice del libro "Social Hunters" de 0xWordÍndice del libro "Social Hunters" de 0xWord
Índice del libro "Social Hunters" de 0xWordTelefónica
 
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...Telefónica
 
Los retos sociales y éticos del Metaverso
Los retos sociales y éticos del MetaversoLos retos sociales y éticos del Metaverso
Los retos sociales y éticos del MetaversoTelefónica
 
Índice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWord
Índice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWordÍndice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWord
Índice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWordTelefónica
 
Índice del libro "Docker: SecDevOps" 2ª Edición de 0xWord
Índice del libro "Docker: SecDevOps" 2ª Edición de 0xWordÍndice del libro "Docker: SecDevOps" 2ª Edición de 0xWord
Índice del libro "Docker: SecDevOps" 2ª Edición de 0xWordTelefónica
 
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...Telefónica
 

Plus de Telefónica (20)

Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWordÍndice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
Índice de libro "Historias Cortas sobre Fondo Azul" de Willy en 0xWord
 
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
Índice del libro: Máxima Seguridad en Windows: Secretos Técnicos. 6ª Edición ...
 
Índice del libro "Hacking Web3: Challenge Acepted!" de 0xWord
Índice del libro "Hacking Web3: Challenge Acepted!" de 0xWordÍndice del libro "Hacking Web3: Challenge Acepted!" de 0xWord
Índice del libro "Hacking Web3: Challenge Acepted!" de 0xWord
 
Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...
Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...
Índice del libro "Amazon Web Services: Hardening de Infraestructuras Cloud Co...
 
Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...
Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...
Índice del Libro "Ciberestafas: La historia de nunca acabar" (2ª Edición) de ...
 
Índice del Libro "Storytelling para Emprendedores"
Índice del Libro "Storytelling para Emprendedores"Índice del Libro "Storytelling para Emprendedores"
Índice del Libro "Storytelling para Emprendedores"
 
Digital Latches for Hacker & Developer
Digital Latches for Hacker & DeveloperDigital Latches for Hacker & Developer
Digital Latches for Hacker & Developer
 
Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"
Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"
Índice del libro "Hardening de servidores GNU / Linux 5ª Edición (Gold Edition)"
 
WhatsApp INT: OSINT en WhatsApp
WhatsApp INT: OSINT en WhatsAppWhatsApp INT: OSINT en WhatsApp
WhatsApp INT: OSINT en WhatsApp
 
Índice del libro "De la Caverna al Metaverso" de 0xWord.com
Índice del libro "De la Caverna al Metaverso" de 0xWord.comÍndice del libro "De la Caverna al Metaverso" de 0xWord.com
Índice del libro "De la Caverna al Metaverso" de 0xWord.com
 
20º Máster Universitario de Ciberseguridad UNIR
20º Máster Universitario de Ciberseguridad UNIR20º Máster Universitario de Ciberseguridad UNIR
20º Máster Universitario de Ciberseguridad UNIR
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
 
Índice del libro "Ciberseguridad de tú a tú" de 0xWord
Índice del libro "Ciberseguridad de tú a tú"  de 0xWordÍndice del libro "Ciberseguridad de tú a tú"  de 0xWord
Índice del libro "Ciberseguridad de tú a tú" de 0xWord
 
Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...
Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...
Índice del libro "Open Source INTelligence (OSINT): Investigar personas e Ide...
 
Índice del libro "Social Hunters" de 0xWord
Índice del libro "Social Hunters" de 0xWordÍndice del libro "Social Hunters" de 0xWord
Índice del libro "Social Hunters" de 0xWord
 
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
Índice del libro "Kubernetes para profesionales: Desde cero al despliegue de ...
 
Los retos sociales y éticos del Metaverso
Los retos sociales y éticos del MetaversoLos retos sociales y éticos del Metaverso
Los retos sociales y éticos del Metaverso
 
Índice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWord
Índice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWordÍndice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWord
Índice del Libro "Ciberestafas: La historia de nunca acabar" de 0xWord
 
Índice del libro "Docker: SecDevOps" 2ª Edición de 0xWord
Índice del libro "Docker: SecDevOps" 2ª Edición de 0xWordÍndice del libro "Docker: SecDevOps" 2ª Edición de 0xWord
Índice del libro "Docker: SecDevOps" 2ª Edición de 0xWord
 
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
Índice del libro "Malware moderno: Técnicas avanzadas y su influencia en la i...
 

Dernier

Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxCarolina Bujaico
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y maslida630411
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaYeimys Ch
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 

Dernier (20)

Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Clasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptxClasificación de Conjuntos de Datos Desequilibrados.pptx
Clasificación de Conjuntos de Datos Desequilibrados.pptx
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
PROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y masPROYECCIÓN DE VISTAS planos de vistas y mas
PROYECCIÓN DE VISTAS planos de vistas y mas
 
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guiaORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
ORIENTACIONES DE INFORMÁTICA-2024.pdf-guia
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 

Solución VPN Raspberry Pi

  • 1. 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

  • 2. Í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
  • 3. 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
  • 4. 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 root@192.168.1.41 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. # 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
  • 11. 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
  • 12. 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
  • 13. 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 <YOUR PUBLIC IP ADDRESS HERE> 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 <YOUR PUBLIC IP ADDRESS HERE>, 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
  • 14. Introducimos los datos de nuestra Raspberry en los campos los datos de la IP pública y el dominio que queremos crear. 14
  • 15. 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
  • 16. #!/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 Verify that client’s Public Key Exists if [ ! -f $NAME$CRT ]; then echo "[ERROR]: Client Public Key Certificate not found: $NAME$CRT" exit fi echo "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 "<ca>" >> $NAME$FILEEXT cat $CA >> $NAME$FILEEXT 16
  • 17. echo "</ca>" >> $NAME$FILEEXT #Next append the client Public Cert echo "<cert>" >> $NAME$FILEEXT cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/ p' >> $NAME$FILEEXT echo "</cert>" >> $NAME$FILEEXT #Then, append the client Private Key echo "<key>" >> $NAME$FILEEXT cat $NAME$KEY >> $NAME$FILEEXT echo "</key>" >> $NAME$FILEEXT #Finally, append the TA Private Key echo "<tls-auth>" >> $NAME$FILEEXT cat $TA >> $NAME$FILEEXT echo "</tls-auth>" >> $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
  • 18. chmod 600 –R /etc/openvpn Poner los archivos descargados en el programa cliente y ya está todo listo para conectarse a la VPN.
 18
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. - Servicio OpenVPN El PAM de autenticación en OpenVPN está en /usr/lib/openvpn/openvpn-plugin- auth-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
  • 29. 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
  • 30. APLICACIÓN • Pantalla inicial, con todos los servicios de la Raspberry Pi bloqueados 30
  • 31. • Acceso permitido a SSH, bloqueado a VPN y notificado al usuario en caso de acceso 31
  • 32. • Acceso permitido a VPN, bloqueado a SSH y notificado a usuario en caso de acceso 32
  • 33. • 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