Definición de túneles cifrados con OpenVPN

CDA 2018/19


Í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

2.4 Pasos previos (preparación del entorno)

  1. PREVIO 1: 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:~# service sshd restart
    

  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. 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 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 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). Se usará un esquema SSL completo

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.1.1 Creación de la CA y de los certificados de servidor y clientes

La distribución de OpenVPN incluye un conjunto de scripts para implantar una CA básica

  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

    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
    firewall3:/usr/share/easy-rsa/# source vars
    firewall3:/usr/share/easy-rsa/# ./clean-all
    firewall3:/usr/share/easy-rsa/# ./build-ca
    

    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.

    Crear parámetros de intercambio de clave (Diffie-Hellmann)

    firewall3:/usr/share/easy-rsa/# ./build-dh
    

    Totas 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/

  3. 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.

Otra alternativa a los scripts easy-rsa es usar la herramienta gráfica TinyCA que ofrece un interfaz gráfico sobre openSSL para la gestión de autoridades de certificación y la generación de certificados digitales.

firewall3:~# tinyca2 &


3.1.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 tunel 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.2 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.2.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 3.3 de la práctica 3 ”Definición de zonas desmilitarizadas con Shorewall”

3.2.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 habilitar una excepción para el tráfico openVPN (puerto 1194 UDP) en el fichero /etc/shorewall/rules y anadir el interfaz 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            tcpflags,routefilter,norfc1918,nosmurfs,logmartians
    loc     enp0s3            tcpflags,detectnets,nosmurfs
    dmz     enp0s8            tcpflags,detectnets,nosmurfs
    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 tunel 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 tunel OpenVPN

4 Documentación a entregar

Esquema propuesto

Entrega: FAITIC

Fecha límite: 18/11/2018