Bitwarden 서버의 경량 구현. 가족 비밀번호를 공유하고 브라우저·앱에서 자동 입력한다.
http://192.168.0.240:8222https://vault.jjang.synology.me/alive이 홈랩에서 가장 잃으면 안 되는 데이터다. 백업 대상 1순위.
environment:
- SIGNUPS_ALLOWED=false # 가족 등록 끝난 뒤 반드시 false
- INVITATIONS_ALLOWED=true # 조직 초대는 계속 허용
- SHOW_PASSWORD_HINT=false # 힌트로 계정 존재가 드러나지 않게
- LOGIN_RATELIMIT_SECONDS=60
- LOGIN_RATELIMIT_MAX_BURST=10
- DOMAIN=https://vault.jjang.synology.me
ADMIN_TOKEN 이 없으면 /admin 페이지가 통째로 비활성화된다.
설정은 전부 환경변수로 가능하므로 관리 페이지가 필요 없다.
⚠️ 평문 토큰을 넣어두면 외부 노출 시 그 하나로 볼트 설정 전체가 넘어간다.
2차 방어로 NPM Advanced 탭에도 차단을 걸어두었다.
location /admin {
return 404;
}
LOGIN_RATELIMIT_SECONDS=60, MAX_BURST=10 은 토큰 버킷이다.
429정상 사용자는 오타 몇 번을 버스트로 흡수하고, 공격자는 분당 1회로 묶인다.
⚠️ 제한은 IP 단위다. NPM 뒤에서 X-Real-IP 가 전달되지 않으면
가족 전원이 하나의 카운터를 공유하게 되어 오히려 자해가 된다.
sudo /usr/local/bin/docker logs vaultwarden | grep -i "username or password"
실패 로그에 실제 공인 IP 가 찍히면 정상, 172.x.x.x 만 찍히면 헤더가 누락된 것.
가족 전원 필수. 계정과 비밀번호만으로는 부족하다.
각자: 웹 볼트 → 계정 설정 → 보안 → 2단계 로그인 → 인증 앱(TOTP)
⚠️ 복구 코드를 따로 보관하게 할 것. 폰을 잃으면 볼트에 영영 못 들어간다.
관리자가 강제하려면: 조직 → Settings → Policies → 2단계 로그인 필수
순서 주의 — 정책을 켜면 2FA 미설정 구성원은 조직에서 자동 제외된다.
전원이 설정을 마친 뒤에 켠다.
NPM 의 Access List(HTTP Basic 인증)를 앞에 붙이면
모바일 앱과 브라우저 확장이 동작하지 않는다.
Vaultwarden 은 자체 인증이 강하므로 위 설정 + 2FA 로 충분하다.
Uptime Kuma → https://vault.jjang.synology.me/alive
latest 대신 특정 버전으로 고정해두면 더 안전하다/volume1/@docker/volumes 또는 데이터 경로)