Ir al contenido principal

Cómo montar un Laboratorio de Pruebas con Terminal Web usando Docker, ttyd y Nginx

Cómo montar un Laboratorio de Pruebas con Terminal Web usando Docker, ttyd y Nginx

En este tutorial aprenderemos a crear un entorno seguro y aislado (Sandbox) que permite acceder a una terminal de Linux desde el navegador. Es ideal para que terceros (clientes o soporte técnico) realicen pruebas sin comprometer la seguridad del servidor principal.

1. La Arquitectura

Para este despliegue utilizamos tres capas de seguridad:

  • Docker: Crea un contenedor (Alpine Linux) donde ocurre todo. Si algo sale mal, el host queda intacto.
  • ttyd: Herramienta ligera que convierte la terminal en una interfaz web.
  • Nginx: Actúa como proxy inverso, aporta HTTPS y una URL amigable.

2. Paso 1: Crear el Contenedor de Sacrificio

Creamos un contenedor llamado laboratorio. Usamos un volumen en modo solo lectura para que el usuario externo no pueda modificar archivos.

# Crear el contenedor con un volumen de solo lectura
docker run -d \
  --name laboratorio \
  -v /ruta/a/tus/archivos:/data:ro \
  alpine tail -f /dev/null

3. Paso 2: Preparar el entorno (Opcional)

Si el laboratorio necesita herramientas específicas (por ejemplo OpenSSL), las instalamos directamente dentro del contenedor.

docker exec -it laboratorio apk add openssl

4. Paso 3: Lanzar la Terminal Web con ttyd

ttyd será el puente entre Docker y el navegador. Apuntamos directamente al contenedor y entramos en la carpeta compartida.

# Lanzar ttyd en el puerto 8080
# -w /data: entra directo en la carpeta compartida
# -c usuario:password (opcional) para auth básica

ttyd -p 8080 docker exec -it -w /data laboratorio sh
Tip: Puedes ejecutar ttyd como servicio systemd si quieres algo persistente.

5. Paso 4: Configuración del Proxy Inverso en Nginx

Para exponer la terminal de forma segura en una URL como https://tu-dominio.com/pasarela/, configuramos Nginx:

location /pasarela/ {
    proxy_pass http://127.0.0.1:8080/;  # Importante la barra final
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}
Nota: No olvides reiniciar Nginx:
sudo systemctl restart nginx

6. Caso de Uso: Validación de Certificados P12

Este laboratorio es ideal para resolver disputas técnicas. Un cliente puede ejecutar directamente:

openssl pkcs12 -info -in archivo.p12 -noout -passin pass:CONTRASEÑA
Si el comando devuelve MAC verify error, queda demostrado que el archivo o la contraseña son incorrectos en un entorno Linux estándar.

7. Ventajas de este método

  • Aislamiento: El usuario nunca accede al sistema operativo real.
  • Sin instalación: El cliente solo necesita un navegador.
  • Transparencia: Ambas partes ven el mismo resultado técnico.

Consejos finales para tu blog

  • Seguridad: Al terminar la prueba, cierra ttyd para no dejar una terminal expuesta.
  • Personalización: Puedes usar cualquier imagen Docker: Ubuntu, Python, Node.js, etc.

Comentarios

Entradas populares de este blog

Instalación y Configuración de MySQL 5.7 en Ubuntu 24.04 LTS

Instalar MySQL 5.7 en Ubuntu 24.04 1. Descargar e instalar MySQL Copiar mkdir ~/mysql57 cd ~/mysql57 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz sudo mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql 2. Instalar dependencias necesarias IMPORTANTE: Se descargan las versiones nuevas de las librerías y se las vincula con las librerías que necesita MySQL. Copiar sudo apt update # Reemplazo de libaio sudo apt install libaio1t64 # Reemplazo de libtinfo y ncurses sudo apt install libtinfo6 libncurses6 Copiar # Crear los enlaces simbólicos sudo ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/libaio.so.1 sudo ln -sf /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5 sudo ln -sf /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/x86_64...

Instalar Evolution API en Docker con Redis y PostgreSQL Local

Instalar Evolution API en Docker con Redis y PostgreSQL Local En este tutorial vamos a levantar Evolution API usando Docker , con soporte de Redis para sesiones y PostgreSQL local para almacenar datos de manera persistente y compartida entre varios usuarios. 1. Estructura del proyecto Crea una carpeta para tu proyecto y colócate en ella: mkdir -p ~/docker/evolution-api cd ~/docker/evolution-api 2. Archivo docker-compose.yml Este compose levanta Redis y Evolution API : version: "3.9" services: # ✅ SERVICIO REDIS redis: container_name: evolution_redis image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --save 60 1 --loglevel warning # ✅ SERVICIO EVOLUTION API evolution-api: container_name: evolution_api image: atendai/evolution-api restart: unless-stopped ports: - "8085:8080" env_file: - .env ...

Instalar Jasper Studio 6.21 para Ubuntu 24.04

Instalar js-studiocomm_6.21.3 en Ubuntu 24.4 Para instalar Jaspersoft Studio en Ubuntu 24.4, sigue estos pasos: 1. Descargar Jasper Studio Descarga la versión js-studiocomm_6.21.3 desde el siguiente enlace: Jaspersoft Studio 6.21.3 2. Crear el directorio de instalación mkdir /opt/jasperstudio 3. Mover el archivo descargado mv /dir_descarga/js-studiocomm_6.21.3_linux_x86_64.tgz /opt/jasperstudio/ cd /opt/jasperstudio 4. Extraer el archivo tar -xvzf js-studiocomm_6.21.3_linux_x86_64.tgz cd js-studiocomm_6.21.3 5. Ejecutar Jaspersoft Studio ./Jaspersoft\ Studio 6. Crear acceso directo en el escritorio Para facilitar el acceso, crea un archivo .desktop en el escritorio: gedit ~/Escritorio/jaspersoft-studio.desktop En el archivo jaspersoft-studio.desktop , agrega lo siguiente: [Desktop Entry] Version=1.0 Ty...