2FA, SSO y Hardening

Por: Artiko
dokploy2fassoseguridadhardening

2FA, SSO y Hardening

Un panel de administracion expuesto a internet sin proteccion adicional es un riesgo. Este capitulo cubre las medidas de seguridad que Dokploy ofrece para proteger el acceso al panel.

Activar autenticacion de dos factores (2FA/OTP)

La autenticacion de dos factores agrega una capa extra de seguridad. Aunque alguien obtenga tu contrasena, necesitara el codigo temporal de tu dispositivo para acceder.

Configurar 2FA

  1. Inicia sesion en Dokploy
  2. Ve a Profile (icono de usuario en la esquina superior)
  3. Busca la seccion Two-Factor Authentication
  4. Haz clic en Enable 2FA
  5. Escanea el codigo QR con tu aplicacion de autenticacion

Aplicaciones recomendadas:

Verificar activacion

Despues de escanear el QR, la aplicacion genera codigos de 6 digitos que cambian cada 30 segundos:

Codigo actual: 847 291
Tiempo restante: 18s

Ingresa el codigo actual en Dokploy para confirmar la activacion.

Codigos de respaldo

Al activar 2FA, Dokploy genera codigos de respaldo. Guardalos en un lugar seguro:

Codigos de respaldo:
  a1b2c3d4
  e5f6g7h8
  i9j0k1l2
  m3n4o5p6
  q7r8s9t0

Cada codigo es de un solo uso. Si pierdes acceso a tu app de autenticacion, estos codigos te permiten entrar al panel.

Recomendacion

Activa 2FA para todos los usuarios con rol Admin. Es la medida de seguridad con mejor relacion costo-beneficio.

Configurar SSO con SAML

Para organizaciones que usan un proveedor de identidad centralizado (IdP), Dokploy soporta SSO via SAML.

Proveedores compatibles

Configurar SAML en Dokploy

  1. Ve a Settings > Authentication
  2. Selecciona SAML Configuration
  3. Completa los campos:
Entity ID: https://tu-dokploy.com/api/auth/saml/metadata
ACS URL: https://tu-dokploy.com/api/auth/saml/callback
IdP Metadata URL: https://tu-idp.com/saml/metadata

Ejemplo con Google Workspace

En la consola de administracion de Google Workspace:

  1. Ve a Apps > Web and mobile apps > Add custom SAML app
  2. Descarga los metadatos del IdP (XML)
  3. Configura los campos:
ACS URL: https://tu-dokploy.com/api/auth/saml/callback
Entity ID: https://tu-dokploy.com/api/auth/saml/metadata
Name ID format: EMAIL
  1. Mapea los atributos:
Google attribute    -> App attribute
Primary email       -> email
First name          -> firstName
Last name           -> lastName
  1. En Dokploy, pega la URL de metadatos del IdP o sube el XML descargado.

Ejemplo con Keycloak

Si usas Keycloak como IdP (puedes desplegarlo en el propio Dokploy):

  1. Crea un nuevo Client en Keycloak:
Client ID: dokploy
Client Protocol: saml
Root URL: https://tu-dokploy.com
Valid Redirect URIs: https://tu-dokploy.com/api/auth/saml/callback
  1. En la pestana Keys, desactiva Client Signature Required
  2. Copia la URL de metadatos: https://keycloak.tu-dominio.com/realms/master/protocol/saml/descriptor
  3. Pegala en Dokploy en el campo IdP Metadata URL

Trusted origins SSO (v0.27+)

A partir de la version 0.27, Dokploy agrega la configuracion de Trusted Origins para SSO. Esto evita ataques de redireccion maliciosa durante el flujo de autenticacion.

Configurar trusted origins

En Settings > Authentication > Trusted Origins, agrega los dominios permitidos:

https://tu-dokploy.com
https://auth.tu-dominio.com

Solo las redirecciones que vengan de estos origenes seran aceptadas. Cualquier intento de redirigir a un dominio no listado sera bloqueado.

Por que importa

Sin trusted origins, un atacante podria crear un enlace de SSO que redirige a un sitio malicioso despues de la autenticacion, capturando el token de sesion.

Hardening del panel

Cambiar el puerto por defecto

Dokploy corre por defecto en el puerto 3000. Cambiarlo reduce escaneos automatizados:

# En el servidor, edita el docker-compose de Dokploy
sudo nano /etc/dokploy/docker-compose.yml

Modifica el mapeo de puertos:

services:
  dokploy:
    ports:
      - "9443:3000"  # Cambia 3000 por otro puerto

Reinicia Dokploy:

cd /etc/dokploy
docker compose up -d

Recuerda actualizar las reglas de firewall:

sudo ufw allow 9443/tcp
sudo ufw deny 3000/tcp

Restringir acceso por IP

Si tu equipo tiene IPs fijas o usas VPN, restringe el acceso al panel:

# Solo permitir acceso desde tu IP o rango
sudo ufw allow from 203.0.113.50 to any port 3000
sudo ufw allow from 10.0.0.0/24 to any port 3000
sudo ufw deny 3000

Con iptables:

# Permitir solo desde IP especifica
sudo iptables -A INPUT -p tcp --dport 3000 -s 203.0.113.50 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3000 -j DROP

Usar Cloudflare Access o Tailscale

Para una solucion mas robusta, coloca el panel detras de un tunel:

Cloudflare Access:

  1. Agrega el dominio del panel a Cloudflare
  2. Crea una politica de Access que requiera autenticacion
  3. Solo usuarios autenticados en Cloudflare pueden llegar al panel

Tailscale:

  1. Instala Tailscale en el servidor
  2. Accede al panel via la IP de Tailscale (100.x.x.x)
  3. El panel nunca se expone a internet publico

Configurar HTTPS obligatorio

Asegurate de que el panel solo sea accesible via HTTPS. Si usas un dominio con Traefik (ya integrado en Dokploy):

  1. Asigna un dominio al panel en Settings > Server > Domain
  2. Dokploy configura automaticamente el certificado SSL via Let’s Encrypt
  3. El trafico HTTP se redirige a HTTPS

Actualizar Dokploy de forma segura

Mantener Dokploy actualizado es critico para parches de seguridad.

Actualizar desde el panel

  1. Ve a Settings > Server
  2. Si hay una actualizacion disponible, aparece un boton Update
  3. Haz clic y espera a que el proceso termine
  4. El panel se reinicia automaticamente

Actualizar desde la terminal

cd /etc/dokploy
docker compose pull
docker compose up -d

Antes de actualizar

  1. Verifica las notas de la version en github.com/Dokploy/dokploy/releases
  2. Haz backup de la configuracion:
# Backup de la base de datos de Dokploy
cp /etc/dokploy/dokploy-database.db /etc/dokploy/dokploy-database.db.bak
  1. Si la actualizacion incluye cambios breaking, planifica una ventana de mantenimiento

Checklist de seguridad para produccion

Verifica cada punto antes de considerar tu instancia lista para produccion:

[ ] 2FA activado para todas las cuentas Admin
[ ] Contrasenas de minimo 16 caracteres
[ ] Panel accesible solo via HTTPS
[ ] Puerto por defecto cambiado o acceso restringido por IP
[ ] Firewall configurado (solo puertos necesarios abiertos)
[ ] SSH con llave publica (contrasena deshabilitada)
[ ] Dokploy actualizado a la ultima version estable
[ ] Backups automaticos configurados
[ ] Usuarios con roles minimos necesarios
[ ] Cuentas de ex-miembros eliminadas
[ ] Variables de entorno sin secretos hardcodeados
[ ] Logs de acceso monitoreados
[ ] SSO configurado si hay mas de 5 usuarios
[ ] Trusted origins configurados si usas SSO
[ ] Actualizaciones automaticas del SO habilitadas

Anterior: Capitulo 17: Roles y Permisos | Siguiente: Capitulo 19: Monitoring —>