docker部署vaultwarden、cloudflare tunnel,使用WAF防火墙设置IP白名单,随时随地访问自建密码库

1.部署vaultwarden密码库

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    volumes:
      - ./data:/data
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 8080:80

2.部署cloudflare tunnel用于内网穿透

进入cloudflare tunnel页面

选择tunnel
image

创建 Tunnels 隧道

选择隧道类型

输入隧道名称

选择部署隧道的方式,我这里使用docker

在本地服务器中部署cloudflare tunnel,个人比较喜欢使用docker-compose.yml;替换从页面上复制的token到配置中

version: '3'

services:
  cloudflare:
    image: cloudflare/cloudflared:latest
    container_name: cloudflared
    restart: always
    command: tunnel --no-autoupdate run --token YOUR_CLOUDFLARE_TUNNEL_TOKEN
    network_mode: host

也可以到tunnel列表页面查看(ps:我已经部署过了就不重复部署了)

进入配置页面
image

添加路由配置

根据情况输入vaultwarden服务的地址,服务类型选择HTTP

1.vaultwarden和cloudflared部署在同一台服务器上,可以直接使用localhost:8080(vaultwarden服务在宿主机映射的端口号)
2.vaultwarden和cloudflared部署在同一子网中,可以使用vaultwarden服务的ip加端口访问,如192.168.1.1:8080

保存后就可以通过域名demo.example.com来访问自己搭建的vaultwarden密码库了。

3.本地子网访问vaultwarden密码库

直接使用宿主机的ip:port如192.168.1.1:8080是无法访问vaultwarden页面的,需要HTTPS才能访问
需要反代一下,我使用nginx进行反代
1.先申请个自签证书

# 自行修改证书和密钥的保存位置
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout localhost.key -out localhost.crt

2.配置nginx进行反代

server {
    listen 443 ssl;
    server_name vaultwarden;
    
    #修改为你申请证书的路径
    ssl_certificate /etc/nginx/certs/localhost.crt;
    ssl_certificate_key /etc/nginx/certs/localhost.key;

    location / {
        proxy_pass http://192.168.1.1:8080;
        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 REMOTE-HOST $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
    }
}

现在访问nginx反代的地址https://localhost:port,就能进入vaultwarden密码库了


提示不安全又有什么关系呢 :tieba_073:,反正是在本地访问 :tieba_095:

4.使用cloudflare WAF防火墙实现白名单IP访问

在cloudflare tunnel隧道绑定的域名下,配置WAF规则
image

16 个赞

把nginx替换成caddy,估计可以解决证书问题

nginx 替换成 traefik,能处理多服务器多域名自动 SSL 证书的问题。

不过话说话来,这个暴露给公网不怕么?

恩,有时间试试。

cloudflare tunnel可以设置页面访问控制,需要输入邮箱接收的验证码才能访问。
还没玩透彻所以没写上。

1 个赞

加了这玩意,Bitwarden 客户端就寄了,没找到好办法

我是用了WAF的IP白名单,没用邮箱验证

1 个赞

我的cf tunnel填localhost的话就报错,必须填公网ip才能用,麻了


image

别人能访问吗 ?

太实用了 这下可以家里云了

这些cf的,不管是tunnel还是cf提供的ssl,印象中都会在cf那边解密然后重新套一层他自己的。cf可以读取你通过他的所有流量,相当于是一个中间人,毕竟他们是做waf和反ddos的,会扫描你的流量然后做保护。用在密码管理器上的话可能要稍微注意一下看你能不能接受。

加个两步验证,别用页面访问控制呗

我觉得密码库 应该禁止联网才对

客户端加密再上传服务器,没啥问题,而且还可以加两步验证