Tengo una configuración de openVPN donde los usuarios no tienen cuentas de shell en la máquina virtual Debian que ejecuta openVPN. Todos los artículos que encontré mientras busqué en Google tienen instrucciones de configurar Google Authenticator para un usuario clásico * nix (por ejemplo, necesita ejecutar el binario Authenticator en el directorio de inicio del usuario).
¿Existe un documento que explique cómo integrar Google Authenticator para servidores openvpn que se autentican basándose únicamente en los .ovpn
archivos utilizados en el lado del cliente?
Miré https://github.com/evgeny-gridasov/openvpn-otp , pero aún requiere la configuración de Google Authenticator.
openvpn
google-authenticator
Animesh
fuente
fuente
Respuestas:
No. Por supuesto que no puedes hacer eso. Esto derrotaría el propósito mismo de 2FA. Su servidor debe tener una forma de verificar las credenciales del usuario, y esta información no debe enviarse a través de la red (es decir, no puede usar únicamente el archivo client.ovpn).
Si bien no necesariamente tiene que crear usuarios de Unix, debe permitir que sus usuarios instalen sus códigos de verificación en el servidor. Puede usar sftp con usuarios virtuales utilizando su certificado ya emitido, https con autorización del lado del cliente (mutuo), CIFS (samba), o bien viejo ftp con extensión TLS o cualquier otra forma que le permita al servidor conocer los códigos de verificación creados por los usuarios . El canal de comunicación debe ser seguro (cifrado || local).
Naturalmente, si sus usuarios cargan sus propios archivos, no puede usar las credenciales basadas en archivos agregados que usa openvpn-otp. Afortunadamente, tenemos otra opción (y mucho mejor) mediante el uso de linux excelente módulo de seguridad pam.
En primer lugar, debe recopilar los archivos de usuario creados por google-authenticator en un directorio mediante uno de los métodos mencionados anteriormente. En nuestro caso será / etc / google-auth.
Usted debe cumplir sola identificación de usuario para todos los archivos aquí, porque no tiene usuarios reales. Deja que sea abierto . Los permisos deben ser 0400 (-r --------). A Pam no le gustan las credenciales legibles del mundo / grupo (ciertamente). Puede aplicar esto fácilmente con samba, apache, ftp o, en el peor de los casos, utilizando una pestaña cron (no recomendado).
Para fines de prueba, solo haga esto:
Después de eso, le pide a openvpn que se autentique contra libpam, que tiene su propio módulo de autenticación de google. Agregue esto a su archivo de servidor openvpn:
Esto dice que usaremos el método de autenticación de pam con la identificación de pam auth openvpn .
Ahora, cree la configuración de pam para openvpn. Edite /etc/pam.d/openvpn:
Aquí decimos que sin una autenticación exitosa de Google fallamos de inmediato (requisito), estamos usando un archivo secreto especial en lugar del predeterminado $ HOME / .google_authenticator (secret =) y accedemos a los archivos como usuario openvpn ya que no hay un usuario real asociado con nuestros usuarios En la siguiente línea, solo decimos que permitimos que todos se conecten después de una autenticación exitosa. Por supuesto, debe implementar su propia política de permisos aquí. Puede controlar los usuarios permitidos por archivo, mysql db o ldap con los respectivos módulos pam.
Agregue esto a su archivo de cliente openvpn
Usamos auth-user-pass para permitir que el cliente openvpn solicite nombre de usuario y contraseña. No nos gusta el almacenamiento en caché ("contraseña" está cambiando) y la renegociación periódica es mala para nosotros por la misma razón.
Después de eso, debería poder conectarse sin openvpn-otp. Tenga en cuenta que este es un método mucho más flexible, ya que puede implementar reglas muy complejas en los archivos de control de pam si lo desea. Puede habilitar / deshabilitar usuarios basados en su directorio mysql o ldap sin tocar esos certificados, por ejemplo.
fuente
Configuración: Servidor OpenVPN con 2FA (Google Authenticator) en Ubuntu Server 18.04.4 LTS para Raspberry Pi Hardware: Raspberry Pi 3 Modelo B + Rev 1.3
fuente