OpenVPN-AD: Autenticación en Active Directory

OpenVPN es una de las herramientas más utilizadas para la creación y gestión de redes privadas virtuales debido a cuatro factores principalmente: facilidad de instalación y uso, fiabilidad, multiplataforma (es posible su instalación en distintos sistemas operativos) y ser opensource.

Cuando un cliente intenta realizar una conexión con un servidor OpenVPN, este último debe autenticar y validar de alguna manera a dichos usuarios. Para ello, OpenVPN provee dos mecanismos distintos:
  • En base a certificados digitales (incorpora la herramienta openssl para la creación de certificados)
  • Mediante usuario y contraseña

Para el caso que nos ocupa, nos vamos a centrar en la autenticación con usuario y contraseña. Mediante este mecanismo, que puede ser alternativo o completentario al uso de certificados digitales, el cliente demanda al usuario dicha información y la envía al servidor para su validación.

Dicho proceso de envío por parte del cliente al servidor se puede realizar de dos maneras distintas, dependiendo de la configuración del servidor:
  • Mediante variables de entorno
  • A través de un fichero temporal

El servidor, una vez que recoge el nombre del usuario y la contraseña, ejecuta un script para validar la información y autorizar la conexión por parte del cliente. Existen diferentes scripts para poder realizar dicho proceso en Linux, pero no hemos encontrado ninguno que contraste los datos de usuario con Active Directory, así que nos hemos puesto manos a la obra.

En primer lugar, hay que configurar el cliente y el servidor de manera que realicen este tipo de proceso de validación. En el fichero de configuración del cliente hay que introducir la línea "auth-user-pass" para que el cliente pida al usuario que proporciones su usuario y contraseña. En el fichero de configuración del servidor hay que insertar la línea "auth-user-pass-verify script via-file" donde script es el nombre del script, y via-file es el método de envío de los datos por parte del cliente. Para este caso en concreto se enviará dentro de un fichero.

El script en cuestión puede ser escrito en varios lenguajes, aunque los más cómodos para ello son perl y python. Nosotros hemos elegido este último por familiaridad.

Al principio del fichero están definidas una serie de variables, como pueden ser la dirección del controlador de dominio, la ruta de directorio que hay que modificar y algunas otras, que hay que adaptar y modificar para que se amolden a los diferentes entornos. Entre todas estas variables hay una, grupovpn, que requiere una explicación.

Para poder diferenciar los usuarios privilegiados que se pueden conectar a través de una vpn de los que no, hemos enfocado el script de manera que busque en un grupo existente en el sistema a los usuarios a los que se les permite el acceso externo mediante este mecanismo. De ahí que existan una variable en el script que contenga el grupo donde se encuentran dichos usuarios. De esta forma, cuando un usuario conecta, primero se valida que el usuario sea un usuario válido del dominio y después, que dicho usuario se encuentre dentro del grupo de usuarios de vpn.

Contenidos Descargables