Este artículo describe la configuración de un servidor OpenVPN para habilitar la autenticación de dos factores con un bot de Telegram, que enviará una solicitud de confirmación al conectarse.
OpenVPN es un servidor VPN de código abierto ampliamente conocido y gratuito que se utiliza para proporcionar acceso protegido a los recursos internos de la organización por parte de los empleados.
Para la autenticación al conectarse al servidor VPN, generalmente se utiliza una combinación de clave y usuario/contraseña. Sin embargo, tener la contraseña almacenada en el cliente convierte todo el conjunto en un único factor, lo que no garantiza un nivel de seguridad adecuado. Si un atacante obtiene acceso a la computadora del cliente, también obtiene acceso al servidor VPN. Esto es especialmente relevante para conexiones desde máquinas que operan bajo Windows.
El uso de un segundo factor reduce en un 99% el riesgo de acceso no autorizado y no complica en absoluto el proceso de conexión para los usuarios.
Aclaro de inmediato que para implementar esto será necesario conectar un servidor de autenticación de multifactor, multifactor.ru, que puede utilizar un plan gratuito para tus necesidades.
Principio de funcionamiento.
- OpenVPN utiliza el complemento openvpn-plugin-auth-pam para la autenticación.
- El complemento verifica la contraseña del usuario en el servidor y solicita el segundo factor a través del protocolo RADIUS en el servicio de Multifactor.
- El Multifactor envía un mensaje al usuario a través del bot de Telegram para la confirmación de acceso.
- El usuario confirma la solicitud de acceso en el chat de Telegram y se conecta al VPN.
Instalación del servidor OpenVPN
Hay numerosos artículos en internet que describen el proceso de instalación y configuración de OpenVPN, así que no los duplicaremos. Si necesitas ayuda, al final del artículo hay varios enlaces a materiales de capacitación.
Configuración de Multifactor
Accede a , ingresa a la sección "Recursos" y crea un nuevo VPN.
Después de crear, tendrás dos parámetros disponibles: NAS-Identifier y Shared Secret, que serán necesarios para la configuración posterior.

En la sección "Grupos", entra en los parámetros del grupo "Todos los usuarios" y desmarcar la opción "Todos los recursos" para que solo los usuarios de un grupo específico puedan conectarse al servidor VPN.
Cree un nuevo grupo "VPN users", desactive todos los métodos de autenticación excepto Telegram y especifique que los usuarios tienen acceso a los recursos VPN creados.

En la sección "Usuarios", cree usuarios que tendrán acceso a VPN, añádalos al grupo "VPN users" y envíeles un enlace para configurar el segundo factor de autenticación. El inicio de sesión del usuario debe coincidir con el inicio de sesión en el servidor VPN.

Configuración del servidor OpenVPN
Abra el archivo /etc/openvpn/server.conf y añada el complemento para la autenticación mediante el módulo PAM
plugin \/usr\/lib64\/openvpn\/plugins\/openvpn-plugin-auth-pam.so openvpnEl complemento puede estar en el directorio /usr/lib/openvpn/plugins/ o /usr/lib64/openvpn/plugins/ dependiendo de su sistema.
A continuación, es necesario instalar el módulo pam_radius_auth
$ sudo yum install pam_radiusAbra para editar el archivo /etc/pam_radius.conf y especifique la dirección del servidor RADIUS Multifactor
radius.multifactor.ru shared_secret 40donde:
- radius.multifactor.ru es la dirección del servidor
- shared_secret es un parámetro que se copia de la configuración del VPN
- 40 segundos es el tiempo de espera para la solicitud, con un amplio margen
Los demás servidores deben eliminarse o comentarse (poner un punto y coma al principio)
A continuación, cree un archivo para el tipo de servicio openvpn
$ sudo vi \/etc\/pam.d\/openvpny escríbalo
auth required pam_radius_auth.so skip_passwd client_id=[NAS-IDentifier]\nauth substack password-auth\naccount substack password-authla primera línea conecta el módulo PAM pam_radius_auth con los parámetros:
- skip_passwd desactiva el envío de la contraseña del usuario al servidor RADIUS Multifactor (él no necesita saberla).
- client_id inserte en lugar de [NAS-Identifier] el parámetro correspondiente de la configuración del recurso VPN.
Todos los posibles parámetros están descritos en .
Las segunda y tercera líneas incluyen la verificación del inicio de sesión, contraseña y derechos del usuario en su servidor junto con el segundo factor de autenticación.
Reinicie OpenVPN
$ sudo systemctl restart openvpn@serverConfiguración del cliente
Habilite en el archivo de configuración del cliente la solicitud de inicio de sesión y contraseña del usuario
auth-user-passVerificación
Ejecute el cliente de OpenVPN, conéctese al servidor, especifique el inicio de sesión y la contraseña. Un bot de Telegram enviará una solicitud de acceso con dos botones

Un botón permite el acceso, el otro lo bloquea.
Ahora puede guardar la contraseña en el cliente, el segundo factor protegerá su servidor OpenVPN de accesos no autorizados.
Si algo no funciona
Verifique secuencialmente que no se le haya escapado nada:
- En el servidor de OpenVPN hay un usuario con contraseña establecida
- El acceso por el puerto UDP 1812 al servidor radius.multifactor.ru está habilitado.
- Los parámetros NAS-Identifier y Shared Secret están correctamente especificados.
- En el sistema Multifactor se ha registrado un usuario con el mismo inicio de sesión y se le ha otorgado acceso al grupo de usuarios de VPN.
- El usuario ha configurado su método de autenticación a través de Telegram.
Si no ha configurado OpenVPN anteriormente, le recomendamos leer .
La guía se realiza con ejemplos en CentOS 7.
Fuente: habr.com
