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
$ 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
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...
$ 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...