真诚友善团结专业,共建你我引以为荣之社区。《常见问题解答》
15 / 19
12月 23 日

Cloudflare 操作

初始默认设置。我是caddy仅放行了IPV6根据你自己的情况选择IPV4还是IPV6,`DNS` `记录`添加AAAA记录并当时开启小黄云。`SSL/TLS` `概述` 加密模式:完全(严格)

VPS 操作
更新系统的软件包列表,升级所有已安装的软件包,清理不再需要的包,清理缓存,并通过 curl 下载并执行 Docker 的安装脚本

apt update -y && apt full-upgrade -y && apt --purge autoremove -y && apt autoclean -y && curl -fsSL https://get.docker.com | bash

创建 /etc/docker-data/vaultwarden 文件夹并进入该文件夹

sudo mkdir -p /etc/docker-data/vaultwarden && cd /etc/docker-data/vaultwarden

新建 docker-compose.yaml 文件

nano docker-compose.yaml

复制粘贴 docker-compose.yaml 文件内容,保存并退出。

services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped environment: DOMAIN: "https://域名/生成一个最少16位大小写字母数字随机路径" volumes: - ./vw-data:/data caddy: image: caddy:2 container_name: caddy restart: unless-stopped ports: - "[::]:80:80" - "[::]:443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - ./caddy-config:/config - ./caddy-data:/data environment: DOMAIN: "https://域名" EMAIL: "邮箱" LOG_FILE: "/data/access.log"

创建 Caddyfile 文件

nano Caddyfile

复制 Caddyfile 文件内容,保存并退出。

:80 { abort } :443 { tls /data/default_server.crt /data/default_server.key { protocols tls1.3 } abort } {$DOMAIN} { log { level INFO output file {$LOG_FILE} { roll_size 10MB roll_keep 10 } } tls {$EMAIL} { protocols tls1.3 } encode zstd gzip route { reverse_proxy /生成一个最少16位大小写字母数字随机路径/* vaultwarden:80 { header_up X-Real-IP {http.request.header.Cf-Connecting-Ip} } handle /* { abort } } }

创建一个自签证书防止 IP 暴露域名

sudo mkdir -p /etc/docker-data/vaultwarden/caddy-data && sudo openssl req -x509 -nodes -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -keyout /etc/docker-data/vaultwarden/caddy-data/default_server.key -out /etc/docker-data/vaultwarden/caddy-data/default_server.crt -days 36500 -subj "/C=US/ST=State/L=City/O=Organization/OU=Organizational Unit/CN=Common Name"

启动容器

docker compose up -d

打开浏览器进入域名 https://域名/生成一个最少16位大小写字母数字随机路径/
创建账号,导入密码,创建两步验证(建议使用第三方 App,密码和 2FA 分离,鸡蛋不要装在一个篮子,我用的 Aegis,建议分 2 个设备安装导入 2FA,2FA 数据加密导出后再套一层 GPG 加密存放云端 U 盘和电脑,有 2FA 新增就闲时手动多端数据同步),再验证非正确路径是否会访问不了。

新增关闭页面并禁用注册

nano docker-compose.yaml

vaultwarden environment 下新增

SIGNUPS_ALLOWED: "false" WEB_VAULT_ENABLED: "false"

格式与 DOMAIN 对齐,保存并退出。

重启 docker

docker compose up -d && docker compose restart

再验证正确路径访问是否关闭了网页端

进入 Cloudflare 操作
安全性 WAF 自定义规则 编辑表达式 加入了仅自己设置的 IP 访问外加 caddy 证书续签的访问

(ip.src in {允许访问的IPV4地址,多IP的话中间空格}) or (ip.src in {允许访问的IPV6地址,多IP的话中间空格}) or (http.user_agent eq "acme.zerossl.com/v2/DV90" and ip.src eq 2a0e:ac00:231:8080::a31:803d)

采取措施 跳过 要跳过的 WAF 组件 所有其余自定义规则 放置位置 第一个

创建第二个阻止规则 编辑表达式 ,阻止域名访问,外加 censys.io

(http.host eq "域名") or (ip.src in {162.142.125.0/24 167.94.138.0/24 167.94.145.0/24 167.94.146.0/24 167.248.133.0/24 199.45.154.0/24 199.45.155.0/24 206.168.34.0/24 2602:80d:1000:b0cc:e::/80 2620:96:e000:b0cc:e::/80 2602:80d:1003::/112 2602:80d:1004::/112}) or (http.user_agent eq "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)")

采取措施 阻止
分别用设置允许的 IP 例如梯子去访问,和不在允许 IP 列表例如家宽,验证是否生效。

安装 Watch­tower 自动 1 小时检查 docker 镜像容器更新,删除旧镜像。

docker run -d \ --name watchtower \ --restart unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower -c \ --interval 3600

安装 GNU Privacy Guardrclone

sudo apt-get install gnupg curl https://rclone.org/install.sh | sudo bash

生成 GPG 密钥

gpg --full-generate-key

导出私钥,并 SFTP 下载到本地,Windows 端推荐 Gpg4win

gpg --export-secret-keys 密钥ID > /root/private_key.gpg

Google Drive API 与 to­ken 看这篇 Rclone 挂载 Google Drive 教程

编辑 crontab 创建定时备份同步云端

crontab -e

光标移到最下方新增

0 8 * * * tar -czf - /etc/docker-data | gpg --encrypt --recipient "GPG密钥ID" -o /root/Vaultwarden.tar.gz.gpg --yes && rclone copy "/root/Vaultwarden.tar.gz.gpg" "GoogleDrive:vaultwarden_backup"

浏览器插件和 app 用 bitwarden 官方就行,主要就是密码和 2FA 不存放在一起,外加随机路径特定 IP 访问

最近不是有 bitwarden 被黑了吗,密码数据安全也很重要给大家一个参考方法 :joy:

我建了了后,一直在 cloudflare 的安全性 事件中,每天都有其他国家的 IP 访问我部署的 vaultwarden 域名,但被 BAN 了(非我允许的 IP),他们访问的路径也是个错的。多重防御。

自签反而降低了安全性啊:thinking:那人 Bitwarden 被黑是他的弱口令主密码被撞库撞到了。

这个参数设置了有什么好处,有什么影响。无法打开 web 页面,只能 api 调用?

此话题将在最后一个回复的1 个月后关闭。


118 个未读话题 和 158 个新话题, 或浏览开发调优中的其他话题