5:56Better Stack
Log in to leave a comment
No posts yet
亲自运营密码管理器是一件极具吸引力但也让人心生畏惧的事情。想到存储着自己所有账号钥匙的服务器正赤裸裸地暴露在互联网的汪洋大海中,难免让人夜不能寐。仅仅通过 Docker 运行起 Vaultwarden 只是个开始。你需要一套具体的生存策略,来避开黑客的扫描,并保护数据免受硬件故障这种物理灾难的影响。
在路由器设置中开启 80 或 443 端口的那一刻,你的服务器就会成为全球机器人的猎物。每分钟要承受数千次尝试登录的暴力破解攻击,这实在是一种折磨。最稳固的防御就是根本不设“门”。
使用 Cloudflare Tunnel,你无需开启端口即可实现外部访问。这种方式是通过服务器内部向 Cloudflare 边缘节点打通一条出站隧道(Outbound Tunnel),因此公网 IP 不会暴露。在控制面板中创建隧道并在服务器上运行 cloudflared 连接器后,连接内部地址 http://localhost:80 即可。复杂的 SSL 证书更新工作也会由 Cloudflare 自动处理。设置完成后,浏览器地址栏锁头图标带来的安全感将由你独享。
服务器一定会出故障。如果明天 SSD 突然罢工而你无法在 5 分钟内恢复,那么这台服务器充其量只是个玩具。特别是 Vaultwarden 使用的 SQLite 数据库,如果在服务运行期间单纯地复制文件,数据损坏的概率很高。
为了实现安全备份,请结合使用 Rclone 和 SQLite 在线备份功能。首先,使用以下命令在不停止服务的情况下创建数据库快照:
sqlite3 /data/db.sqlite3 ".backup /backup/db.sqlite3"
随后利用 Rclone 的 crypt 功能,将加密后的数据同步到 Google Drive 或 S3。将此过程编写为 Shell 脚本并注册到 Crontab 中,使其每天凌晨运行。即便房子着火或服务器炸裂,只要有存储在云端的加密备份,你的数字生活就能立即重生。
密码管理器不应该只是一个人使用的工具。通过微信或 KakaoTalk 发送 Netflix 账号或家庭公共 Wi-Fi 密码的落后方式该结束了。Vaultwarden 毫无保留地开放了在付费计划中才提供的组织(Organization)功能。
首先,在管理页面(/admin)将 SIGNUPS_ALLOWED 设置为 false,以防止未受邀请的陌生人注册。接着创建组织并邀请家人组成“集合(Collection)”。你可以为每个项目精细地分配编辑或只读权限。不要忘记设置紧急访问(Emergency Access),以便在我发生万一的时候,妻子能够访问金融账户。这不仅是为了方便,更是为了遗产继承做准备。
树莓派或旧款 NAS 的资源非常宝贵。即便 Vaultwarden 再轻量,如果日志堆积、图标缓存溢出,系统也会不堪重负。为了营造流畅的环境,请在 Docker Compose 设置中将 ICON_CACHE_TTL 设为 0 以减少网络浪费,并将 DATABASE_MAX_CONNS 限制在 10 左右以防止内存暴涨。
再配合使用 Uptime Kuma 就完美了。设置每隔 1 分钟检查一次 Vaultwarden 的 /alive 地址,并连接电报(Telegram)机器人。当服务器宕机时,我必须比用户先知道,这是个人运维者应有的基本礼仪。
即便服务器再坚固,如果用户端疏于防范也是徒劳。如果通过手机 App 访问时出现 SSL 链错误,请检查中间证书设置。安卓和 iOS 的安全标准非常严格。
在浏览器扩展程序中,请务必开启利用 Windows Hello 或 Touch ID 的生物识别解锁。这样可以免受拦截键盘输入值的键入记录(Keylogging)风险。最后,将保险库超时设置调整为“未使用 15 分钟后”。我们必须避免在暂时离开座位时,有人窥探我们所有密码的恐怖情况。做到这一步,专属于你的安全堡垒就大功告成了,甚至不逊色于商业服务。