工具教程

Vaultwarden详细部署教程(Docker Compose + HTTPS + 安全加固)

AI智能摘要
本文详细介绍在Linux服务器上使用Docker Compose部署Vaultwarden密码管理服务的完整流程,涵盖环境准备、HTTPS配置、安全加固、数据备份与迁移。通过Caddy自动签发SSL证书实现加密访问,设置管理员令牌、禁用公开注册、启用双因素认证,并结合UFW防火墙与Fail2ban防范暴力破解。提供定期更新与自动化备份方案,确保服务安全稳定,实现数据自主可控。
— 此摘要由AI分析文章内容生成,仅供参考。

一、环境准备

1. 服务器要求

  • 系统:Ubuntu 20.04+/Debian 11+(推荐)或其他Linux发行版
  • 配置:至少1核CPU、1GB内存、20GB SSD存储
  • 网络:开放80/443端口(用于HTTPS),已解析域名指向服务器IP

2. 安装Docker和Docker Compose

Python
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装Docker
sudo apt install -y docker.io docker-compose

# 启动Docker服务并设置开机自启
sudo systemctl enable --now docker

# 将当前用户添加到docker组(可选,避免每次使用sudo)
sudo usermod -aG docker $USER
newgrp docker

二、部署步骤

1. 创建工作目录

Python
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden

2. 编写Docker Compose配置文件

创建docker-compose.yml文件:

ymal
version: '3.8'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    volumes:
      - ./data:/data  # 数据持久化目录
    ports:
      - "8080:80"     # 内部HTTP端口(不直接暴露到公网)
    environment:
      # 基础配置
      - DOMAIN=https://vault.yourdomain.com  # 替换为你的域名(必须HTTPS)
      - TZ=Asia/Shanghai                     # 时区设置
      
      # 安全配置
      - SIGNUPS_ALLOWED=false                # 禁止公开注册(创建管理员后设置为false)
      - ADMIN_TOKEN=$(openssl rand -base64 48)  # 生成管理员令牌
      - SHOW_PASSWORD_HINT=false            # 禁用密码提示
      
      # 速率限制(防暴力破解)
      - LOGIN_RATELIMIT_MAX_BURST=10        # 最大登录尝试次数
      - LOGIN_RATELIMIT_SECONDS=60          # 限制时间窗口(秒)
      - ADMIN_RATELIMIT_MAX_BURST=5         # 管理员面板限制
      - ADMIN_RATELIMIT_SECONDS=300
      
      # 功能配置
      - WEB_VAULT_ENABLED=true              # 启用Web界面
      - EMERGENCY_ACCESS_ALLOWED=true        # 允许紧急访问
      - SENDS_ALLOWED=true                   # 允许安全发送功能

  # Caddy反向代理(自动配置HTTPS)
  caddy:
    image: caddy:2-alpine
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"   # HTTP(用于Let's Encrypt验证)
      - "443:443" # HTTPS
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy-data:/data/caddy
    depends_on:
      - vaultwarden

3. 创建Caddy配置文件

在同一目录创建Caddyfile

caddyfile
# 替换为你的域名
https://vault.yourdomain.com {
  # 日志配置
  log {
    output file /data/caddy/vaultwarden.log {
      roll_size 10MB
      roll_keep 10
    }
  }

  # 自动申请SSL证书
  tls your@email.com  # 替换为你的邮箱(用于证书通知)

  # 反向代理到Vaultwarden
  reverse_proxy vaultwarden:80 {
    header_up X-Real-IP {remote_host}
    header_up X-Forwarded-For {remote_host}
    header_up X-Forwarded-Proto {scheme}
  }
}

4. 启动服务

Python
# 启动容器(后台运行)
docker-compose up -d

# 查看日志(确认启动正常)
docker-compose logs -f

三、初始化配置

1. 访问Web界面

打开浏览器访问 https://vault.yourdomain.com,使用以下步骤创建管理员账户:

  1. 首次访问时SIGNUPS_ALLOWED=true,注册第一个账户(管理员)
  2. 登录后,修改docker-compose.yml中的SIGNUPS_ALLOWED=false
  3. 重启容器使配置生效:docker-compose up -d

2. 访问管理员面板

通过 https://vault.yourdomain.com/admin 登录管理界面,输入之前生成的ADMIN_TOKEN(可在容器日志中找到)。

3. 关键配置建议

  • 强制2FA:在管理员面板要求所有用户启用2FA
  • 设置密码策略:最小长度12位,要求包含大小写字母、数字和特殊字符
  • 配置备份:定期导出密码库(Settings → Export Vault)

四、安全加固

1. 防火墙配置(UFW示例)

Python
# 仅开放必要端口
sudo ufw allow 22/tcp     # SSH
sudo ufw allow 80/tcp      # HTTP(Let's Encrypt验证)
sudo ufw allow 443/tcp     # HTTPS
sudo ufw enable

2. 启用Fail2ban(防暴力破解)

Python
# 安装Fail2ban
sudo apt install -y fail2ban

# 创建配置文件
sudo tee /etc/fail2ban/jail.d/vaultwarden.conf <<EOF
[vaultwarden]
enabled = true
filter = vaultwarden
logpath = /opt/vaultwarden/data/vaultwarden.log
maxretry = 5
bantime = 3600  # 封禁1小时
findtime = 300   # 5分钟内触发
EOF

# 创建过滤规则
sudo tee /etc/fail2ban/filter.d/vaultwarden.conf <<EOF
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>.*$
ignoreregex =
EOF

# 重启服务
sudo systemctl restart fail2ban

3. 定期更新

Python
# 创建更新脚本
cat > /opt/vaultwarden/update.sh <<EOF
#!/bin/bash
cd /opt/vaultwarden
docker-compose pull
docker-compose up -d
echo "Vaultwarden updated at \$(date)" >> update.log
EOF

# 添加执行权限并设置定时任务
chmod +x update.sh
sudo crontab -e
# 添加:0 3 * * 0 /opt/vaultwarden/update.sh  # 每周日凌晨3点更新

五、数据备份与迁移

1. 手动备份

Python
# 压缩数据目录
tar -czf vaultwarden_backup_$(date +%Y%m%d).tar.gz /opt/vaultwarden/data

# 下载备份到本地(通过SCP)
scp user@server:/opt/vaultwarden/backup.tar.gz ./

2. 自动备份脚本

Python
cat > /opt/vaultwarden/backup.sh <<EOF
#!/bin/bash
BACKUP_DIR=/opt/backups
mkdir -p \$BACKUP_DIR
tar -czf \$BACKUP_DIR/vaultwarden_\$(date +%Y%m%d).tar.gz /opt/vaultwarden/data
# 保留最近30天备份
find \$BACKUP_DIR -name "vaultwarden_*.tar.gz" -mtime +30 -delete
EOF

chmod +x backup.sh
sudo crontab -e
# 添加:0 2 * * * /opt/vaultwarden/backup.sh  # 每天凌晨2点备份

3. 迁移步骤

  1. 在新服务器部署基础环境(Docker、Docker Compose)
  2. 复制备份文件到新服务器:scp backup.tar.gz user@newserver:/opt/
  3. 解压恢复数据:tar -xzf backup.tar.gz -C /
  4. 重新部署容器:docker-compose up -d

六、常见问题解决

1. 证书申请失败

  • 确保域名解析正确且服务器可被外部访问
  • 检查防火墙是否放行80/443端口
  • 手动验证:curl http://vault.yourdomain.com/.well-known/acme-challenge/test

2. 管理员面板无法访问

  • 检查ADMIN_TOKEN是否正确生成:cat /opt/vaultwarden/data/config.json
  • 确保DOMAIN设置为HTTPS且与访问地址一致
  • 通过日志排查:docker logs vaultwarden | grep admin

3. 客户端同步失败

  • 检查服务器时间是否同步:sudo timedatectl set-ntp true
  • 验证SSL证书完整性:openssl s_client -connect vault.yourdomain.com:443
  • 客户端设置自定义服务器URL:设置 → 自托管 → 服务器URL

七、最佳实践总结

  1. 最小权限原则:仅开放必要端口,禁用不必要功能
  2. 定期审计:检查管理员日志(/data/vaultwarden.log
  3. 多层防御:结合速率限制、Fail2ban和2FA
  4. 灾难恢复:测试备份恢复流程,确保数据可恢复
  5. 安全更新:及时应用容器和系统更新

通过以上步骤,你将拥有一个安全、稳定的自托管密码管理器,功能上可媲美1Password,且完全掌控数据隐私。

暂无介绍....

登录用户才能发表评论! 登录账户

取消回复

评论列表 (0条):

加载更多评论 Loading...

延伸阅读:

暂无内容!

    返回顶部