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
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
Aparece un formulario para usar una o crear una nueva, seleccionaremos crear una nueva interna
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.
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)
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.
En mi caso le he llamado TOTP VPN Access Server
Grupos
Ahora crearemos un grupo de usuarios para que tengan acceso a la VPN
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)
Usuarios
Ahora procederemos a crear los usuarios en el sistema, para ello vamos a System -> Access -> Users, y procedemos a crear un usuario nuevo
Crearemos un certificado para el usuario y el secret del TOTP
Y nos presentará la creación del certificado al guardar
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
En la opción OTP QR code, pulsamos Click to unhide, nos aparecerá un QR
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
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
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
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)
En la parte inferior, vemos los usuarios, y un icono de descarga, esto nos descargará tres archivos en un fichero tipo ZIP
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)
Y copiaremos los archivos en la carpeta de perfiles de OpenVPN (normalmente Usuario y dentro OpenVPN\Config\Perfil_descargado)
Ahora cuando conectemos, nos pedirá un usuario y una clave
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!!!