Definición de túneles cifrados con OpenVPN

CDA 2022/23


Í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 las 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
        

    Nota: Para hacer permanente el cambio en la variable del kernel ip_forward se puede descomentar la línea #net.ipv4.ip_forward=1 en el fichero /etc/sysctl.conf.

  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 TLS/SSL 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 ”road warrior”, 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 las 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.

Ver detalles en https://wiki.debian.org/OpenVPN#Init_easy-rsa.

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

    (Opcional) Editar los parámetros de nuestra CA y los metadatos del los certificados a generar (no es imprescindible hacerlo)

    firewall3:~# cd /usr/share/easy-rsa
    firewall3:/usr/share/easy-rsa# cp vars.example vars
    firewall3:/usr/share/easy-rsa# nano vars
    
    ...
    set_var EASYRSA_REQ_COUNTRY    "ES"
    set_var EASYRSA_REQ_PROVINCE   "Ourense"
    set_var EASYRSA_REQ_CITY       "Ourense"
    set_var EASYRSA_REQ_ORG        "ESEI"
    set_var EASYRSA_REQ_EMAIL      "cda@cda.net"
    set_var EASYRSA_REQ_OU         "CDA"
    ...
    

    Inicializar la CA (en el directorio de configuración de OpenVPN, puede hacerse en cualquier otro lugar)

    firewall3:~# cd /etc/openvpn/
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa init-pki
    

    Generar el par de claves de la CA

    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa build-ca nopass
    

  2. Crear el certificado del equipo ”servidor” OpenVPN
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa build-server-full firewall3.cda.net nopass
    

  3. Crear el certificado del equipo ”cliente” OpenVPN
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa build-client-full fuera nopass
    

  4. Crear los parámetros del algoritmo de intercambio de claves Diffie-Hellman necesarios en el lado servidor y usados para la negociación de claves secretas durante el establecimiento de la conexión TLS/SSL (ver https://es.wikipedia.org/wiki/Diffie-Hellman). (suele tardar bastante)
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa gen-dh
    

  5. Se puede comprobar el contenido de los certificados creados (opcional)
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa show-ca
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa show-cert firewall3.cda.net
    firewall3:/etc/openvpn# /usr/share/easy-rsa/easyrsa show-cert fuera
    
    Misma información usando directamente el comando openssl
    firewall3:/etc/openvpn# openssl x509 --text --in pki/ca.crt 
    firewall3:/etc/openvpn# openssl x509 --text --in pki/issued/firewall3.cda.net.crt
    firewall3:/etc/openvpn# openssl x509 --text --in pki/issued/fuera.crt
    


3.2.2 Configuración y creación del enlace OpenVPN

  1. Configuración del servidor: en la máquina firewall3, directorio /etc/openvpn/server.

  2. Configuración de los clientes: en la máquina fuera (193.147.87.33), directorio /etc/openvpn/client
  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)

    RESULTADO: 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# mousepad 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# mousepad 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# mousepad 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: 13/11/2022