jueves, 29 de octubre de 2015

INSTALAR OPENVPN CON AUTENTIFICACIÓN PAM EN RASPBERRY

En anteriores tutoriales instalamos y configuramos un servidor "OPENVPN" mediante certificados digitales.
El problema que esto supone es que las claves y certificados pueden caer en manos ajenas.
En caso de que pase esto, podemos revocar los certificados del cliente para que no pueda acceder.
Nos situaremos en el directorio en donde los creamos y ejecutamos el siguiente script:

$ cd /etc/openvpn/2.0/
$ sudo . ./vars
$ sudo ./revoke-full certificado_usuario

Sin embargo nosotros añadiremos una capa más de seguridad en nuestra comunicación en caso de robo o pérdida de dispositivo.
Trataremos de autentificar la conexión VPN mediante usuario y contraseña a través del módulo PAM, con lo que nos podremos conectar con cualquier usuario local de la Raspberry.

En este sentido tendremos dos opciones:
  • Conectarnos con autentificación de usuario/contraseña y certificado del cliente.
  • Conectarnos con autentificación de usuario/contraseña sin certificado del cliente.

AUTENTIFICACIÓN CON CERTIFICADO DEL CLIENTE

En el primer caso, que es el que estábamos siguiendo en el anterior tutorial, deberemos modificar ciertos parámetros en los archivos de configuración del servidor y del cliente.
En nuestra Raspberry, abrimos el archivo de configuración del servidor:

$ sudo nano /etc/openvpn/server.conf

Añadimos la siguiente línea:

plugin /usr/lib/openvpn/openvpn-auth-pam.so login

Lo que hacemos es activar el "plugin" para que "OPENVPN" pueda conectar con "PAM".

Reiniciamos el servicio para que se efectuen los cambios:

$ sudo /etc/init.d/openvpn restart

Ahora pasaremos a configurar el cliente:

$ sudo client.opvpn

Agregamos al final del archivo:

auth-user-pass

Con estos sencillos pasos, el servidor, a parte de requerir el certificado del cliente, nos pedirá las credenciales de algún usuario local para autentificar la identidad.


AUTENTIFICACIÓN SIN CERTIFICADO DEL CLIENTE

Para esta segunda opción, editaremos el archivo de configuración del servidor:

$ sudo nano /etc/openvpn/server.conf

Y añadiremos:


client-cert-not-required # No requerimos certificados de los clientes
username-as-common-name # El servidor utiliza el nombre de usuario para autentificar.
tmp-dir "/etc/openvpn/tmp/" # Directorio temporal para la autentificación.
plugin /etc/openvpn/openvpn-auth-pam.so login

Debemos crear el directorio temporal "tmp" para la autentificación ya que por defecto no existe:

$ sudo mkdir /etc/openvpn/tmp

Reiniciamos el servicio:

$ sudo /etc/init.d/openvpn restart

La configuración del archivo cliente la dejamos tal y como lo habíamos configurado en la primera opción, solo añadiendo:

auth-user-pass


CONTROL DE ACCESO A USUARIOS VPN

Si queremos controlar el acceso de los usuarios que se conectan a la VPN, haremos otras modificaciones mas profundas.
Crearemos un archivo de servicio "PAM" dedicado a la autentificación "OPENVPN" para que solo puedan conectar los usuarios que pertenezcan al grupo "vpn".

Primero crearemos el grupo sistema:

$ sudo addgroup vpn

A continuación añadiremos a los usuarios y le asignamos "vpn como grupo principal:

$ sudo  useradd usuario_vpn -M -s /bin/false -g vpn

Le asignamos una contraseña:

$ sudo passwd usuario_vpn

Ahora crearemos un archivo de configuración "PAM" para el servicio "OPENVPN":

$ sudo nano /etc/pam.d/openvpn

Agregamos los siguientes módulos:


auth    required        pam_unix.so    shadow    nodelay
auth    requisite       pam_succeed_if.so user ingroup vpn quiet
account required        pam_unix.so

El primer módulo le solicita al usuario una contraseña y luego verifica la contraseña usando la información almacenada en "/etc/passwd" y, si existe, en "/etc/shadow".
El siguiente módulo comprueba el requisito en el cual el usuario debe pertener al grupo "vpn" para validar la autentificación.
El módulo de la línea 3 verificará si la cuenta ha expirado o si el usuario no ha cambiado la contraseña.



A continuación solo tenemos que editar el archivo de configuración y añadir la nueva ruta para conectar con "PAM":
$ sudo nano /etc/openvpn/server.conf

Modificamos esta línea:
plugin /usr/lib/openvpn/openvpn-auth-pam.so openvpn

Reiniciamos "OPENVPN" para que los cambios surtan efecto:

$ sudo /etc/init.d/openvpn restart

A partir de ahora, solo los usuarios que pertenezcan al grupo "vpn" podrán validarse en el servidor.

Y eso es todo. Si tienes alguna inquietud o duda, puedes contactar conmigo o dejar un comentario al respecto.

Saludos...


No hay comentarios:

Publicar un comentario