Vaultwarden: Tu Servidor de Contraseñas Autoalojado y Seguro 2025
¿Cansado de no recordar la clave del WiFi, de compartir contraseñas por Telegram o de depender de servicios en la nube que pueden cambiar sus normas cuando menos te lo esperas? Con Vaultwarden (la versión ligera y open source de Bitwarden) puedes tener tu propio servidor de contraseñas en casa, accesible desde el móvil y el navegador, con backups automáticos y control total.
En esta guía aprenderás:
- Qué es Vaultwarden y diferencias con Bitwarden oficial
- Instalación con Docker Compose (3 métodos)
- Configuración del panel de admin
- Acceso desde móvil, navegador y escritorio
- Backups automáticos y restauración
- Seguridad avanzada (2FA, HTTPS, fail2ban)
- Migración desde LastPass/1Password/Bitwarden Cloud
🤔 ¿Qué es Vaultwarden?
Vaultwarden es una reimplementación open-source del servidor de Bitwarden escrita en Rust, diseñada específicamente para ser ultraligera y perfecta para autoalojar en casa.
Diferencias clave con Bitwarden oficial:
| Característica | Vaultwarden | Bitwarden Oficial (self-hosted) |
|---|---|---|
| Contenedores Docker | 1 contenedor | 11 contenedores |
| RAM mínima | 50 MB (idle) | 2 GB+ |
| Tiempo instalación | 5 minutos | 30-60 minutos |
| Features Premium gratis | ✅ Todas (organizaciones, TOTP, archivos adjuntos) | ❌ Requieren licencia de pago |
| Hardware requerido | Raspberry Pi 3+ / VPS $5 | Servidor potente / VPS $20+ |
| Database | SQLite (default) o PostgreSQL | PostgreSQL/MySQL obligatorio |
| Soporte oficial | Comunidad | Empresa Bitwarden |
| Auditorías seguridad | No (código open source revisable) | Sí (auditorías de terceros) |
¿Vaultwarden es compatible con apps de Bitwarden? SÍ, 100%. Usas las apps oficiales de Bitwarden (móvil, navegador, escritorio) pero apuntando a tu servidor Vaultwarden.
📋 Requisitos Previos
Hardware mínimo:
- Raspberry Pi 3 o superior (512 MB RAM suficiente)
- NAS Synology/QNAP
- VPS básico ($5/mes: Hetzner, DigitalOcean, Contabo)
- PC viejo reconvertido en servidor casero
Software:
- Docker y Docker Compose instalados
- Dominio propio o DynDNS (opcional, solo para acceso externo)
- Certificado SSL: Let’s Encrypt, Cloudflare Tunnel, o self-signed
⚠️ Importante: Vaultwarden requiere HTTPS obligatorio para usar Web Crypto API (excepto en http://localhost). Sin HTTPS, las apps no funcionarán.
🚀 Método 1: Instalación Básica (Solo Local)
Perfecto para probar o usar solo en tu red local.
Paso 1: Crear carpeta y docker-compose.yml
mkdir ~/vaultwarden && cd ~/vaultwarden
nano docker-compose.yml
docker-compose.yml básico:
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
# Deshabilitar registro público (CRÍTICO)
SIGNUPS_ALLOWED: 'false'
# Token admin (genera uno único: openssl rand -base64 48)
ADMIN_TOKEN: 'TU_TOKEN_UNICO_AQUI'
# Domain (solo si tienes dominio)
# DOMAIN: 'https://vault.tudominio.com'
volumes:
- ./vw-data:/data
ports:
- "8800:80"
Paso 2: Generar token admin único
openssl rand -base64 48
Copia el resultado y pégalo en ADMIN_TOKEN del docker-compose.yml
Paso 3: Arrancar Vaultwarden
docker compose up -d
docker compose logs -f
Espera a ver: "Rocket has launched from http://0.0.0.0:80"
Paso 4: Acceder y crear tu cuenta
1. Abre navegador: http://TU_IP_LOCAL:8800
2. Haz clic en «Create account»
3. Email + contraseña maestra (APÚNTALA EN PAPEL, es irrecuperable)
4. ¡Primera cuenta creada! (Ahora nadie más puede registrarse porque SIGNUPS_ALLOWED=false)
Paso 5: Acceder al panel de admin
1. Ve a: http://TU_IP_LOCAL:8800/admin
2. Pega el token admin que generaste
3. Configura: desactivar registros, habilitar invitaciones solo por admin, configurar SMTP (opcional)
🔒 Método 2: Instalación con HTTPS (Caddy Reverse Proxy)
Para producción o acceso desde internet. Caddy obtiene certificados Let’s Encrypt automáticamente.
docker-compose.yml completo:
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
DOMAIN: 'https://vault.tudominio.com'
SIGNUPS_ALLOWED: 'false'
ADMIN_TOKEN: 'TU_TOKEN_UNICO'
WEBSOCKET_ENABLED: 'true'
SMTP_HOST: 'smtp.gmail.com'
SMTP_FROM: 'tu@email.com'
SMTP_PORT: '587'
SMTP_SECURITY: 'starttls'
SMTP_USERNAME: 'tu@email.com'
SMTP_PASSWORD: 'tu_password_smtp'
volumes:
- ./vw-data:/data
networks:
- vaultwarden
caddy:
image: caddy:latest
container_name: caddy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
- ./caddy-config:/config
networks:
- vaultwarden
networks:
vaultwarden:
driver: bridge
Caddyfile:
vault.tudominio.com {
reverse_proxy vaultwarden:80 {
header_up X-Real-IP {remote_host}
}
}
Configurar DNS:
En tu proveedor DNS (Cloudflare, Namecheap, etc), crea registro A:
vault.tudominio.com → TU_IP_PUBLICA
Arrancar:
docker compose up -d
Caddy obtiene certificado SSL automáticamente. Accede vía: https://vault.tudominio.com
🗄️ Método 3: Instalación con PostgreSQL (Producción)
Para equipos, empresas, o si quieres máxima performance y backups avanzados.
version: '3.8'
services:
db:
image: postgres:16-alpine
container_name: vaultwarden_db
restart: always
environment:
POSTGRES_USER: vaultwarden
POSTGRES_PASSWORD: password_seguro_aqui
POSTGRES_DB: vaultwarden
volumes:
- ./db-data:/var/lib/postgresql/data
networks:
- vaultwarden
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
depends_on:
- db
environment:
DATABASE_URL: 'postgresql://vaultwarden:password_seguro_aqui@db:5432/vaultwarden'
DOMAIN: 'https://vault.tudominio.com'
SIGNUPS_ALLOWED: 'false'
ADMIN_TOKEN: 'TU_TOKEN_UNICO'
WEBSOCKET_ENABLED: 'true'
volumes:
- ./vw-data:/data
networks:
- vaultwarden
ports:
- "8800:80"
networks:
vaultwarden:
driver: bridge
Ventajas PostgreSQL vs SQLite:
- ✅ Mejor performance con 100+ usuarios concurrentes
- ✅ Backups online sin parar el servicio (pg_dump)
- ✅ Replicación y alta disponibilidad
- ❌ Más complejo de configurar
- ❌ Consume más RAM (100-200 MB adicionales)
Para equipos pequeños (1-10 usuarios): SQLite es suficiente. PostgreSQL solo si tienes necesidades avanzadas.
📱 Acceso desde Móvil, Navegador y Escritorio
Móvil (iOS/Android)
1. Descarga app oficial: Bitwarden (App Store / Google Play)
2. Abre app → Botón ⚙️ arriba izquierda
3. Server URL → Introduce tu URL:
http://192.168.1.100:8800 (red local)
https://vault.tudominio.com (internet)
4. Login con tu email + contraseña maestra
5. ¡Listo! Sincronización automática
⚠️ iOS: Si usas solo red local, ve a Ajustes → Bitwarden → Red Local → Permitir
Navegador (Extensión)
1. Instala extensión: Bitwarden Extension (Chrome, Firefox, Edge, Safari)
2. Haz clic en icono Bitwarden → ⚙️ Settings
3. Self-hosted → Introduce tu URL
4. Login
5. Autocompletar contraseñas funciona automáticamente
Escritorio (Windows/Mac/Linux)
1. Descarga: Bitwarden Desktop
2. Settings → Self-hosted → URL
3. Login
💾 Backups Automáticos: 3 Estrategias
Estrategia 1: Backup Manual Simple
Tus datos están en la carpeta vw-data/. Copia esa carpeta = backup completo.
# Parar Vaultwarden
docker stop vaultwarden
# Crear backup
tar -czvf vaultwarden-backup-$(date +%F).tar.gz vw-data/
# Reiniciar
docker start vaultwarden
# Subir a tu sitio seguro (USB, NAS, Nextcloud, etc)
Estrategia 2: Backup Automático con Script + Cron
Crear script: ~/vaultwarden/backup.sh
#!/bin/bash
BACKUP_DIR="/home/user/backups/vaultwarden"
VW_DIR="/home/user/vaultwarden"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
# Crear carpeta backups
mkdir -p "$BACKUP_DIR"
# Parar contenedor
docker stop vaultwarden
# Backup de data + docker-compose.yml
tar -czf "$BACKUP_DIR/vaultwarden-$DATE.tar.gz" \
-C "$VW_DIR" vw-data docker-compose.yml
# Reiniciar contenedor
docker start vaultwarden
# Borrar backups antiguos (más de 30 días)
find "$BACKUP_DIR" -name "vaultwarden-*.tar.gz" -mtime +30 -delete
echo "Backup completado: vaultwarden-$DATE.tar.gz"
Dar permisos:
chmod +x ~/vaultwarden/backup.sh
Programar backup diario a las 3am:
crontab -e
# Añadir línea:
0 3 * * * /home/user/vaultwarden/backup.sh >> /home/user/vaultwarden/backup.log 2>&1
Estrategia 3: Backup Online con PostgreSQL (Sin Downtime)
Si usas PostgreSQL, puedes hacer backup SIN parar el servicio:
#!/bin/bash
BACKUP_DIR="/home/user/backups/vaultwarden"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p "$BACKUP_DIR"
# Backup PostgreSQL (sin parar contenedor)
docker exec vaultwarden_db pg_dump -U vaultwarden vaultwarden | \
gzip > "$BACKUP_DIR/vaultwarden-db-$DATE.sql.gz"
# Backup archivos adjuntos
tar -czf "$BACKUP_DIR/vaultwarden-files-$DATE.tar.gz" \
-C /home/user/vaultwarden vw-data/attachments vw-data/sends
# Limpiar antiguos
find "$BACKUP_DIR" -name "vaultwarden-*" -mtime +30 -delete
echo "Backup sin downtime completado"
Restaurar desde Backup
# Parar Vaultwarden
docker compose down
# Restaurar archivos
tar -xzf vaultwarden-backup-2025-11-01.tar.gz
# Reiniciar
docker compose up -d
⚠️ Probar restauración: Cada 3-6 meses, restaura un backup en otra máquina para verificar que funciona. Los backups que nunca pruebas = no existen.
🔐 Seguridad Avanzada
1. Habilitar 2FA (Autenticación Dos Factores)
1. Login web → Settings → Two-step Login
2. Opciones disponibles (GRATIS en Vaultwarden):
- Authenticator App: Google Authenticator, Authy (recomendado)
- Email: Código por email (requiere SMTP configurado)
- YubiKey: Llave física USB/NFC
- FIDO2: Passkeys (iPhone Face ID, Windows Hello)
- Duo: Push notifications
3. Recovery codes: GUÁRDALOS EN PAPEL. Si pierdes 2FA, son tu única salvación.
2. Fail2ban: Bloquear Ataques de Fuerza Bruta
Si tu Vaultwarden está expuesto a internet, instala fail2ban para bloquear IPs que intenten contraseñas incorrectas múltiples veces.
Crear filtro: /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =
Crear jail: /etc/fail2ban/jail.d/vaultwarden.conf
[vaultwarden]
enabled = true
port = 80,443
filter = vaultwarden
action = iptables-allports[name=vaultwarden]
logpath = /home/user/vaultwarden/vw-data/vaultwarden.log
maxretry = 3
bantime = 86400
findtime = 3600
Reiniciar fail2ban:
sudo systemctl restart fail2ban
sudo fail2ban-client status vaultwarden
3. HTTPS Obligatorio (Producción)
Opciones:
- Caddy: Certificados Let’s Encrypt automáticos (visto arriba)
- Cloudflare Tunnel: Sin abrir puertos, gratis, fácil
- Nginx Proxy Manager: UI gráfica para certificados
- Tailscale: VPN privada, sin exponer a internet
4. Deshabilitar Registros Públicos
CRÍTICO: SIGNUPS_ALLOWED: 'false' en docker-compose.yml
Para invitar usuarios (familia, equipo):
1. Panel admin: http://tu-vaultwarden:8800/admin
2. Invite User → Email del usuario
3. Usuario recibe email con link de registro único
5. Contraseña Maestra Fuerte
Usa generador de passphrases:
Ejemplo: "Caballo-Azul-Montaña-82-Fuego"
(5 palabras aleatorias + números = 90 bits entropía)
NO uses: Vaultwarden2025! (débil, diccionario)
SÍ usa: Trueno-Gato-87-Reloj-Fuego (fuerte, memorable)
🔄 Migrar desde Otros Gestores
Desde LastPass
1. LastPass: More Options → Advanced → Export → Download CSV
2. Vaultwarden web: Settings → Import Data → LastPass (csv)
3. Upload CSV → Import
4. Borrar CSV del disco (seguridad)
Desde 1Password
1. 1Password: File → Export → All Items → 1Password Interchange Format (.1pif)
2. Vaultwarden: Settings → Import Data → 1Password (1pif)
3. Upload → Import
Desde Bitwarden Cloud
1. Bitwarden Cloud: Tools → Export Vault → JSON format
2. Vaultwarden: Settings → Import Data → Bitwarden (json)
3. Upload → Import
4. Verificar que todo importó correctamente
5. Cancelar suscripción Bitwarden Cloud (ahora eres libre)
🔧 Troubleshooting: Problemas Comunes
Error: «Vault is locked»
Causa: Sesión expirada
Solución: Re-login con contraseña maestra
Error: «Could not connect to server»
Causas posibles:
- URL incorrecta (http vs https, puerto incorrecto)
- Vaultwarden no arrancó:
docker compose logs -f - Firewall bloqueando puerto 8800
App móvil no conecta en red local
iOS: Ajustes → App Bitwarden → Red Local → Permitir
Android: Verificar que IP local es accesible desde navegador móvil primero
Olvidé contraseña maestra
Solución: NO hay recuperación. Por eso existen los backups.
Prevención: Apunta contraseña maestra en papel guardado en sitio seguro físico
Consumo RAM alto
Vaultwarden usa ~50 MB idle, ~100-150 MB con actividad.
Si ves 500+ MB: problema con logs. Limpiar logs:
docker exec vaultwarden sh -c "echo '' > /data/vaultwarden.log"
📊 Comparativa: Vaultwarden vs Alternativas
| Gestor | Open Source | Self-Hosted | RAM | Setup | Apps | Gratuito |
|---|---|---|---|---|---|---|
| Vaultwarden | ✅ | ✅ | 50 MB | 5 min | ✅ Oficiales Bitwarden | ✅ Todo gratis |
| Bitwarden Official | ✅ | ✅ | 2 GB+ | 60 min | ✅ | ⚠️ Premium requiere pago |
| KeePass | ✅ | ✅ Archivo local | 30 MB | 2 min | ❌ Apps terceros | ✅ |
| LastPass | ❌ | ❌ | N/A | N/A | ✅ | ⚠️ Limitado gratis |
| 1Password | ❌ | ❌ | N/A | N/A | ✅ | ❌ $2.99+/mes |
| Passbolt | ✅ | ✅ | 300 MB | 30 min | ⚠️ Básicas | ✅ Community |
Vaultwarden gana en: Ligereza, facilidad setup, features gratis, compatibilidad apps oficiales Bitwarden.
🎯 Casos de Uso Reales
Caso 1: Familia (4 personas)
Setup: Raspberry Pi 4 (4 GB RAM) + Vaultwarden en red local + Tailscale para acceso remoto
Resultado: $0/mes, contraseñas compartidas vía Organizations, cada uno con su bóveda personal
Caso 2: Pequeña Empresa (15 empleados)
Setup: VPS Hetzner €5/mes + Vaultwarden + PostgreSQL + Caddy HTTPS + fail2ban
Resultado: Contraseñas corporativas compartidas por departamento (Collections), 2FA obligatorio, backups diarios a S3
Caso 3: Usuario Solo (Ultra-Paranoico)
Setup: Vaultwarden en Raspberry Pi sin internet + acceso solo vía cable ethernet local
Resultado: Máxima seguridad (air-gapped), sincronización manual exportando/importando JSON
🔗 Recursos Adicionales
- Vaultwarden en GitHub – Código fuente oficial
- Vaultwarden Wiki – Documentación completa
- Vaultwarden Forum – Comunidad y soporte
❓ Preguntas Frecuentes
¿Vaultwarden es legal? ¿Bitwarden oficial lo permite?
Sí, es 100% legal. Vaultwarden es una reimplementación independiente compatible con el protocolo Bitwarden (que es open source). No viola ninguna licencia ni patente. Bitwarden oficial lo conoce y no tiene problema, aunque no lo soportan oficialmente.
¿Qué pasa si olvido mi contraseña maestra?
NO hay recuperación posible. La contraseña maestra es la clave de cifrado de todos tus datos. Ni siquiera el administrador del servidor puede recuperarla. Por eso es crítico: 1) Usar contraseña memorable pero fuerte, 2) Apuntarla en papel en sitio seguro físico, 3) Tener backups regulares.
¿Puedo usar Vaultwarden sin internet?
Sí, perfectamente. Las apps de Bitwarden cachean tu bóveda localmente. Puedes acceder a tus contraseñas offline. Solo necesitas conexión para sincronizar cambios entre dispositivos. Si montas Vaultwarden en tu red local, funciona sin internet exterior.
¿Cómo actualizar Vaultwarden a nueva versión?
Super fácil con Docker:
cd ~/vaultwarden
docker compose pull
docker compose down
docker compose up -d
Esto descarga la imagen más reciente y reinicia el contenedor. Tus datos persisten en el volumen vw-data/. Recomendado: hacer backup antes de actualizar.
¿Vaultwarden es más seguro que Bitwarden Cloud?
Depende. Ventajas Vaultwarden: Control total, tus datos nunca salen de tu servidor, no dependes de empresa tercera. Ventajas Bitwarden Cloud: Auditorías de seguridad profesionales, equipo dedicado, infraestructura redundante. Para máxima seguridad: Vaultwarden en servidor propio con buenas prácticas (HTTPS, 2FA, backups, fail2ban).
¿Puedo tener múltiples usuarios/familia en Vaultwarden?
Sí, gratis e ilimitado. Cada persona tiene su cuenta con email+contraseña maestra propia. Puedes crear Organizations para compartir contraseñas (ej: WiFi familiar, Netflix, cuentas bancarias compartidas) usando Collections. En Bitwarden oficial esto requiere plan de pago, en Vaultwarden es gratis.
¿Qué pasa con mis contraseñas si mi servidor Vaultwarden se rompe?
Si tienes backups: restauras en otro servidor en minutos y sigues. Si NO tienes backups: pierdes todo acceso permanente (por eso backups automáticos son críticos). Las apps móvil/navegador tienen caché local de tus contraseñas, así que puedes ver (pero no editar) temporalmente mientras restauras servidor.
¿Vaultwarden soporta autofill (autocompletar) en navegador y móvil?
Sí, 100%. Usa las apps oficiales de Bitwarden que tienen autofill nativo para iOS, Android, Chrome, Firefox, Edge, Safari. Funciona igual que Bitwarden Cloud. El navegador detecta campos de login/password y ofrece autocompletar desde tu Vaultwarden.
¿Puedo migrar de Vaultwarden de vuelta a Bitwarden Cloud?
Sí, fácil. Exportas tus datos desde Vaultwarden (Settings → Export Vault → JSON), luego importas ese JSON en Bitwarden Cloud. Migración inversa también funciona. No hay lock-in, puedes cambiar cuando quieras.
¿Necesito dominio propio para usar Vaultwarden?
No obligatorio. Opciones: 1) Red local solo: http://192.168.x.x:8800 (sin dominio, sin internet), 2) DynDNS gratis: noip.com, duckdns.org, 3) Cloudflare Tunnel: sin abrir puertos, sin dominio propio necesario, 4) Dominio propio: mejor para producción/empresa (~$10/año).
¿Vaultwarden consume muchos recursos en Raspberry Pi?
No, es ultraligero. Raspberry Pi 3+ (1 GB RAM) es suficiente. Vaultwarden idle usa ~50 MB RAM. Con 5-10 usuarios activos: ~100-150 MB. CPU casi 0% en idle, picos de 5-10% durante sync. Raspberry Pi 4 (2-4 GB) es ideal para familia o pequeña empresa (hasta 20-30 usuarios).
¿Cómo habilitar SMTP para notificaciones por email?
En docker-compose.yml añade variables de entorno:
SMTP_HOST: 'smtp.gmail.com'
SMTP_FROM: 'tu@email.com'
SMTP_PORT: '587'
SMTP_SECURITY: 'starttls'
SMTP_USERNAME: 'tu@email.com'
SMTP_PASSWORD: 'tu_app_password'
Gmail requiere «App Password» (no tu contraseña normal). Otras opciones: SendGrid, Mailgun, SMTP de tu hosting. Esto habilita: verificación email, invitaciones usuarios, 2FA por email, notificaciones seguridad.
💡 Conclusión
Vaultwarden es la mejor opción para autoalojar tu gestor de contraseñas: ligero, gratis, compatible con apps oficiales Bitwarden, y todas las features premium sin pagar.
Recomendación según caso:
- 🏠 Usuario solo/familia pequeña: Raspberry Pi + Vaultwarden local + Tailscale para acceso remoto
- 🏢 Pequeña empresa (5-20 personas): VPS €5/mes + PostgreSQL + Caddy HTTPS + fail2ban
- 🔒 Ultra-paranoico: Vaultwarden en servidor sin internet (air-gapped) + sincronización manual JSON
- ⚡ Solo quiero probar rápido: Docker básico en PC + acceso local
http://localhost:8800
Próximos pasos:
- Montar Vaultwarden con método 1 (básico) para probar
- Migrar tus contraseñas actuales (LastPass/1Password/Chrome)
- Configurar apps en móvil + navegador + escritorio
- Setup backup automático (script + cron)
- Habilitar 2FA en tu cuenta
- Si funciona bien → migrar a método 2 (HTTPS producción)
¿Ya tienes tu Vaultwarden funcionando? Comparte tu experiencia en los comentarios.
