|
|
|
Para trabajar remotamente en la [nueva plataforma](https://proyectos.interior.edu.uy/projects/servidores/wiki/Plataforma_de_servidores_del_Interior) y en otros servicios accesibles solo desde la RAU, contamos con un servidor OpenVPN en producción en el contenedor LXC `Bo` y accesible en ***vpn.interior.edu.uy***.
|
|
|
|
|
|
|
|
El servicio fue montado y aprovisionado completamente a través de nuestros playbooks Ansible y fork al role [Stouts.openvpn](https://github.com/UdelaRInterior/Stouts.openvpn). Dicho role contempla no solo la instalación del servidor OpenVPN, sino también la creación de certificados de acceso para los clientes y su respectivo archivo de configuración.
|
|
|
|
|
|
|
|
En esta entrada se documenta el procedimiento de concesión y revocado de acceso a un usuario haciendo uso del proceso automatizado con Ansible.
|
|
|
|
|
|
|
|
Las únicas variables que nos interesarán para este proceso son:
|
|
|
|
- **openvpn_clients**: listado con los nicknames de los usuarios cuyo acceso deseamos conceder o mantener (en caso de que ya haya sido concedido).
|
|
|
|
- **openvpn_clients_revoke**: listado con los nicknames de los usuarios a los cuales se les concedió acceso y ahora se desea revocar.
|
|
|
|
- **openvpn_download_clients**: booleano para indicar si deseamos o no, descargar desde el servidor OpenVPN a nuestro equipo los archivos de credenciales y configuración de los clientes con acceso.
|
|
|
|
- **openvpn_download_dir**: ubicación del equipo donde se descargarán los archivos `.zip` (uno por usuario), en caso de indicar `true` en la variable anterior.
|
|
|
|
|
|
|
|
Para el servidor `Bo`, el archivo de variables correspondientes al role *Stouts.openvpn* se encuentra [aquí](https://git.interior.edu.uy/adminsys/config/blob/master/host_vars/bo.interior.edu.uy/vars/30_openvpn.yml), y para la tarea que nos ocupa, supongamos que tenemos las variables declaradas de la siguiente manera:
|
|
|
|
```yaml
|
|
|
|
openvpn_clients: # Listado de clientes a crear/mantener certificado de acceso
|
|
|
|
- usuario01
|
|
|
|
- usuario02
|
|
|
|
- usuario03
|
|
|
|
- usuario04
|
|
|
|
|
|
|
|
openvpn_clients_revoke: [] # Listado de clientes a revocar acceso
|
|
|
|
|
|
|
|
openvpn_download_clients: true # Descarga de los archivos de cliente
|
|
|
|
openvpn_download_dir: ../openvpn_interior_credentials/ # Ubicación de la descarga
|
|
|
|
```
|
|
|
|
|
|
|
|
## Conceder nuevo acceso
|
|
|
|
|
|
|
|
Para conceder acceso a uno o varios usuarios nuevos, deberemos agregarlos a la lista simple `openvpn_clients`, indicando un nickname único asignado a dicho usuario. Por ejemplo para agregar los usuarios `nuevo01` y `nuevo02`, la variable quedaría definida de la siguiente manera:
|
|
|
|
```yaml
|
|
|
|
openvpn_clients:
|
|
|
|
- usuario01
|
|
|
|
- usuario02
|
|
|
|
- usuario03
|
|
|
|
- usuario04
|
|
|
|
- nuevo01
|
|
|
|
- nuevo02
|
|
|
|
```
|
|
|
|
|
|
|
|
Los nuevos *juegos* de llaves de cifrado y archivos de configuración serán almacenados en el servidor en la ruta `/etc/openvpn/keys/<nick-de-usuario>.zip`. Si también queremos que las nuevas credenciales se descarguen a nuestro equipo en la ubicación indicada en `openvpn_download_dir`, establecemos `openvpn_download_clients: true`.
|
|
|
|
|
|
|
|
Con estas modificaciones, solo resta correr el playbook `site.yml` con el tag correspondiente sobre `Bo` para apliacar los cambios:
|
|
|
|
```
|
|
|
|
ansible-playbook -i hosts_prod --limit bo.interior.edu.uy --tags openvpn site.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
**Una vez ejecutado correctamente, no olvides guardar tus cambios en el proyecto generando un nuevo *commit* y subiéndolo con *git push*.**
|
|
|
|
|
|
|
|
|
|
|
|
## Revocar acceso preexistente
|
|
|
|
|
|
|
|
En caso de que se desee revocar el acceso concedido previamente a uno o varios usuarios, se deberá "mover" su nickname de la lista `openvpn_clients` a la lista `openvpn_clients_revoke`.
|
|
|
|
|
|
|
|
Por ejemplo, supongamos que se desea revocar el acceso al usuario ***usuario02***. En base a la configuración inicial, las listas deberían quedar definidas así:
|
|
|
|
```yaml
|
|
|
|
openvpn_clients:
|
|
|
|
- usuario01
|
|
|
|
- usuario03
|
|
|
|
- usuario04
|
|
|
|
|
|
|
|
openvpn_clients_revoke:
|
|
|
|
- usuario02
|
|
|
|
```
|
|
|
|
|
|
|
|
Con estas modificaciones, corremos el playbook `site.yml` del mismo modo que en el caso anterior:
|
|
|
|
```
|
|
|
|
ansible-playbook -i hosts_prod --limit bo.interior.edu.uy --tags openvpn site.yml
|
|
|
|
```
|
|
|
|
|
|
|
|
Una vez los cambios son aplicados correctamente, modificamos nuevamente la lista `openvpn_clients_revoke` para dejarla vacía.
|
|
|
|
```yaml
|
|
|
|
openvpn_clients:
|
|
|
|
- usuario01
|
|
|
|
- usuario03
|
|
|
|
- usuario04
|
|
|
|
|
|
|
|
openvpn_clients_revoke: []
|
|
|
|
```
|
|
|
|
|
|
|
|
**Con todo el proceso ejecutado correctamente, generamos un *commit* para registrar los accesos revocados, y lo subimos al repositorio con *git push*.**
|
|
|
|
|
|
|
|
> Notar que la concesión a nuevos usuarios y el revocado a antiguos puede llevarse a cabo en usa sola ejecución del playbook, simplemente con reflejar los valores correspondientes en ambas listas. |
|
|
\ No newline at end of file |