En este post vamos a instalar y configurar un servidor Hashicorp Vault para produccion, esta es la parte 1

El objetivo de estos laboratorios es de blindar gradualmente nuestro servidor vault para producción, usando las recomendaciones de Hashicorp

Recomendaciones hechas por Hashicorp

  • TLS de punto a punto
  • Ser la única aplicación corriendo en el servidor
  • Ajustar el trafico de Firewall
  • Eliminar el servidor SSH / cceso remoto
  • Desabilitar la memoria Swap
  • No correr vault como root
  • Desabilitar los Core Dumps
  • Actualizaciones inmutables
  • Evitar usar root token
  • Habilitar la Auditoría
  • Actualizar frecuentemente
  • Configurar SELinux / AppArmor
  • Restringir el acceso al almacenamiento
  • Eliminar el historial de shell
  • Configurar ulimits
  • Usar Memory Lock en contenedores docker
  • No usar accesos sin encriptacion / hardcoded

Despues de que terminemos con la instalacion, vamos a revisar esta lista una a una, por ahora, si quieres leer mas al respecto, puedes hacerlo en la pagina Vault Production Hardening

Aparte de esta lista vamos a cubrir tambien:

  • Alta disponibilidad (High Availability)
  • Almacenamiento persistente de alta disponibilidad (Back-end)

En este post, vamos a cubrir

  • Aplicar memory lock al contenedor docker, para evitar ataques mediante acceso a memoria
  • Montar un directorio del host para el back-end inicial y para la auditoría (para los siguientes post)
  • Descargar el binario Vault de la pagina de Hashicorp
  • Instalación de Vault

Requisitos

  • Conocimiento basico de los comandos de linux
  • Una computadora con debian (yo estoy usando Ubuntu 20.04)
  • Conocimiento basico de docker

Laboratorio:

1. Vamos a iniciar aprovisionando un volumen de docker este volumen nos va a servir mas adelante para auditar y usarlo como backend inicial

docker volume create vault_data

2. Ejecuta un contenedor con la ultima versión de Ubuntu vamos a publicar el puerto 8200 y 8201 el el host, si quieres saber mas sobre los puertos que usa Vault puedes verlo aquí

docker container run -it -d -p 8200:8200 -p 8201:8201 \
--mount source=vault_data,destination=/mnt/vault \
--cap-add=IPC_LOCK --name ubuntu_vault ubuntu /bin/bash

Analicemos el comando

  • Habilitamos memory lock con la capacidad IPC_LOCK y el comando –cap-add para que esto funcione correctamente tienes que usar el driver de almacenamiento overlayfs2 para mas información puedes ver la pagina Docker referencia de container run
  • Montamos el volumen vault_data para iniciar el backend (datos) y la auditoría en post mas adelante.

3. Conectate al contenedor.

docker container exec -it ubuntu_vault /bin/bash

4. Instala algunas herramientas que usaremos despues.

apt update && apt install wget -y unzip nano
Es posible que necesites usar el comando sudo en frente de tus comandos si no estas usando un contenedor o estas usando uno diferente a ubuntu, por ejemplo: sudo apt update && sudo apt install wget -y

5. Necesitamos saber en que arquitectura estamos trabajando, puedes usar el comando uname -m para revisarlo.

uname -m
aarch64

En mi caso es aarch64 (arm64).

6. Ve a la pagina de descarga de Hashicorp Vaul aqui y selecciona la arquitectura correcta para tu procesador

Y en vez de dar click en descargar, da click derecho en "Download" y selecciona “Copy Link Location”

7. Ejecuta el comando wget seguido del link de descarga

wget https://releases.hashicorp.com/vault/1.5.4/vault_1.5.4_linux_arm64.zip

8. Cuando la descarga finalice, descomprime el archivo

unzip vault_1.5.4_linux_arm64.zip

9. Borra el archivo comprimido

rm vault_1.5.4_linux.arm64.zip

10. Prueba el binario ejecute correctamente

./vault version
Vault v1.5.4 (1a730771ec70149293efe91e1d283b10d255c6d1)

Si obtienes un error "Exec format error", en vez de la version quiere decir que el binario no es para la arquitectura de tu cpu, hay que borrar el binario y archivo comprimido y repetir los pasos desde el 5 seleccionando la arquitectura correcta para tu procesador

vault version
bash: ./vault: cannot execute binary file: Exec format error
Error de arquitectura

11. Hay que revisar que directorios están en la variable de entorno $PATH esto para que pueda ejecutarse desde cualquier lugar, usa el commando echo $PATH para saber cuales son los directorios

root@60af5e1b7139:/# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

12. Mueve el binaro de Vault a un directorio PATH, personalmente prefiero /usr/local/bin/ por que es uno de los que siempre estan vacios (la mayoria de las veces)

mv vault /usr/local/bin

13. Verifica la instalación

vault version
Vault v1.5.4 (1a730771ec70149293efe91e1d283b10d255c6d1)

Bien hecho, en el siguiente post vamos a configurar e iniciar el servidor.

Para limpiar.

  • Hay que detener el contenedor con docker container ubuntu_vault stop
  • Si ya no vamos a utilizar el contenedor podemos eliminarlo y borrar la imagen.
docker container stop ubuntu_vault
docker container rm ubuntu_vault
docker container image rm ubuntu
`

Referencias: