En un articulo anterior les mostré como montar un servicio de puerta de enlace de escritorio remoto vía web con Apache Guacamole, todo sobre Docker, en este articulo vamos a añadir otra capa de seguridad sumando dos contenedores adicionales, un nginx proxy y un companion que se encarga de generar un certificado SSL de Let's Encrypt y mantenerlo actualizado.
A considerar antes de iniciar:
A considerar antes de iniciar:
- NOTA1: Debemos contar con un dominio o un DDNS.
- RECOMENDADO: DDNS con Duck DNS en Docker
- NOTA2: Si ya siguieron el tutorial anterior tienen dos opciones... Borrarlo todo y seguir este nuevo tutorial o solamente hacer los ajustes necesarios al .yml y al archivo .env para añadir los dos nuevos contenedores.
- NOTA3: Let's Encrypt necesita que tengas el puerto 443 y 80 abiertos en tu router a modo de poder hacer la validación y generar el SSL.
Si comienzan desde "cero" pueden correr el siguiente script:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#Creado por: JManzur | |
#Actualizamos los repositorios de Ubuntu: | |
apt-get update && sudo apt-get upgrade -y | |
#Instalamos docker y docker-compose | |
apt-get install docker.io docker-compose -y | |
#Creamos los directorios necesarios: | |
mkdir -p /docker/guacamole/config/extensions | |
#Descargamos el plugin necesario para la autentificación en dos pasos: | |
cd /docker/guacamole/config/extensions | |
wget http://archive.apache.org/dist/guacamole/1.0.0/binary/guacamole-auth-totp-1.0.0.tar.gz | |
tar -xvpzf guacamole-auth-totp-1.0.0.tar.gz | |
mv guacamole-auth-totp-1.0.0/guacamole-auth-totp-1.0.0.jar . | |
rm -rf guacamole-auth-totp-1.0.0 guacamole-auth-totp-1.0.0.tar.gz | |
#Descargamos el .yml con el cual levantaremos todos los contenedores: | |
cd /docker/guacamole | |
wget https://gist.githubusercontent.com/JManzur/bb5b1128c5da6dec53ae545f0a60a849/raw/1c70eb1558997f6807223cb22c35072deb22ce55/docker-compose.yml | |
#Creo el archivo de variables | |
touch /docker/guacamole/.env | |
echo "POSTGRES_USER=sqladmin" >> /docker/guacamole/.env | |
echo "POSTGRES_PASSWORD=T3mp0r4l" >> /docker/guacamole/.env | |
echo "VIRTUAL_HOST=tu.dominio.algo" >> /docker/guacamole/.env | |
echo "LETSENCRYPT_HOST=tu.dominio.algo" >> /docker/guacamole/.env | |
echo "LETSENCRYPT_EMAIL=tu@correo.algo" >> /docker/guacamole/.env | |
#FIN |
Del siguiente modo:
sudo su
Descargar el script:
wget https://gist.githubusercontent.com/JManzur/bb5b1128c5da6dec53ae545f0a60a849/raw/1c70eb1558997f6807223cb22c35072deb22ce55/docker-compose.yml
Hacerlo ejecutable:
chmod +x prep_guacamole_ssl.sh
Ejecutarlo:
./prep_guacamole_ssl.sh
IMPORTANTE: Una vez finalice la ejecución del script es recomendable que editen el archivo de variable de entorno que genera y coloquen su propio usuario y contraseña para la base de datos, adicionalmente ingresen la información de su dominio, y correo, para ello editen el archivo /docker/guacamole/.env
El script también se encargó de bajar el docker-compose.yml el cual contiene los 6 contenedores necesarios:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
version: "3" | |
services: | |
nginx-proxy: | |
image: jwilder/nginx-proxy | |
restart: always | |
ports: | |
- "80:80" | |
- "443:443" | |
volumes: | |
- /var/run/docker.sock:/tmp/docker.sock:ro | |
- /docker/guacamole/certs:/etc/nginx/certs:ro | |
- /docker/guacamole/vhostd:/etc/nginx/vhost.d | |
- /docker/guacamole/html:/usr/share/nginx/html | |
labels: | |
- com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy | |
letsencrypt: | |
image: jrcs/letsencrypt-nginx-proxy-companion | |
restart: always | |
environment: | |
- NGINX_PROXY_CONTAINER=nginx-proxy | |
volumes: | |
- /docker/guacamole/certs:/etc/nginx/certs:rw | |
- /docker/guacamole/vhostd:/etc/nginx/vhost.d | |
- /docker/guacamole/html:/usr/share/nginx/html | |
- /var/run/docker.sock:/var/run/docker.sock:ro | |
init-guac-db: | |
image: guacamole/guacamole:latest | |
command: ["/bin/sh", "-c", "test -e /init/initdb.sql && echo 'init file already exists' || /opt/guacamole/bin/initdb.sh --postgres > /init/initdb.sql" ] | |
volumes: | |
- /docker/guacamole/dbinit:/init | |
postgres: | |
image: postgres:latest | |
container_name: SQL | |
restart: always | |
volumes: | |
- /docker/guacamole/dbinit:/docker-entrypoint-initdb.d | |
- /docker/guacamole/dbdata:/var/lib/postgresql/data | |
environment: | |
POSTGRES_USER: ${POSTGRES_USER:-guacdb} | |
POSTGRES_PASSWORD: | |
depends_on: | |
- init-guac-db | |
guacd: | |
image: guacamole/guacd:latest | |
container_name: GUACD | |
restart: always | |
guac: | |
image: guacamole/guacamole:latest | |
container_name: GUACAMOLE | |
restart: always | |
volumes: | |
- /docker/guacamole/config:/opt/local | |
environment: | |
GUACAMOLE_HOME: /opt/local | |
GUACD_HOSTNAME: guacd | |
POSTGRES_HOSTNAME: postgres | |
POSTGRES_DATABASE: ${POSTGRES_USER:-guacdb} | |
POSTGRES_USER: ${POSTGRES_USER:-guacdb} | |
POSTGRES_PASSWORD: | |
VIRTUAL_HOST: | |
LETSENCRYPT_HOST: ${VIRTUAL_HOST} | |
LETSENCRYPT_EMAIL: | |
depends_on: | |
- postgres | |
- guacd |
Y antes del primer inicio necesitamos ejecutar el contenedor que genera la base de datos:
docker-compose up init-guac-db
NOTA: El proceso anterior solo se realiza por única vez antes del primer inicio.
Y una vez finalice levantamos todo con:
docker-compose up -d
Hecho esto ya podemos ingresar a
https://IP/guacamole/#/
Con los credenciales:
- Usuario: guacadmin
- Contraseña: guacadmin
Al ingresar se nos presentará un código QR, (es recomendable respaldarlo) el cual tendremos que escanear con la app Google Authenticator disponible para Android y iOS y así podremos hacer la autentificación en dos pasos.
Ejemplo:
![]() |
Clic en la imagen para agrandar |
NOTA: Cada vez que creemos un nuevo usuario debemos marcarle la opción "permitir el cambio de contraseña" a modo de que puede utilizar la autentificación en dos pasos.
No hay comentarios :
Publicar un comentario