Tutoriales, noticias y soluciones informáticas

Bitwarden vs Vaultwarden: instalación y uso de un gestor de contraseñas en tu propia nube.

Seguridad en un móvil

Hace ya algún tiempo vimos en otro artículo que hoy en día es indispensable contar con un gestor de contraseñas para poder manejarlas de forma correcta. Hemos analizado los riesgos de no tener un gestor de contraseñas y hemos aprendido a usar una opción muy interesante para gestionarlas de forma correcta, mediante un progama llamado «Keepass».

Ahí le has dado. Tengo que reconocer que tenías razón y el programilla va de perlas. La pena es que hay algo que tienen los programas "famosos" como 1Password o LastPass que Keepass no tiene, y es la gestión de las contraseñas en todos los dispositivos. Es un coñazo tener que sincronizar de alguna forma cuando quiero ver las contraseñas en el móvil. 

Efectivamente. Ese es una de las dos funcionalidades que yo le echo en falta a Keepass. La otra gran funcionalidad que le echo en falta es la posibilidad de trabajar varias personas en tiempo real con el mismo grupo de contraseñas. Estas son funcionalidades que este tipo de programas en la nube suelen tener resueltas. Otra funcionalidad muy útil es que muchos de ellos permiten instalar un plugin en el navegador de internet que «captura» las contraseñas según las vas poniendo y las introduce de forma automática en el gestor. Luego, cuando el navegador te pide la contraseña de esa página, el propio plugin te la ofrece sin tener que abrir el gestor de contraseñas para revisarla. Es una forma de trabajar muy muy cómoda.

Así que hoy vamos a ver una alternativa a Keepass que hace todo eso y que nos va a guardar nuestras contraseñas en una nube que…

¿Lo quééééé? Pero si nos has dicho en el otro artículo que intentemos no guardar contraseñas en nubes ajenas, que muchas de estas nubes habían sido hackeadas anteriormente y que no te fiabas de que alguien pudiera estar espiando tus contraseñas. 

Déjame terminar, Usuario Anónimo. Efectivamente no soy muy amigo de usar nubes ajenas para almacenar mis datos. Por eso os voy a proponer un par de soluciones de código abierto que os permitirán crear una nube en algún equipo que tengáis encendido todo el día. Las contraseñas estarán almacenadas en vuestro propio servidor y las tendréis controladas en todo momento.

Seguridad en un pc

Hemos visto en tutoriales anteriores que podemos usar una mísera Rasberry Pi (que es un equipo sencillo con un consumo energético ridículo) para crear una VPN, utilizarla como servidor de descargas, eliminar la publicidad de las páginas por las que navegamos o hacer de servidor multimedia. Podríamos usar ese mismo equipo para crear nuestro gestor de contraseñas en la nube (Sí… hacerle correr con este gestor a la vez que corre el resto de cosas que ya le tenemos instaladas).

O si tiramos por un perfil un poco más profesional, podríamos tener un ordenador o servidor con algún tipo de virtualización (VMWare, Proxmox o similar) y crear una máquina virtual para alojar este gestor de contraseñas.

Incluso podríamos usar algún servicio que nos alquilase una máquina virtual para montar esto, como los de «DigitalOcean«, aunque he de decir que no soy partidario de usar «ordenadores ajenos» para estas cosas. Raro que es uno.

Por tanto vamos a enfocar el tutorial para que siempre podamos seguir siendo los dueños de nuestras propias contraseñas, alojándolas en algún equipo que controlemos e impidiendo el paso a personas ajenas a él a la vez que habilitamos la posibilidad de acceder a ellas a través de internet tanto mediante un plugin en nuestro navegador como con una aplicación de móvil o escritorio. Para ello vamos a aprender a instalar en nuestro servidor tanto Bitwarden como Vaultwarden, que aunque están muy emparentados, la instalación de uno y otro es bastante diferente. Elegir uno u otro os lo dejo a vosotros, aunque tenga bastante clara mi preferencia.

Eso no lo entiendo. Si sabes perfectamente cuál es el mejor entre esos dos ¿No nos lo puedes recomendar y listo? Es que tengo las patatas al fuego y quería ir directo al grano, no sea que se me quemen mientras leo esto.

Podría, pero estos dos sistemas están tremendamente relacionados y supongo que habrá gente que quiera probar ambos sistemas para comparar, así que voy a explicar el origen de ambos, sus diferencias y cómo hacer la instalación de cualquiera de los dos. Vamos al lío.

1.- BitWarden: Ventajas e inconvenientes.

Si entramos en la página de Bitwarden, veremos que lo que nos ofrece a primera vista es un gestor de contraseñas con un servicio que podríamos decir que es muy similar al de LastPass o 1Password. Tiene planes de pago y gratuítos y «aparentemente» almacena las contraseñas en su nube (no estarían en nuestro equipo).

Planes de precios de BitWarden

El desarrollador de este tinglado se llama Kyle Spearrin, y resulta que este hombre no estaba de acuerdo con los cambios que se implementaron en LastPass cuando fue comprada por LogMeIn, así que se puso a desarrollar su propio gestor de contraseñas en la nube que supliera el servicio de LastPass.

En principio, si nos creamos una cuenta normal en la web de Bitwarden, podremos disfrutar de forma gratuita de una cuenta para uso personal con las siguientes características:

  • Precio: Cero euros (está muy bien porque por ejemplo no hay cuentas gratuítas en 1Password), aunque tenemos planes de pago con más funcionalidades.
  • Se pueden almacenar infinitas contraseñas
  • Se puede usar en todos los dispositivos que se quiera (lastpass por ejemplo sólo permite el uso en un dispositivo en cuentas gratuítas).
  • Permite compartir las contraseñas con dos usuarios.
Vaya... pues está muy bien ¿No te parece?

Sí. Como servicio gratuíto hospedado en la nube (sin montarnos nosotros un servidor propio) posiblemente es el mejor que he podido ver. Sin embargo el problema inicial es ese… que aparentemente está hospedado en una nube que no es nuestra.

Sin embargo, oculta en su web, podemos ver una funcionalidad que nos interesa mucho a los que nos gusta autoalojar cosas. Bitwarden tiene una opción para hacer una instalación on-premise de su servidor.

Can you explicar to me this cosa in faquing spanish, porfaplease?

Ya sabes que la moda ahora es decir todo en inglés. Una instalación «on-premise» simplemente es un software que permite ser instalado en tu propio servidor, sin tener que estar en servidores ajenos. En lugar de guardar todos esos datos en la nube de Bitwarden, siguiendo las instrucciones que nos dan podemos montarnos nosotros mismos un servidor de Bitwarden en el que alojar las contraseñas, de forma que no estén en servidores que no controlamos.

Por tanto, instalando este software en una máquina nuestra tendremos algo similar a los servicios que nos dan en la nube, pero almacenando todas las contraseñas en nuestro propio servidor. Tendremos lo mejor de dos mundos.

Ya, pero si se te estropea el servidor pierdes todo ¿no?

Doy por hecho que es labor tuya hacer una copia de seguridad regular de todos los datos del servidor. Incluso si lo tienes virtualizado, programar una copia cada cierto tiempo es algo trivial. Mantener un servidor de «lo que sea» es ya labor de cada uno y no entra en los objetivos de este tutorial indicar cómo mantenerlo. Dependiendo de cómo se instale esto y en qué tipo de máquina, se hará de una forma u otra, así que eso os lo voy a dejar a vosotros.

En todo caso, aunque instalemos el servidor de Bitwarden en un servidor nuestro, tendremos que tener en mente las limitaciones de este sistema. Instalándolo en nuestro servidor podremos usarlo de la misma forma que usamos las cuentas gratuítas que nos ofrece Bitwarden en sus planes, salvo que paguemos algún otro tipo de licencia. Por tanto, a nivel personal seguramente sea más que suficiente, pero si lo que queremos es hacer un montón de cuentas, compartir contraseñas con un montón de gente o usar características avanzadas, tendremos que aflojar la cartera… o instalar VaultWarden. Vamos a conocer un poco este otro sistema.

2.- Vaultwarden: ventajas y… ¿Ventajas?

Como os he dicho, el sistema de Bitwarden tiene una serie de limitaciones en sus versiones gratuitas que, pese a que un usuario normal no tiene por qué notarlas, alguien que haga un uso más intensivo del sistema o una pequeña empresa puede que le resulten molestas y se vean forzados a usar una licencia de pago del sistema (Y ojo, que soy de los que opina que no hay nada de malo en eso. Los desarrolladores de software también comen de vez en cuando).

El tema es que BitWarden es de código abierto, así que ¿por qué no aprovechar el código y hacer un servidor exactamente igual pero con todas las funcionalidades desbloqueadas? Oye… y ya de paso si optimizamos el código para que todo vaya más fluido sería genial. Al fin y al cabo, mientras no se nos ocurra vender el código o sacar provecho económico del mismo no estaríamos incumpliendo las condiciones de la licencia.

Supongo que eso mismo es lo que pensó Daniel García cuando creó Vaultwarden (Antiguamente llamado Bitwarden-rs pero renombrado precisamente para evitar conflictos de patentes con el creador original). Este proyecto hace una implementación alternativa del servidor original de Bitwarden e incluso le ha cambiado el lenguaje en el que está programado. Vaultwarden está escrito en el lenguaje de programación de moda (a la hora de escribir este artículo), que no es otro que Rust. Indicaros que una vez instalado, a la hora de usarlo el interfaz es insultantemente igual que Bitwarden, así que si sabéis cómo funciona uno, vais a saber cómo funciona el otro.

Web Oficial de VaultWarden
La página oficial de Vaultwarden es la de su proyecto en github

Esta implementación promete ser mucho menos consumidora de recursos que la implementación original (y efectivamente lo es) por lo que muchos sistemas NAS aprovecharon para incluirla entre las aplicaciones que pueden ser desplegadas en su entorno. Como referencia, Vaulwarden corriendo en una raspberry consume menos de 150 megas de RAM. Y por supuesto, si optamos por este sistema, aunque lo instalemos en un sistema potente, vamos a tener las mismas funcionalidades que BitWarden pero ocupando menos recursos del sistema, cosa que siempre es de agradecer.

Pero… un momento… ¿Dije las mismas funcionalidades? Pues la verdad es que tendremos muchas más. Si no estábamos dispuestos a aflojar la cartera con Bitwarden, Vaultwarden te va a dar las mismas funcionalidades que la versión más cara de Bitwarden pero sin pagar ni un duro. Absolutamente todo desbloqueado de forma gratuíta y legal. No está mal ¿Verdad?

Por eso no le voy a poner ninguna desventaja a este sistema. Tenemos un entorno exactamente igual que Bitwarden pero con todas las funcionalidades desbloqueadas y corriendo de forma más fluída. La verdad es que no tengo muchas dudas de que esta es la alternativa que recomiendo para cualquier usuario o pequeña empresa.

Pues acabas de ahondar la duda que tenía al principio: si todo es tan chupiguay con Vaultwarden ¿Por qué demonios quieres decirnos cómo instalar los dos sistemas? Céntrate en Vaultwarden, hombre. 

Prefiero que probéis vosotros mismos ambos sistemas. Tal vez alguien prefiera usar el sistema original en lugar del «rediseñado». Yo personalmente he probado los dos y no he visto ninguna diferencia más alla de que en Vaultwarden está todo desbloqueado. Bueno… miento. La gestión de usuarios y preferencias, a pesar de que no me gusta mucho cómo está implementada, es mucho más completa en Vaultwarden (tal vez era porque no tenía una cuenta «premium» del servicio, pero poca cosa pude hacer en Bitwarden en este sentido).

En todo caso los puntos 3 y 4 de este artículo voy a dedicarlos a preparar nuestro sistema operativo para hacer la instalación. La preparación es exactamente igual en cualquiera de los dos sistemas. Luego, si queréis instalar uno u otro, simplemente os toca seguir las instrucciones de la opción deseada (Punto 5 del tutorial para Bitwarden y punto 6 para Vaultwarden). Eso sí: la instalación de uno u otro es excluyente. No intentéis instalar los dos a la vez en la misma máquina que podéis liar una buena.

3.- Requisitos previos antes de instalar nada.

Para simplificar las cosas, cualquiera de los dos sistemas los vamos a instalar en una máquina con estas características:

  • Supongo que lo vamos a instalar en un sistema Debian recién instalado, sin entorno gráfico y completamente «pelado». Lo único que os recomiendo instalar en ese debian en la instalación por defecto es el servicio SSH (para poder conectar con esa máquina a través de Putty u otro terminal). En todo caso esto se podría instalar sin problemas en un Ubuntu o en un Raspbian preparado de la forma que comentamos en este tutorial.
  • No necesitamos grandes requisitos en esa máquina. Para un uso personal, la documentación de Bitwarden indica que nos llegan 10 Gb de disco duro y 2 Gb de ram, aunque monitorizando el consumo de recursos creo que se han columpiado bastante y con 1 Gb de ram me da que el sistema va a ir más que sobrado. Si vamos a instalar Vaultwarden en lugar de Bitwarden, los requisitos son mucho menores en este sentido (toda la instalación consume 150 Mb de ram).
  • Necesitamos que nuestra conexión a internet sea accesible desde internet (no nos sirven conexiones CG-NAT, de esas que tanto ponen últimamente algunas operadoras y que tanto odio).
  • Vamos a necesitar un nombre de dominio que apunte a la ip pública de nuestra conexión a internet (porque queremos hacer accesible este sistema desde fuera de nuestra conexión). Si estás despistado con este tema, te recomiendo leer el punto 2 de este tutorial, que explica exactamente lo que necesitamos. Nos sirve un dominio gratuíto de los que dan en sitios como DNSExit, o si quieres algo más profesional puedes optar por un dominio «de verdad». Repito: léete ese punto si quieres más información sobre este tema.
  • Necesitamos mapear los puertos 80 y 443 a la ip local de la máquina en la que vamos a instalar este sistema. En el punto 4 de este tutorial explico cómo mapear un puerto hacia una ip local. Debéis hacer lo mismo para los dos puertos (el 80 y el 443).
¿Necesito el puerto 80 y el 443? ¡¡No me digas eso!! Esos dos puertos los estoy usando en otro proyecto. ¿Y ahora cómo hago?

Si estás usando ya esos puertos, lo suyo es instalar en alguna máquina virtual o en algún equipo un proxy como el «nginx proxy manager» u otro similar. Yo en algunos de mis proyectos tengo un VirtualMin entre las máquinas virtuales instaladas, así que aprovecho sus opciones para hacer proxys a las máquinas que me interesan. En el panel de control de VirtualMin debería quedar la configuración de forma similar a esto.

Proxy hacia instalación local de vaultwarden
Simplemente hago un proxy a la ip local del equipo en el que está instalado Vaultwarden

Además os indico que haciendo esto tendréis un doble proxy en el sistema, por lo que si alguien quiere atacar vuestra instalación de Bitwarden o Vaultwarden tendrá que pelearse antes con los dos proxys.

No lo entiendo. ¿Y eso por qué?

Pues porque si tienes un proxy funcionando, el sistema que otorga la página web al usuario que accede a ella es el proxy. El proxy coge la página web real del servidor real y se la da al cliente final. En este caso en concreto, el primer proxy coge la página web que le da el segundo proxy y éste la coge a la vez del Vaulwarden.

Si quiero atacar al Vaultwarden, primero debo romper la seguridad del proxy para saber la ip local de la máquina que tiene instalado el Vaultwarden. En el caso (tremendamente improbable) de que lo consigan, el atacante se verá con una segunda barrera, ya que tanto Vaulwarden como Bitwarden funcionan a través de un proxy interno que se configura durante la instalación. Así que tendremos una doble barrera antes de que puedan hacer nada contra nuestro almacén de claves (que aún así, si logran superar los dos proxys, es muy muy seguro).

4.- Preparación de nuestro Debian.

Yo siempre que instalo algo en una máquina con Debian, justo después de instalar el sistema operativo y antes de tocar nada, hago por orden cada uno de estos pasos que os voy a describir aquí. Que conste que todo este apartado es voluntario (excepto el último punto), pero a mi me facilita las cosas a la hora de operar luego con la máquina. Vamos al lío:

Primero instalo «Sudo» (con el comando «apt-get install sudo»). Si queréis podéis seguir este tutorial para no tener que escribir la contraseña contínuamente.

Como la herramienta «ifconfig» me parece tremendamente útil para detectar problemas con la red, la instalo con este comando…

sudo apt-get install net-tools

…y hago que ese comando se pueda usar en cualquier parte del sistema creando un enlace simbólico con este otro comando.

ln -s /sbin/ifconfig /usr/bin/ifconfig

En tercer lugar, reviso que los servidores de DNS están bien configurados con este comando.

sudo nano /etc/resolv.conf

(Eso lo hago porque en alguna instalación he tenido problema a la hora de poner IP fija y no acordarme de cambiar el servidor de DNS del archivo resolv.conf). Simpemente fijaos que el servidor de DNS que se indica en el archivo sea el correcto.

Por último pongo al sistema una ip fija con el comando.

sudo nano /etc/network/interfaces

En ese archivo, al final del todo debe haber algo similar a esto:

iface eth0 inet dhcp

que debo cambiar por esto otro.

iface eth0 inet static
address 192.168.xxx.xxx
network 192.168.xxx.0
netmask 255.255.255.0
broadcast 192.168.xxx.255
gateway 192.168.xxx.1
dns-nameservers 1.1.1.1

Evidentemente hay que poner los parámetros de IP fija que necesite nuestra red local.

Con esto, el sistema queda preparado para empezar la instalación de cualquiera de los dos sistemas. Vamos a ver cómo se instala cada uno de ellos.

5.- Instalación de BitWarden.

Con los pasos previos realizados, pasamos a realizar la instalacion de Bitwarden. Os recuerdo que mi consejo es no hacer este punto y pasar directamente al punto 6 (instalar directamente Vaultwarden). En todo caso si veis alguna ventaja en la instalación de Bitwarden que no tenga Vaultwarden o queréis probar los dos sistemas, primero uno y luego otro (cosa que si tenéis tiempo es altamente aconsejable), después de hacer la instalación de Bitwarden deberéis saltar al punto 7.

5.1.- Instalo Docker

Empecemos. Debemos comenzar por instalar Docker y Docker compose, pero primero vamos a instalar algunas dependencias. Si no las instalamos, luego tendremos problemas durante la instalación de otros programas. Para ello en nuestro terminal escribimos la siguiente línea.

apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

Debemos añadir un nuevo repositorio para instalar docker, pero primero vamos a instalar la clave GPG para que pueda instalarse todo correctamente.

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Con la clave añadida, ahora sí que añado el repositorio de Docker CE.

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list

Ahora actualizo los repositorios para que pueda instalar de este que acabamos de añadir

apt-get update -y

Con todo lo que hemos hecho, por fin podremos instalar sin problemas Docker CE con este comando.

apt-get install docker-ce docker-ce-cli containerd.io -y

No está de más comprobar que estamos haciendo todo bien. Ponemos el siguiente comando para comprobar que hemos instalado Docker correctamente.

docker --version

Y debería salirnos algo similar a esto

Docker version 20.10.17, build 100c701

Así que si compruebo el estado del servicio (demonio) de Docker con el comando «systemctl status docker», debería aparecernos que el servicio está activo.

5.2.- Instalo Docker Compose

Vamos ahora a instalar Docker Compose. Como estamos instalando todo en un Debian «pelado» no vamos a tener instalado en el sistema el comando «wget», por lo que antes de nada vamos a instalarlo (los que estéis haciendo esto en otros sistemas como Raspbian o Ubuntu ya lo tendréis en el sistema). Tecleamos el siguiente comando en el terminal.

sudo apt-get install wget

Ahora hay que descargar la última versión de Docker Compose. Debéis iros a la página del proyecto y ver cuál es la última versión. La página es la siguiente:

https://github.com/docker/compose/releases/

En el momento de hacer este tutorial, la versión es la 2.9.0, pero evidentemente coged la última disponible. Tenéis que descargaros el archivo que termina en «linux-x86_64». El comando os debería quedar algo así.

wget https://github.com/docker/compose/releases/download/v2.9.0/docker-compose-linux-x86_64

Ese archivo que hemos descargado lo vamos a mover a la carpeta /usr/bin

mv docker-compose-linux-x86_64 /usr/bin/docker-compose

Y le vamos a dar los permisos correctos para que funcione correctamente

chmod 755 /usr/bin/docker-compose
5.3.- Me registro en la página de BitWarden

Para que todo funcione correctamente en nuestro servidor, Bitwarden nos pide que nos registremos en su página, así que hay que ir a esta dirección:

https://bitwarden.com/host/

Ahí ponemos nuestro correo electrónico y nos tienen que dar un ID y una llave de instalación. Esos dos datos nos los pedirán cuando hagamos la instalación de Bitwarden, así que guardadlos a buen recaudo.

5.4.- Creo usuarios y carpetas

Vamos a necesitar un usuario específico para hacer funcionar el sistema, así como una serie de carpetas con permisos correctos, así que vamos a crearlos.

Primero creemos un usuario llamado «bitwarden» (ponedle una contraseña segura, no os arriesguéis)

sudo adduser bitwarden

Ahora añado el usuario al grupo «Docker» (Que si hemos seguido los pasos anteriores ya debería estar creado).

sudo usermod -aG docker bitwarden

Ahora creo un directorio llamado «bitwarden» en «OPT».

sudo mkdir /opt/bitwarden

Le doy los permisos correctos

sudo chmod -R 700 /opt/bitwarden

Y asigno el usuario que he creado antes como su propietario

sudo chown -R bitwarden:bitwarden /opt/bitwarden
5.5.- Instalo Bitwarden

Por fin ha llegado la hora de instalar Bitwarden. Primero debemos bajarnos el script de instalación a la carpeta home de nuestro usuario.

curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh && chmod 700 bitwarden.sh

Y luego debemos ejecutarlo con este comando.

./bitwarden.sh install

Me va a pedir una serie de cosas a las que debo responder. Son las siguientes:

  • Debemos darle un nombre de dominio. Pondremos el que os comenté en el punto 3 (Puede ser un dominio normal (un .com, .com.es, .net..) o un dominio de los que podemos conseguir gratis en internet (Como los que da dnsexit).
  • Le decimos que nos genere un certificado con Let’s Encrypt. Si tenemos los puertos bien mapeados y una ip pública, este punto no debería darnos problemas. Si tenemos un proxy que va a apuntar a este equipo, podemos decirle que no genere el certificado, ya que ese certificado debería tenerlo el proxy.
  • Le ponemos un nombre cualquiera a la base de datos (por ejemplo, vault).
  • Le ponemos el installation ID y el Installation Key que conseguimos en el punto 5.3

Una vez que le hemos dado todos estos datos, se va a pasar un rato largo generando claves seguras y terminando la instalación. Sed pacientes.

5.6.- Configuro el correo electrónico para que bitwarden pueda enviarnos correos.

Bitwarden va a necesitar enviarnos de vez en cuando correos. Por ejemplo, para recuperar la contraseña si la perdemos o para avisarnos de que nos hemos logado en un dispositivo nuevo. Pero para que pueda enviarnos correo necesita que le configuremos una cuenta de correo desde la que enviar esas notificaciones.

Por tanto vamos a necesitar una cuenta de correo que nos permita hacer envíos por SMTP (Huid de las cuentas de Gmail como del diablo, que cada vez ponen más trabas para hacer este tipo de cosas).

Una vez que sepamos los parámetros de configuración de la cuenta, sólo deberemos editar un archivo que hay dentro de la carpeta home de nuestro usuario con este comando.

sudo nano ./bwdata/env/global.override.env

Al final de todo de ese archivo debemos añadir las siguientes líneas

globalSettings__mail__replyToEmail=micorreo@miputodominio.com
globalSettings__mail__smtp__host=smtp.miputodominio.com
globalSettings__mail__smtp__port=587
globalSettings__mail__smtp__ssl=true
globalSettings__mail__smtp__username=micorreo@miputodominio.com
globalSettings__mail__smtp__password=michachiguaycontraseña

Evidentemente debemos sustituir los valores por los de nuestra cuenta de correo. Acodaos que en este editor debéis usar «Control»+»O» para guardar los cambios y «Control»+»X» para salir.

5.7.- Puesta en marcha y reinicio cada semana.

Con todo lo que hemos hecho ya podemos iniciar Bitwarden en nuestro ordenador. Se pone en marcha con el siguiente comando.

./bitwarden.sh restart

Una vez tecleado eso, podemos ir al dominio que hemos configurado y comprobar que efectivamente tenemos el sistema funcionando.

Sin embargo es recomendable reiniciar el servidor de bitwarden al menos una vez a la semana para que en el caso de que el certificado de let’s encrypt esté próximo a caducar, éste se renueve correctamente. Así que vamos a hacer dos tareas programadas, que serán estas:

  • La primera hará que cada vez que se encienda nuestro servidor de bitwarden, el programa de bitwarden se ejecute automáticamente.
  • La segunda hará que se reinicie el servidor entero cada semana.

Para esto tecleamos el siguiente comando:

sudo crontab -e

Eso nos abrirá un editor de texto en el que al final de todo deberemos poner estas dos líneas (Evidentemente, cambiad «miusuariohome» por la carpeta «home» del usuario que haya hecho la instalación del sistema).

@reboot /home/miusuariohome/bitwarden.sh start
0 0 * * 1 /sbin/shutdown -r now

Con esto el sistema queda instalado correctamente y listo para ser usado con normalidad. Como habéis instalado BitWarden, saltaos todo el punto 6 e id directamente al punto 7.

6.- Instalación de Vaultwarden.

Antes de empezar, como se suele decir: «al César lo que es del César». La instalación de Vaultwarden la suelo hacer basándome a grandes rasgos en este tutorial, aunque modificando algunas cosas, por lo que no os extrañe si no sigo al pie de la letra algunos puntos de esa web. Esto va a funcionar sin problema tanto en equipos Debian (que es el que hemos preparado para hacer la instalación) como en Raspberrys con Raspbian. Vamos a ello.

6.1.- Instalación de docker.

Vamos a empezar de forma similar a la instalación de Bitwarden, así que comencemos instalando Docker. De hecho si habés revisado la instalacion de Bitwarden podréis comprobar que los comandos son insultántemente parecidos. Empecemos agregando algunas dependencias.

sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

Ahora añado la clave PGP del repositorio oficial de Docker…

sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

… para poder añadir ahora el repositorio al sistema.

sudo echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Actualizo ahora los repositorios del sistema para que pille el que acabamos de añadir.

sudo apt-get update -y

Con eso, ya podemos instalar docker sin ningún problema.

sudo apt install docker-ce docker-ce-cli containerd.io -y

Al igual que hicimos con BitWarden, comprobamos que Docker haya quedado bien instalado con el comando

docker --version

que debería darnos una salida similar a ésta.

Docker version 20.10.17, build 100c701
6.2.- Instalamos nginx para el proxy

Tal y cómo os dije, debemos correr un proxy para securizar el sistema. Si luego ponéis por encima otro proxy, pues mejor, pero hacedme caso y éste instaladlo igualmente.

Como proxy vamos a usar Nginx. Este programa inicialmente es un servidor de páginas web, pero permite ser usado como proxy sin problemas (y además es muy liviano, por lo que casi no os consumirá recursos).

La instalación de nginx es muy sencilla. Sólo hay que teclear este comando.

sudo apt install nginx

Pero ahora debemos configurar el proxy a manubrio. No os asustéis, que es muy sencillo. Tenéis primero que ir al directorio dónde se almacenan las configuraciones de las páginas webs que están configuradas en el nginx.

cd /etc/nginx/sites-enabled

Y ahí dentro debemos crear un archivo que se llame exactamente igual que el dominio que vais a configurar para el Vaultwarden. Si por ejemplo, vaultwarden va a correr sobre la web «vaultwarden.miputodominio.com», el comando sería…

sudo nano vaulwarden.miputodominio.com

Se nos abrirá el editor de texto «nano», pero como el archivo es nuevo no habrá nada en él. Debemos pegar el siguiente texto, pero cambiando el dominio por el que vayamos a utilizar.

server {
    listen 80;
    server_name vaulwarden.miputodominio.com;

  # configuración proporcionada por Shauder 
  client_max_body_size 128M;

  location / {
    proxy_pass http://127.0.0.1:8181;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
  
  location /notifications/hub {
    proxy_pass http://127.0.0.1:3012;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  
  location /notifications/hub/negotiate {
    proxy_pass http://127.0.0.1:8181;
  }
}

Como siempre, guardamos cambios con «Control»+»O» y salimos del editor con «Control»+»X».

Ahora editamos el fichero de configuración principal de Nginx con este comando.

sudo nano /etc/nginx/nginx.conf

y dentro del bloque «http» le añado esta línea

server_names_hash_bucket_size  64;

Por último reinciamos Nginx con este comando.

sudo systemctl restart nginx

Y con esto ya hemos dejado Nginx correctamente configurado para hacer de proxy.

6.3.- Instalamos LetsEncrypt (salvo que tengamos un proxy externo)

Ahora nos toca instalar Let’sEncrypt para que podamos abrir nuestro Vaultwarden usando https en lugar de http (o sea, securizando la conexión con un certificado digital).

Pero ojo: este punto lo haremos únicamente si los puertos 80 y 443 apuntan directamente a la ip local de nuestra instalación de Vaultwarden. En el caso de que usemos un proxy externo (Como Nginx Proxy Manager o Virtualmin), este punto nos lo vamos a saltar a la torera, porque en ese caso el certificado lo debería gestionar el proxy. Recordad que podríamos usar ese proxy para saltarnos también el paso 6.2, pero no nos lo hemos saltado para darle un extra de seguridad a nuestro sistema.

Al grano: en el caso de que no usemos ningún proxy externo, deberíamos instalar LetsEncrypt, y se hace tal que así.

Primero instalamos el programa en si.

sudo apt install certbot python3-certbot-nginx

Y luego lo ejecuto para que me genere el certificado (respondiendo a las preguntas que se me hagan, por supuesto).

sudo certbot --nginx

Con esto podremos acceder a nuestro dominio por https sin recibir ningún tipo de error.

6.4.- Instalo Vaultwarden

LLega el punto clave de la instalación. Antes de hacerla vamos a generar un token seguro para no tener luego problemas de seguridad en nuestra instalación. Recordad que dentro de nuestro Vaultwarden va a haber un montón de contraseñas, así que cualquier precaución es poca y por eso prefiero generar un token seguro.

Lo vamos a generar con este comando.

openssl rand -base64 48

Eso nos dará una clave enormemente larga (token) que debemos apuntar. Con eso y el nombre del dominio que vamos a usar para este servicio, introducimos el siguiente comando en el terminal (recordad modificar ambos parámetros por los que correspondan).

sudo docker run -d --name bitwarden -v /vw-data/:/data/ -e DOMAIN=https://vaultwarden.tuputodominio.com -e ADMIN_TOKEN=tuputotoken -e ROCKET_PORT=8181 -e WEBSOCKET_ENABLED=true -p 127.0.0.1:8181:8181 -p 127.0.0.1:3012:3012 --restart always vaultwarden/server:latest

El token debéis tenerlo a mano siempre, porque lo vais a necesitar cada vez que necesitéis cambiar algún parámetro de la instalación o crear un nuevo usuario de vuestro gestor de contraseñas.

En fin… ya terminamos la instalación. Con esto el sistema queda instalado y listo para ser usado.

7.- Primeros pasos y configuración básica.

Ahora ya tenemos por fin el gestor de contraseñas instalado en nuestro servidor. Ahora toca hacerle unas pequeñas configuraciones para que todo vaya bien. Debenos ingresar en la siguiente dirección (Cambiando el dominio por el dominio que hayas configurado durante la instalación) para poder entrar en el interfaz de configuración del sistema.

https://tuputodominio.com/admin

Una vez dentro, nos aparecerá una página similar a ésta.

Entrar en administración de Vaultwarden

Ahí debemnos insertar el token que hemos generado en el Vaultwaden en el paso 6.4. Si habéis hecho la instalación de Bitwarden las cosas se complican más. Básicamente antes de entrar en la zona de administración, tendréis que editar este archivo en vuestro servidor.

./bwdata/env/global.override.env

y al final del archivo, añadir una línea de este tipo

adminSettings__admins=micorreoelectronico@gmail.com

Evidentemente ahí tendréis que poner vuestro correo electrónico. Cada vez que entréis en la zona de administración, tendréis que poner ese correo electrónico. El sistema enviará un correo a esa dirección (en caso de que coincidan la dirección que has puesto y la que tiene registrada) y desde ese mail podréis entrar en la página de administración.

Una vez dentro de la zona de administración, en Vaultwarden podréis ver algo similar a esto.

Administración de Vaultwarden

Antes de crear nuestro usuario para empezar a usar el gestor de contraseñas debemos ir a «General Settings» para establecer algunas configuraciones. Las más importantes son:

  • Domain URL: Ahí debe estar la dirección Web por la que accedéis al gestor de contraseñas. Lo que hay en el momento de la instalacion ya debería ser lo correcto, pero si no lo es, cambiadlo.
  • Allow new signups: Por defecto está marcado y es muy importante desmarcarlo. Si no lo hacemos, cualquiera puede entrar en nuestro gestor y crearse un usuario y almacenar sus contraseñas en nuestro servidor. Lo suyo es que nosotros seamos dueños y señores de nuestro gestor y le demos una cuenta a quién nosotros queramos.
  • El resto de campos echadles un vistazo, pero esos dos hay que asegurarse de que estén bien configurados.

Luego, en la categoría «SMTP Email Settings», debemos poner una cuenta de correo que nos permita enviar correos por SMTP. Aseguraos de poner todos los parámetros correctos en los campos correspondientes. Pulsad el botón «Send test email» para comprobar que el sistema es capaz de enviar correos correctamente.

Ahora, en el menú superior, en «Users» hay un campo llamado «invite user» que nos permite añadir un usuario a nuestro sistema de contraseñas. Añadid vuestro correo y registraos en la página como si fuera otra página cualquiera. Desde este campo podéis invitar a amigos o empleados de vuestra empresa para que ellos también puedan usar este gestor de contraseñas. Recordad que todos estos usuarios almacenarán las contraseñas en el servidor de Vaultwarden que acabamos de hacer y que no habrá ningún dato en ninguna nube descontrolada en otro servidor de internet.

En cuanto nos logamos al sistema, podremos ver un esquema muy sencillo para organizar los elementos.

Página principal de VaultWarden

En la parte de arriba tendremos opciones de configuración y diversas herramientas. A la izquierda unas «Carpetas» en las que ir poniendo las contraseñas, para tenerlas completamente organizadas. En el centro podremos ver las contraseñas que tenemos almacenadas en las carpetas que seleccionemos en la zona izquierda y a la derecha veremos «organizaciones».

Las organizaciones son… digamos que grupos de gente con los que compartimos contraseñas. En «Configuración» –> «Organizaciones» podemos crear una organización nueva y permitir que determinadas personas puedan acceder a las contraseñas que pongamos en esa organización. Incluso podemos asignar distintos tipos de privilegios (con derecho a sobreescribir contraseñas o crear contraseñas nuevas en esa organización, usuarios que sólo pueden consultar las contraseñas que ya están generadas, etc…).

Gestión de organizaciones de VaultWarden
Todo esto está muy bien, pero yo estaba acostumbrado a una aplicación de escritorio instalada en el sistema para gestionar las contraseñas. No me digas que tengo que gestionar todas las contraseñas a través de la web.

Para nada. Tanto Bitwarden como Vaultwarden son compatibles con todas las aplicaciones que hay en esta web.

https://bitwarden.com/download/

Ahí puedes descargarte la aplicación para Windows y usarla de la misma forma que usabas el Keepass. Únicamente tienes que hacerle una pequeña configuración para vincularla con tu servidor. Arriba a la izquierda tendrás un icono de ajustes que debes pulsar.

Configurar cliente de vaultwarden

Simplemente debes poner en el campo «URL del servidor» la dirección web de tu servidor de Vaultwarden, luego pulsar el icono de guardar cambios.

Introducimos web en cliente de vaultwarden

A continuación nos logaremos con el usuario y contraseña que usamos en la web de Vaultwarden y ya podremos operar con la aplicación de la misma forma que lo haríamos si usáramos Vaultwarden sin un servidor autoalojado.

Una de las ventajas de este programa es que podemos instalar la aplicación de la misma forma en varios ordenadores a la vez, de tal forma que cuando si cambiamos o añadimos una contraseña, los cambios se verán reflejados en el programa que tienen instalado los otros equipos, por lo que podemos tener el mismo gestor, por ejemplo, en casa y en el trabajo y siempre tendremos las contraseñas disponibles.

8.- Usos avanzados: Captura de contraseñas.

Pero este programa puede ir un paso más allá. Si te fijas, en la web que te puse antes, hay descargas para instalar el gestor como un plugin de tu navegador de internet.

Plugins de bitwarden

Puedes instalar este plugin en el navegador que uses habitualmente. Una vez instalado, cada vez que pongas una contraseña nueva en una página web, el plugin se ocupará de capturarla y añadirla automáticamente a tu gestor de contraseñas. De hecho, si vuelves a entrar en esa página, el plugin detectará que para esa página hay una contraseña guardada y te la ofrecerá.

Bah, eso ya lo hacen muchos navegadores.

Sí, pero este sistema te añade la contraseña al gestor para que siempre las tengas controladas. Además, te permite sincronizar las contraseñas tanto entre ordenadores diferentes como entre navegadores diferentes. Y por supuesto si instalas esta aplicación en un dispositivo móvil podrás tener también todas estas opciones (el gestor en el móvil con las contraseñas siempre actualizadas, posibilidad de captura e inserción de contraseñas en el navegador, etc…).

9.- Conclusiones.

Resumiendo: Keepass para mi sigue siendo un gestor extraordinario, pese a no tener un servidor centralizado que haga todas estas maravillas. No lo he dejado de usar en determinados entornos que requieren de una seguridad extrema, porque la debilidad de Keepass es precisamente su fortaleza: la imposibilidad de gestionarlo a través de internet hace que su único hackeo posible pase por coger el archivo de contraseñas guardado localmente en el equipo.

Sin embargo para un usuario normal y corriente, el uso de Keepass hoy en día se me antoja como poco práctico. Todos nosotros solemos tener más de un dispositivo y en todos ellos necesitamos acceder a nuestras contraseñas de una forma u otra, por lo que un gestor de contraseñas en la nube es la forma ideal de trabajar. Si aún encima tenemos controlado dónde guardamos las contraseñas y el servidor es robusto y seguro, no puedo pensar otra cosa más que ésta es la opción ideal para cualquier usuario doméstico o pequeña empresa.

¿Y tú? ¿Usabas ya algún gestor de contraseñas antes de probar alguno de estos dos? ¿Has tenido algún problema con la instalación o quieres compartir algún descubrimiento o truco de estos programas? Estaré atento a vuestros comentarios.

Share

16 comentarios

  1. Ramón

    Buenas,

    Gracias por este post, es muy fácil de seguir.
    No he tenido problemas con la instalación pero a la hora de acceder al panel de admin (paso 7), me salta el siguiente error:
    No existe el fichero o el directorio. ¿Podrías indicarme por donde tirar?
    Gracias de antemano

    • Marcos

      Qué raro que dos personas me digáis el mismo problema. Vamos a hacer un par de cosas para descartar qué puede estar pasando.

      ¿Si entráis directamente por el dominio tenéis algún problema? ¿Os aparece alguna página?

      Si ponéis en el navegador directamente la ip pública de vuestro router ¿Os genera alguna página u os sale algo?

      Personalmente ese comportamiento me suena a que el puerto 80 y 443 no está mapeado, o que en caso de estarlo el operador de internet os tiene capado el puerto. He visto cosas así con varios operadores y es una verdadera faena. ¿No será vodafone por un casual? Si es así despedíos del tutorial porque a nivel residencial es habitual que pongan líneas que no son accesibles desde fuera (CG-NAT) o con esos puertos capados.

      ¿Estáis instalando bitwarden o vaultwarden? ¿tenéis un dominio de tercer nivel o estáis usando uno gratuíto?

      Decidme e intentaré estar atento para ver qué puede estar pasando. La verdad es que esta instalación es tremendamente sencilla como para que de ningún tipo de problema. Estoy revisando el tutorial por si me he confundido en algún punto pero aparentemente está todo bien. No sé si es mucho pedir que me facilitéis el dominio para revisar qué se ve desde aquí.

      • Ramón

        Buenas Marcos,

        Accediendo vía web directamente a la página de admin no tengo problema. El fallo me lo da al ejecutar el acceso https://vaultwarden.midomino.com, por lo que entiendo que la instalación si se ha hecho correctamente.

        Saludos!

        • Marcos

          Entiendo que puedes acceder a https://vaultwarden.midomino.com/admin pero no a https://vaultwarden.midomino.com. ¿Qué error te sale en esa segunda página?

          ¿En la primera tienes el candado de página segura al cargarla? ¿Y en la segunda? ¿Has podido entrar en el panel de administración y crear un usuario?

          ¿Estás intentando instalar bitwarden o VaultWarden?

  2. David

    Estoy igual, cuando llego al paso 7 me dice que no se puede acceder al sitio web porque la página ha rechazado la conexión.

    • Marcos

      Revisa lo mismo que le he puesto a Ramón. Mira los puertos si están abiertos y revisa que el dominio sea el mismo que el que has puesto durante la instalación.

      Veo en el soporte de VaultWarden que ha habido gente con problemas similares al cambiar el puerto 80 por el 8080. ¿Estáis usando el puerto correcto?

      https://github.com/dani-garcia/vaultwarden/issues/265

      En principio el 8080 es para hacer pruebas y cosas así. Si vais a cambiar el puerto estandard, necesitáis cambiarlo tanto en el script final de instalación como en el nginx para que funcione correctamente.

      • David

        Los puertos están abiertos, ahora si pongo la ip del servidor en el navegador me salta la página Welcome to nginx! pero poniendo el /admin me dice 404 Not Found y muestra la versión de nginx/1.18.0

        • Marcos

          Vale… con lo que me has dicho he localizado el problema. Me falta un trozo por copiar en la zona de la configuración del proxy, en sudo nano vaulwarden.miputodominio.com

          Dame unos minutos y te aviso en cuanto lo haya corregido.

        • Marcos

          Pues no… estaba revisando la configuración de un vaultwarden que tengo ahora a mano y como vi código de más en ese archivo creía que me había comido una parte, pero ese código es el que añade Let’s encrypt a posteriori, así que está todo bien.

          Haz una cosa: Ejecuta de nuevo este comando (con el dominio y el token correcto, por supuesto)

          sudo docker run -d –name bitwarden -v /vw-data/:/data/ -e DOMAIN=https://vaultwarden.tuputodominio.com -e ADMIN_TOKEN=tuputotoken -e ROCKET_PORT=8181 -e WEBSOCKET_ENABLED=true -p 127.0.0.1:8181:8181 -p 127.0.0.1:3012:3012 –restart always vaultwarden/server:latest

          y dinos qué te sale en el terminal.

          Revisa que el archivo /etc/nginx/sites-enabled/vaultwarden.miputodominio.com exista. Tiene que terminar con el nombre exacto de tu dominio.

          En último recurso puedes probar una cosa (a la desesperada).

          en la ruta /etc/nginx/sites-enabled/
          haz esto
          mv default default.old
          nano default
          y ahí escribe el contenido del archivo que habíamos hablado en el tutorial, el que estaba en /etc/nginx/sites-enabled/vaultwarden.miputodominio.com

          Después de hacer esto, reinicia nginx

          sudo systemctl restart nginx

          y vuelve a intentar generar un certificado de certbot (y comprueba que no te de ningún error).

          sudo certbot –nginx

          haz un reinicio del sistema

          sudo shutdown -r now

          y vuelve a ejecutar el comando de inicio del vaultwarden (por si acaso, aunque no creo que haga falta). Asegúrate de poner el dominio y el token correcto.

          sudo docker run -d –name bitwarden -v /vw-data/:/data/ -e DOMAIN=https://vaultwarden.tuputodominio.com -e ADMIN_TOKEN=tuputotoken -e ROCKET_PORT=8181 -e WEBSOCKET_ENABLED=true -p 127.0.0.1:8181:8181 -p 127.0.0.1:3012:3012 –restart always vaultwarden/server:latest

          a ver si con esto solucionas. Pero todo apunta a algo con el nginx, que no está cogiendo bien el dominio por algún motivo.

          • David

            Al ejecutar de nuevo sudo docker me da error:

            sudo: unable to resolve host vaultwarden: Name or service not known
            docker: Error response from daemon: Conflict. The container name «/bitwarden» is already in use by container «27f8957b91c73b1a2b0353f45e9dfcd5b4caa8b96ffd4894ef12619b74644e2e». You have to remove (or rename) that container to be able to reuse that name.
            See ‘docker run –help’.

            Confirmo que el archivo /etc/nginx/sites-enabled/vaultwarden.miputodominio.com existe.

    • Marcos

      Intenta hacer lo que le dije a Ramón: haz una copia de seguridad del archivo «default» que hay dentro de /etc/nginx y sustitúyelo por el archivo que creaste para nginx. Luego vuelve a a generar un certificado (porque si es esto, el certificado no se pudo generar correctamente) y a ver si así funciona.

  3. Marcos

    Hola David.

    Por lo que pones el Docker está funcionando. Quería confirmar que no estuviera apagado.

    El archivo me dices que existe. Quiero suponer que le has cambiado el nombre por el nombre del dominio que vayas a usar (que has modificado lo de «miputodominio») y que dentro de él también has modificado el dominio en el campo correspondiente. Confírmalo.

    Si es así, intenta hacer lo que te decía en el otro comentario: Pon la configuración en el archivo principal de nginx. No es lo más correcto, pero me da que los tiros de lo que te pasa van a ir por ahí.

    • David

      Te confirmo todo con los nombres cambiados, también he puesto también el archivo en el principal de nginx y obtengo el mismo resultado. Además he probado de ponerlo en /etc/nginx/conf.d/vaultwarden.conf como he visto en otro manual que encontré, pero en ese caso al ir a reiniciar el servicio me fallaba así que lo elimine.

  4. David

    «Básicamente antes de entrar en la zona de administración, tendréis que editar este archivo en vuestro servidor.

    ./bwdata/env/global.override.env

    y al final del archivo, añadir una línea de este tipo

    adminSettings__admins=micorreoelectronico@gmail.com»

    ¿Como llego a «./bwdata/env/global.override.env»?

    • Marcos

      Si has instalado vaultwarden, sólo hay que poner el token que creamos al principio del punto 6.4. No hay que editar ningún archivo.

      Si has instalado bitwarden, entonces tienes que editarlo con

      sudo nano ./bwdata/env/global.override.env

      Pero ya digo… si has instalado vaultwarden que es lo que recomiendo, no hay que editar nada (De hecho ese archivo no existe en vaultwarden).

  5. Guille

    He seguido tu manual de Vaultwarden (aunque el nginx lo tengo en otro server que va a hacer de proxy para varios servicios como Vaultwarden, PiHole, Xoa, Portainer) y he de decir que la parte de vaultwarden he copiado y pegado los comandos y todo ha funcionado bien (a los que os falla, revisad bien que hayais copiado todo bien)

    Yo tengo esto configurado en el Nginx

    # Vaultwarden
    location /vaultwd/ {
    proxy_pass http://192.168.0.210:8181;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }

    Como el Vaultwarden está en otro servidor, también en el comando de creación de el docker en vez de poner 127.0.0.1 he tenido que ponerle la 0.0.0.0, quitando eso, todo funciona correctamente siguiendo el post.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

© 2022 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies