📄 Vaultwarden Installation

Vaultwarden sicher installieren – DIMA-Standard (Debian 13, Docker, ufw, Backup)

Diese Anleitung beschreibt die DIMA-Standard-Installation von Vaultwarden auf einer frisch aufgesetzten VM. Sie ersetzt die bisherige Ubuntu-22.04-Variante. Grundgerüst der VM (Debian 13, sudo, Firewall, Docker, Backup) ist identisch zum allgemeinen DIMA-VM-Standard – Details siehe 📄 DIMA-Bereich.

📋 Überblick – Was wird gemacht?

  1. DNS-Eintrag erstellen

  2. VM-Grundgerüst: Debian 13 installieren

  3. Benutzer, sudo & SSH absichern

  4. Firewall (ufw) einrichten

  5. System aktualisieren

  6. Docker & Docker Compose installieren

  7. Automatisches Backup einrichten

  8. Vaultwarden-Verzeichnis anlegen

  9. Admin-Passwort erstellen und sichern

  10. .env-Datei anlegen

  11. docker-compose.yml anlegen

  12. SSL/Zertifikat über OPNsense einrichten

  13. Vaultwarden starten und nutzen

  14. Admin-Bereich absichern oder deaktivieren

  15. Benutzer & Organisation einrichten

  16. Wartung & Sicherheit

1️⃣ DNS-Eintrag erstellen

Im DNS des Providers (Hetzner, Netcup, ...):

TypNameWert
Apass.kunde.deÖffentliche IP der OPNsense (WAN)

2️⃣ VM-Grundgerüst: Debian 13 installieren

  • Version: Debian 13 (Trixie), minimal/ohne Desktop

  • Benutzer: dima (kein root-Login)

  • Hostname: nach DIMA-Namensschema, z. B. KUNDENKÜRZEL01VW01 (siehe 📄 DIMA Namensgebung Geräte)

  • Festplatte: mindestens 50 GB

  • RAM: mindestens 4 GB

  • CPU: 2 Kerne

[SCREENSHOT: Proxmox-Klon/Installationsdialog für die VM]

3️⃣ Benutzer, sudo & SSH absichern

adduser dima
usermod -aG sudo dima

# SSH-Key statt Passwort-Login (Key vorher auf den Client kopieren)
mkdir -p /home/dima/.ssh
nano /home/dima/.ssh/authorized_keys   # Public Key einfügen
chmod 700 /home/dima/.ssh
chmod 600 /home/dima/.ssh/authorized_keys
chown -R dima:dima /home/dima/.ssh

# In /etc/ssh/sshd_config:
# PermitRootLogin no
# PasswordAuthentication no
systemctl restart sshd

🔎 Details zur SSH-Härtung: 📄 SSH Absichern

4️⃣ Firewall (ufw) einrichten

sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 8080/tcp     # Vaultwarden-Port, nur falls nicht ausschließlich über OPNsense/HAProxy geroutet
sudo ufw enable
sudo ufw status verbose

⚠️ Der öffentliche Zugriff läuft über OPNsense/HAProxy (Port 443 → interne IP:8080). Der ufw-Regel auf 8080 dient nur der Absicherung im internen Netz – von außen darf nur die OPNsense erreichbar sein.

5️⃣ System aktualisieren

sudo apt update && sudo apt full-upgrade -y
sudo apt install -y qemu-guest-agent unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

6️⃣ Docker & Compose installieren

# Docker-Repository für Debian einrichten
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=amd64 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

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

docker version

7️⃣ Automatisches Backup einrichten

Backup-Standard: tägliches Snapshot/Dump von /opt/vaultwarden/vw-data auf das zentrale DIMA-Backup-Ziel (PBS/rsnapshot – je nach Kunde, siehe Backup-Standard-Dokumentation).

sudo mkdir -p /opt/backup-scripts
sudo nano /opt/backup-scripts/vaultwarden-backup.sh
#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR="/opt/backup/vaultwarden"
mkdir -p "$BACKUP_DIR"
tar czf "$BACKUP_DIR/vw-data_$DATE.tar.gz" -C /opt/vaultwarden vw-data
find "$BACKUP_DIR" -type f -mtime +14 -delete
sudo chmod +x /opt/backup-scripts/vaultwarden-backup.sh
(crontab -l 2>/dev/null; echo "0 2 * * * /opt/backup-scripts/vaultwarden-backup.sh") | crontab -

📌 Zusätzlich: VM-Backup auf Hypervisor-Ebene (Proxmox Backup Server) gemäß Standard-Backup-Policy des Kunden einplanen.

8️⃣ Vaultwarden-Verzeichnis anlegen

sudo mkdir -p /opt/vaultwarden
sudo chown $USER:$USER /opt/vaultwarden
cd /opt/vaultwarden

9️⃣ Admin-Passwort erstellen und sichern

sudo apt install -y argon2

Token erzeugen:

echo -n 'MeinAdminPasswort' | \
argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4 | \
sed 's/\$/\$\$/g'

Sicher speichern: ausschließlich im Vaultwarden/Bitwarden-Tresor der Firma – niemals in Klartext-Dateien oder Chats.

1️⃣0️⃣ .env-Datei erstellen

echo -n 'VAULTWARDEN_ADMIN_TOKEN="' > .env && \
echo -n 'MeinAdminPasswort' | \
argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4 | \
tr -d '\n' | sed 's/\$/\$\$/g' >> .env && \
echo '"' >> .env

1️⃣1️⃣ docker-compose.yml erstellen

nano docker-compose.yml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    user: "1000:1000"
    environment:
      DOMAIN: "https://pass.kunde.de"
      ADMIN_TOKEN: ${VAULTWARDEN_ADMIN_TOKEN}
      SMTP_HOST: "web05.dimait.de"
      SMTP_FROM: "noreply@kunde.de"
      SMTP_PORT: "587"
      SMTP_SECURITY: "starttls"
      LOG_FILE: "/data/vaultwarden.log"
      LOG_LEVEL: "info"
      SIGNUPS_ALLOWED: "false"
      INVITATIONS_ALLOWED: "true"
      SHOW_PASSWORD_HINT: "false"
      WEB_VAULT_ENABLED: "true"
    volumes:
      - /opt/vaultwarden/vw-data:/data
    ports:
      - "8080:80"
    env_file:
      - .env
mkdir -p /opt/vaultwarden/vw-data
chown -R 1000:1000 /opt/vaultwarden/vw-data
chmod 750 /opt/vaultwarden/vw-data

⚠️ SIGNUPS_ALLOWED bleibt auf false (kein Selbst-Registrieren). INVITATIONS_ALLOWED auf true, damit der Kunde selbst Mitarbeiter per Einladung hinzufügen kann (siehe Kunden-Schulung).

1️⃣2️⃣ SSL/Zertifikat über OPNsense einrichten

Neuer DIMA-OPNsense-Standard (ACME Client + HAProxy) – Details in den verlinkten Artikeln, nicht hier duplizieren:

📄 Opnsense Einrichtung 📄 Opnsense HA Proxy 📄 OpnSense Zertifikat erstellen - erneuern

  • ACME-Konto für Hetzner- oder Netcup-DNS-API anlegen

  • Wildcard- oder Einzelzertifikat für pass.kunde.de erzeugen

  • HAProxy: Port 443 → interne Vaultwarden-IP:8080, Header Connection/Upgrade durchreichen (WebSocket für Live-Sync)

🚀 1️⃣3️⃣ Vaultwarden starten

cd /opt/vaultwarden
docker compose up -d
docker ps -a

🔑 1️⃣4️⃣ Vaultwarden verwenden

1️⃣5️⃣ Admin-Bereich absichern

Zusätzlich zum Token: Zugriff auf /admin auf OPNsense-Ebene auf DIMA-IPs einschränken (ACL in HAProxy) – siehe 📄 Bitwarden Opnsense. Admin-Bereich nur bei Bedarf per .env aktivieren, sonst Zeile leeren:

nano .env
# ADMIN_TOKEN-Zeile leeren/entfernen
docker compose down && docker compose up -d

1️⃣6️⃣ Benutzer & Organisation einrichten

Erste Organisation und Struktur legt idealerweise der Kunde selbst an (siehe Kunden-Schulung), DIMA unterstützt beim Ersteinrichtungstermin:

  • Admin-Benutzer registrieren

  • Organisation anlegen, Firmenadresse eintragen (Pflichtfeld)

  • Erste Gruppe/Collection anlegen, Mitarbeiter einladen

📄 Vaultwarden / Bitwarden Schulung

🔧 1️⃣7️⃣ Wartung & Sicherheit

Wartung

AufgabeBefehl / Ablauf
Vaultwarden aktualisierensiehe 📄 Vaultwarden Updaten (immer vorher Backup!)
Logs anzeigentail -f /opt/vaultwarden/vw-data/vaultwarden.log
Backup prüfenls -lh /opt/backup/vaultwarden
ufw-Status prüfensudo ufw status verbose

Sicherheitsempfehlungen (DIMA-Standard)

ThemaEmpfehlung
BetriebssystemDebian 13, unattended-upgrades aktiv
SSH-Zugangnur Key-Login, root-Login deaktiviert
Firewallufw aktiv, nur benötigte Ports offen
Admin-Tokennur im Firmen-Tresor, nicht im Klartext
Zugang über HTTPSOPNsense mit Let's Encrypt (Hetzner/Netcup-DNS-API)
RegistrierungSIGNUPS_ALLOWED: false
EinladungenINVITATIONS_ALLOWED: true (kontrolliert durch Kunden-Admin)
Passwort-HinweiseSHOW_PASSWORD_HINT: false
root im Container vermeidenuser: "1000:1000"
Backuptäglich automatisiert + VM-Backup auf Hypervisor-Ebene
2FAbeim Kunden aktiv einfordern (Schulung)

⚡ Fehleranalyse bei Problemen

docker compose down
docker compose up -d
docker logs vaultwarden --tail=20