Skip to main content

OpenVPN con 2FA en Opnsense

Vamos a explicar como instalar una conexión OpenVPN con doble factor de autenticación en un equipo con OpnSense.

Requisitos previos

Certificados

Debido a que el sistema de conexión de las conexiones OpenVPN se realiza a través de certificados, vamos en primer lugar a proceder a la generación de los certificados, para el servicio OpenVPN. Para ellos vamos a la opción System -> Trust

certificados01.png

Procedemos a la generación, para ello debemos crear lo siguiente por este orden:

  • Entidad certificadora
  • Certificado del servidor

Posteriormente generaremos los certificados de usuario, pero eso lo veremos más adelante.

Entidad certificadora (CA)

Vamos a Trust -> Authorities

En la pantalla vemos que a la izquierda hay un signo + para agregar una autoridad

Captura de pantalla 2024-07-25 a las 10.05.56.png

Aparece un formulario para usar una o crear una nueva, seleccionaremos crear una nueva interna

Captura de pantalla 2024-07-25 a las 10.05.44.png

Rellenamos los campos necesarios

En el campo Lifetime pondremos un tiempo relativamente largo, para no tener que regenerar los certificados cada año, aunque esto para muchos será una aberración, nos facilitará mucho las cosas. Si deseamos tener un sistema mucho más seguro y robusto, pondremos menos días.

En este caso voy a poner 8250 días (más de 22 años) para no tener que regenerar el certificado. ponemos la longitud de la clave en mi caso he puesto 4096 y el digest en SHA512.

El resto de campos los rellenamos con los datos de País, Ciudad, correo, etc.

image.png

Ahora creamos el certificado

Certificado (CRT)

Ahora procedemos a crear el certificado para ello vamos a Trust -> Certificates, y repetimos el proceso, pero seleccionamos como entidad certificadora la entidad que hemos creado antes (El Tecnocratica CA que hemos llamado Tecnocratica_Self)

Captura de pantalla 2024-07-25 a las 10.13.48.png


Una vez creado el certificado ya tenemos los certificados de servidor listos.

Servidores

Para el 2FA, necesitamos crear un servidor de autenticación, para ello vamos a System -> Access -> Servers. Crearemos un server con el tipo Local + TImebased One Time Password.

Captura de pantalla 2024-07-25 a las 10.20.10.png

En mi caso le he llamado TOTP VPN Access Server

Captura de pantalla 2024-07-25 a las 10.37.36.png

Grupos

Ahora crearemos un grupo de usuarios para que tengan acceso a la VPN

Captura de pantalla 2024-07-25 a las 10.16.39.png

Y le ponemos de nombre VPN (en mi caso, ya había un usuario creado, que lo he creado para hacer este manual, en vuestro caso estará solo root)

Captura de pantalla 2024-07-25 a las 10.16.52.png

Usuarios

Ahora procederemos a crear los usuarios en el sistema, para ello vamos a System -> Access -> Users, y procedemos a crear un usuario nuevo

Captura de pantalla 2024-07-25 a las 10.39.26.png

Crearemos un certificado para el usuario y el secret del TOTP

Captura de pantalla 2024-07-25 a las 10.41.30.png

Y nos presentará la creación del certificado al guardar

Captura de pantalla 2024-07-25 a las 10.42.04.png

Como siempre usaremos crear un certificado interno, usaremos como CA Tecnocratica_Self, y los días, como antes pondremos por ejemplo 3970

AL terminar de generar el certificado, volvemos al usuario y editamos, en la parte inferior vemos la generación de la clave para el TOTP

Captura de pantalla 2024-07-25 a las 10.45.29.png

En la opción OTP QR code, pulsamos Click to unhide, nos aparecerá un QR

Captura de pantalla 2024-07-25 a las 10.45.37.png

Este QR es el que tenemos que añadir en nuestra aplicación de autenticación como Google authenticator o Authy 

En la imagen podemos ver la pantalla de Authy

2024-07-25 10.48.22.jpg

Ahora asociaremos el usuario al grupo VPN, y procederemos a crear el servidor OpenVPN

Servidor OpenVPN

Iremos a la opción VPN -> OpenVPN -> Servers [Legacy] (si es un Opnsense muy moderno)

Crearemos un servidor OpenVPN y rellenamos los datos

Captura de pantalla 2024-07-25 a las 10.52.27.png

Pondremos el nombre, el tipo en Remote Access, el Backend de autenticación en TOTP y Local database, el grupo que hemos creado (VPN) el puerto por defecto (1194), los certificados, una red para los clientes VPN (en mi caso 192.168.40.0/24) y la red a la que van a acceder. En mi caso 10.200.3.0/24

Captura de pantalla 2024-07-25 a las 10.53.28.png

Con esta información, ya tenemos el servidor VPN

Recuerda habilitar el puerto 1194 en UDP de entrada en el firewall

Exportar configuración

Ahora vamos a VPN -> OpenVPN -> Client Export

Aparecerá la siguiente pantalla (el nombre de host se ha ocultado)

Captura de pantalla 2024-07-25 a las 10.57.18.png

En la parte inferior, vemos los usuarios, y un icono de descarga, esto nos descargará tres archivos en un fichero tipo ZIP

Captura de pantalla 2024-07-25 a las 10.59.11.png

El fichero con extensión ovpn contiene la configuración a importar, y cuando se importe, en la misma carpeta debemos dejar el certificado (p12) y la clave

En nuestro ordenador (en mi caso un windows), importaremos el fichero (después de instalar el programa de OpenVPN)

Captura de pantalla 2024-07-25 a las 11.01.14.png

Y copiaremos los archivos en la carpeta de perfiles de OpenVPN (normalmente Usuario y dentro OpenVPN\Config\Perfil_descargado)

Captura de pantalla 2024-07-25 a las 11.00.50.png

Ahora cuando conectemos, nos pedirá un usuario y una clave

Captura de pantalla 2024-07-25 a las 11.03.29.png

El usuario es nuestro usuario, y la clave será el TOTP (el código de tiempo de nuestra aplicación de autenticación) que será Google Autenticator o Authy y la clave.

Es decir si mi clave es edutecnocratica, y el TOTP del móvil es 123456, la clave será 123456edutecnocratica.

Y listo!!!