2FA, SSO y Hardening
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
- Inicia sesion en Dokploy
- Ve a Profile (icono de usuario en la esquina superior)
- Busca la seccion Two-Factor Authentication
- Haz clic en Enable 2FA
- Escanea el codigo QR con tu aplicacion de autenticacion
Aplicaciones recomendadas:
- Aegis (Android, open source)
- 2FAS (iOS/Android, open source)
- Bitwarden Authenticator (multiplataforma)
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
- Google Workspace
- Azure AD / Entra ID
- Okta
- Keycloak
- Auth0
- Cualquier IdP compatible con SAML 2.0
Configurar SAML en Dokploy
- Ve a Settings > Authentication
- Selecciona SAML Configuration
- 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:
- Ve a Apps > Web and mobile apps > Add custom SAML app
- Descarga los metadatos del IdP (XML)
- 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
- Mapea los atributos:
Google attribute -> App attribute
Primary email -> email
First name -> firstName
Last name -> lastName
- 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):
- 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
- En la pestana Keys, desactiva Client Signature Required
- Copia la URL de metadatos:
https://keycloak.tu-dominio.com/realms/master/protocol/saml/descriptor - 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:
- Agrega el dominio del panel a Cloudflare
- Crea una politica de Access que requiera autenticacion
- Solo usuarios autenticados en Cloudflare pueden llegar al panel
Tailscale:
- Instala Tailscale en el servidor
- Accede al panel via la IP de Tailscale (100.x.x.x)
- 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):
- Asigna un dominio al panel en Settings > Server > Domain
- Dokploy configura automaticamente el certificado SSL via Let’s Encrypt
- 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
- Ve a Settings > Server
- Si hay una actualizacion disponible, aparece un boton Update
- Haz clic y espera a que el proceso termine
- El panel se reinicia automaticamente
Actualizar desde la terminal
cd /etc/dokploy
docker compose pull
docker compose up -d
Antes de actualizar
- Verifica las notas de la version en github.com/Dokploy/dokploy/releases
- 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
- 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 —>