Vaultwarden: Servidor Bitwarden compatible escrito en Rust

Publicado por


vaultwarden
Autohospedaje

Vaultwarden: Servidor Bitwarden compatible escrito en Rust

Implementación ligera y no oficial del API de Bitwarden para autohospedaje

Vídeo tutorial en YouTube

Mira el vídeo completo sobre cómo instalar y usar Vaultwarden: Servidor Bitwarden compatible escrito en Rust en el canal GENBYTE:

¿Qué es Vaultwarden: Servidor Bitwarden compatible escrito en Rust?

Vaultwarden es una implementación alternativa del servidor de la API de cliente de Bitwarden, escrita en Rust. Es compatible con los clientes oficiales de Bitwarden (móvil, escritorio, navegador) y está diseñada para despliegues autohospedados donde ejecutar el servicio oficial, que consume muchos recursos, no sea ideal. El proyecto se conocía anteriormente como bitwarden_rs y fue renombrado para evitar confusiones con el servidor oficial de Bitwarden.

Escrito en Rust, Vaultwarden ofrece una implementación casi completa de la API de Bitwarden con un consumo de recursos muy inferior al servidor oficial, permitiendo autohospedar un gestor de contraseñas compatible con todos los clientes oficiales.

Características principales

Bóveda personal completa

Soporte para elementos, envíos (Send), adjuntos, iconos de sitios web y claves API personales.

Organizaciones y compartición

Incluye colecciones, uso compartido de contraseñas, roles de miembro, grupos, registros de eventos, restablecimiento de contraseña de administrador, conector de directorio y políticas.

Autenticación de dos factores

Compatible con autenticador, correo electrónico, FIDO2 WebAuthn, YubiKey y Duo.

Acceso de emergencia

Permite configurar contactos de confianza para acceso a la bóveda en caso de emergencia.

Panel de administración

Backend de administración de Vaultwarden para gestión de usuarios y configuración del servidor.

Cliente web integrado

Incluye una versión modificada del cliente web oficial (web-vault) empaquetada en los contenedores.

Requisitos del sistema

  • HTTPS obligatorio para el cliente web (requiere contexto seguro para Web Crypto API)
  • Proxy inverso recomendado (Nginx, Traefik, Caddy, etc.)
  • Volumen persistente para almacenar datos (/data en el contenedor)
  • Docker o Podman para ejecución en contenedor
  • Dominio válido con certificado TLS para acceso externo

Instalación con Docker Compose

Docker Compose

Crea un archivo compose.yaml con la configuración del servicio. El ejemplo oficial monta un volumen local para persistencia, expone el puerto 8000 en localhost y define la variable DOMAIN con la URL pública HTTPS.

services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vw.domain.tld"
volumes:
– ./vw-data/:/data/
ports:
– 127.0.0.1:8000:80

Acceder al proyecto

Interfaz web (Web Vault)

Accede a través del dominio configurado en la variable DOMAIN (ej. https://vw.domain.tld). El contenedor expone internamente el puerto 80; en el ejemplo Docker Compose se mapea al puerto 8000 en localhost. Para acceso externo seguro, configura un proxy inverso con terminación TLS.

Clientes oficiales Bitwarden

Configura la URL del servidor en los clientes oficiales (escritorio, móvil, extensión de navegador) apuntando a tu dominio HTTPS. Todos los clientes son compatibles al implementar la API de Bitwarden.

Casos de uso

  • Autohospedaje de gestor de contraseñas para uso personal o familiar
  • Pequeñas organizaciones que requieren compartición segura de credenciales
  • Entornos con recursos limitados donde el servidor oficial de Bitwarden es demasiado pesado
  • Despliegues en servidores propios, VPS, Raspberry Pi o NAS
  • Alternativa privada y controlada a servicios en la nube de terceros

Configuración avanzada

Variables de entorno principales

La variable DOMAIN es obligatoria para generar enlaces correctos y habilitar funciones como WebAuthn. Otras variables permiten configurar base de datos (DATABASE_URL), correo (SMTP_*), registro (SIGNUPS_ALLOWED, INVITATIONS_ALLOWED), logs, iconos, entre otras. Consulta el archivo .env.template y la Wiki para la lista completa.

environment:
DOMAIN: "https://vw.domain.tld"
DATABASE_URL: "sqlite:///data/db.sqlite3"
SIGNUPS_ALLOWED: "true"
INVITATIONS_ALLOWED: "true"
SMTP_HOST: "smtp.example.com"
SMTP_FROM: "[email protected]"
SMTP_PORT: "587"
SMTP_SSL: "true"
SMTP_USERNAME: "user"
SMTP_PASSWORD: "pass"

Bases de datos soportadas

Vaultwarden soporta SQLite (por defecto), MySQL/MariaDB y PostgreSQL. Se selecciona mediante la variable DATABASE_URL o características de compilación. Para producción con alta concurrencia se recomienda PostgreSQL o MySQL.

# SQLite (por defecto)
DATABASE_URL: "sqlite:///data/db.sqlite3"

# PostgreSQL
DATABASE_URL: "postgresql://user:pass@host/dbname"

# MySQL/MariaDB
DATABASE_URL: "mysql://user:pass@host/dbname"

Panel de administración

El panel de administración se habilita mediante la variable ADMIN_TOKEN (hash Argon2 de una contraseña). Permite gestionar usuarios, organizaciones, ver logs y configurar ajustes globales. Genera el hash con `vaultwarden hash` y configúralo en el entorno.

environment:
ADMIN_TOKEN: "$argon2id$v=19$m=65536,t=3,p=4$…"

Gestión y mantenimiento

Actualización de versión

Actualiza la imagen y recrea el contenedor. Con Docker Compose: `docker compose pull && docker compose up -d`. Los datos persisten en el volumen montado. Revisa las notas de versión en GitHub Releases para cambios importantes o migraciones.

docker compose pull
docker compose up -d

Copias de seguridad

Realiza copias periódicas del directorio de datos (/data en el contenedor, ./vw-data en el host). Incluye la base de datos (db.sqlite3 o dump SQL), adjuntos, iconos y configuración. La Wiki recomienda backups regulares y probar restauraciones.

# Ejemplo backup SQLite
cp -r ./vw-data ./vw-data-backup-$(date +%F)

Healthcheck integrado

El contenedor incluye un healthcheck que se ejecuta cada 60 segundos (script /healthcheck.sh). Verifica que el servicio responde correctamente. Docker reiniciará el contenedor si falla (política restart: unless-stopped).

# Comprobar estado de salud
docker inspect –format='{{.State.Health.Status}}' vaultwarden

Stack técnico

  • Rust 1.99
  • Rocket (framework web)
  • Diesel (ORM)
  • SQLite / MySQL / PostgreSQL
  • Docker / Podman / OCI
  • Web Vault (frontend TypeScript/React empaquetado)
  • OpenSSL / Ring (criptografía)

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *