Definición de túneles cifrados con OpenVPN

CDA 2021/22


Índice General

1 Descripción

Ejemplo de uso del software de VPN (Virtual Private Network) openVPN.

Recursos complementarios

2 Entorno de prácticas

2.1 Software de virtualización VIRTUALBOX

En estas prácticas se empleará el software de virtualización VIRTUALBOX para simular los equipos GNU/Linux sobre los que se realizarán las pruebas.

2.2 Imágenes a utilizar

  1. Scripts de instalación

    Notas:

  2. Imágenes descargadas

  3. Usuarios configurados e inicio en el sistema

2.3 Máquinas virtuales y redes creadas

Una vez ejecutado el script se habrán definido las 3 redes y los 4 equipos virtualizados donde se realizarán los ejercicios:

Image dmz-vpn

3 Ejercicio: Uso de enlaces cifrados OpenVPN

Se desarrollará un ejercicio de creación de enlaces OpenVPN, donde se creará un enlace cifrado OpenVPN desde un equipo de la red externa y se revisará su integración en el firewall con DMZ configurado con Shorewall.

3.1 Pasos previos (preparación del entorno)

  1. PREVIO 1 (ya hecho en MVs de prácticas). Habilitar el acceso como usuario root en el servidor SSH de la máquina firewall3 [10.10.10.1, 10.20.20.1, 193.147.87.47] y reiniciar el servicio
    	firewall3:~# nano /etc/ssh/sshd_config
    	...
    	PermitRootLogin yes
    	...
    	
    	firewall3:~# systemctl restart sshd
    

  2. PREVIO 2. Establecer tráfico a través de la máquina firewall3 [10.10.10.1, 10.20.20.1, 193.147.87.47]
    1. Opción 1: si se ha retomado la práctica 3 ”Definición de zonas desmilitarizadas con Shorewall”
      1. Deshabilitar el filtrado de Shorewall
        			firewall3:~#  shorewall clear
        
      2. Habilitar la redirección de tráfico
        			firewall3:~#  echo 1 > /proc/sys/net/ipv4/ip_forward
        

    2. Opción 2: si se ha iniciado la práctica desde cero
      1. Establecer la configuración por defecto de NETFILTER/iptables (politica ACCEPT)
        			firewall3:~#  iptables -F
        			firewall3:~#  iptables -t nat -F
        			
        			firewall3:~#  iptables -P INPUT ACCEPT
        			firewall3:~#  iptables -P OUTPUT ACCEPT  
        			firewall3:~#  iptables -P FORWARD ACCEPT
        
      2. Habilitar la redirección de tráfico
        			firewall3:~#  echo 1 > /proc/sys/net/ipv4/ip_forward
        

  3. Tarea 1 [escaneo inicial]: (a incluir en la memoria entregable) Escaneo desde la máquina fuera para verificar los servicios accesibles inicialmente

3.2 Parte 1: Creación de un enlace OpenVPN

Se creará un enlace cifrado OpenVPN desde la máquina externa fuera (193.147.87.33) a la máquina firewall3 (193.147.87.47).

En este ejemplo se usará un esquema SSL/TLS completo que negocia un conjunto de claves secretas de cifrado y autenticación cada vez que se establece un tunel. Una alternativa más sencilla hubiera sido usar claves secretas preacordadas manualmente.

Usaremos el modo de funcionamiento de OpenVPN ”roadwarrior”, donde un servidor OpenVPN crea enlaces cifrados para equipos autorizados situados en redes externas.

Certificados y claves necesarias:

3.2.1 Creación de la CA y de los certificados de servidor y clientes

Los certificados digitales necesarios para configurar las conexiones TLS/SSL pueden obtenerse de Autoridades Certificadoras externas, tanto de pago como gratuitas (como Let's Encrypt, https://letsencrypt.org/es/), y reconocidos por defecto en diferentes aplicaciones (navegadores, etc).

En nuestro ejemplo crearemos nuestra propia Autoridad Certificadora (CA) de uso interno (cuyos certificados serán reconocidos únicamente en las aplicaciones y servicios de nuestra organización).

La distribución de OpenVPN incluye un conjunto de scripts para implantar una CA básica. Estos scripts usan internamente el comando openssl para las operaciones de creación de pares de claves (pública y privada) y firma de certificados.

  1. Crear la ”autoridad certificadora” (CA) en el firewall

    Ir al directorio easy-rsa donde residen los scripts y las claves de la CA

    firewall3:~# cd /usr/share/easy-rsa/
    

    Editar datos generales de nuestra red (opcional)

    firewall3:/usr/share/easy-rsa/#  nano vars
    ...
    export KEY_COUNTRY=es
    export KEY_PROVINCE=ourense
    export KEY_CITY=ourense
    export KEY_ORG=cda
    export KEY_EMAIL=cda@cda.net
    ...
    

    Inicializar la CA y generar su par de claves

    firewall3:/usr/share/easy-rsa/# cp openssl-1.0.0.cnf openssl.cnf    # renombra el fichero de configuración de openssl
    firewall3:/usr/share/easy-rsa/# source vars           # carga las variables definidas en vars
    firewall3:/usr/share/easy-rsa/# ./clean-all           # inicializa el directorio keys donde se ubicarán los certificados y claves
    firewall3:/usr/share/easy-rsa/# ./build-ca            # crea las claves pública y privada de la CA y su certificado raíz autofirmado
    

    Cuando se nos pregunte por ”COMMON_NAME:” poner CA_pruebas

  2. Crear el certificado del equipo ”servidor” OpenVPN
    firewall3:/usr/share/easy-rsa/# ./build-key-server firewall3
    

    Cuando se nos pregunte por ”COMMON_NAME:” poner el nombre de dominio completo del servidor OpenVPN (en este caso, firewall3.cda.net)

    Se solicitará una contraseña para proteger el fichero con la clave privada. Dado que OpenVPN se iniciará como un script de arranque en /etc/init.d/ se dejará en blanco para que no se bloquee el inicio del servidor.

  3. Crear parámetros de intercambio de clave (Diffie-Hellman)
    firewall3:/usr/share/easy-rsa/# ./build-dh
    

    Este script crea un fichero (dh2028) con los parémetros que necesita el algoritmo de intercambio de claves Diffie-Hellman utilizado durante la fase de establecimiento de conexión del protocolo TLS/SSL para acordar las claves secretas con las que se cifrarán y autenticarán los pauqtes TLS/SSL intercambiados.

  4. Crear el certificado del equipo ”cliente” OpenVPN
    firewall3:/usr/share/easy-rsa/# ./build-key fuera
    

    Cuando se nos pregunte por ”COMMON_NAME:” poner un nombre identificativo del cliente OpenVPN (en este caso, fuera)

    Se solicitará una contraseña para proteger el fichero con la clave privada. Dado que OpenVPN se iniciará como un script de arranque en /etc/init.d/ se dejará en blanco para que no se bloquee el inicio del cliente.

Todas las claves generadas (fichero con el certificado digital firmado por la CA [extensión .crt] + fichero con la respectiva clave privada [extensión .key]) se crean en el directorio /usr/share/easy-rsa/keys/. Puede verse el contenido de los certificados digitales creados con el comando openssl

firewall3:/usr/share/easy-rsa/# openssl x509 -text -in keys/ca.crt
firewall3:/usr/share/easy-rsa/# openssl x509 -text -in keys/firewall3.crt
firewall3:/usr/share/easy-rsa/# openssl X509 -text -in keys/fuera.crt


3.2.2 Configuración y creación del enlace OpenVPN

  1. Configuración del servidor: en la máquina firewall3

  2. Configuración de los clientes: en la máquina fuera (193.147.87.33)
  3. Crear el túnel OpenVPN

    Importante: antes de iniciar el túnel asegurar que en firewall3 está activado el IP forwading y desactivadas las reglas iptables de Shorewall (ver PREVIO 2)

    En ambos extremos del túnel cifrado se crea un interfaz de red ”virtual” /dev/tun0 por el que se accede al enlace cifrado que conforma la red privada virtual.

  4. Tarea 2 [Comprobar el túnel creado]

    Comprobar el acceso desde la máquina (fuera) a las 2 redes internas detrás de firewall3, que inicialmente no eran accesibles.

3.3 Parte 2: Integración del enlace OpenVPN con Shorewall

Shorewall prevee la posibilidad de dar soporte a conexiones VPN. Veremos como integrar nuestro túnel openVPN en Shorewall

3.3.1 Preparación de Shorewall

  1. Opción 1: si se ha retomado la práctica 3 ”Definición de zonas desmilitarizadas con Shorewall”
    1. Se partirá de la configuración de Shorewall ya existente.

  2. Opción 2: si se ha iniciado la práctica desde cero
    1. Completar los pasos 1 a 7 de la sección 4.4 de la práctica 3 ”Definición de zonas desmilitarizadas con Shorewall”

3.3.2 Pasos a seguir

 
  1. Crear una nueva zona (road) para los clientes conectado con OpenVPN en el fichero /etc/shorewall/zones
    firewall3:/etc/shorewall# leafpad zones &
    
    ###############################################################################
    #ZONE   TYPE    OPTIONS                 IN                      OUT
    #                                       OPTIONS                 OPTIONS
    fw      firewall
    net     ipv4
    loc     ipv4
    dmz     ipv4
    road    ipv4
    

    Nota: otra opción más directa sería vincular en el fichero interfaces la tarjeta de red tun0 a la zona loc

  2. Asociar el interfaz tun0 a la zona road en el fichero /etc/shorewall/interfaces
     firewall3:/etc/shorewall# leafpad interfaces &
    
    ###############################################################################
    ?FORMAT 2
    ###############################################################################
    #ZONE   INTERFACE         OPTIONS
    net     enp0s9
    loc     enp0s3
    dmz     enp0s8 
    road    tun+
    

  3. Definir las políticas y reglas que afectan a los clientes OpenVPN

    Haremos que los equipos conectados por openVPN (zona road) tengas las mismas restricciones/privilegios que los de la red interna (zona loc).

  4. Dar de alta el túnel OpenVPN /etc/shorewall/tunnels
    firewall3:/etc/shorewall# leafpad tunnels &
    
    #TYPE                   ZONE    GATEWAY         GATEWAY-ZONE
    openvpnserver:1194      net     0.0.0.0/0
    

  5. Comprobar la configuración del firewall y el funcionamiento del túnel OpenVPN

4 Documentación a entregar

Esquema propuesto

Entrega: MOOVI

Fecha límite: 31/10/2021