작성일 댓글 남기기

Vaultwarden 설치 가이드 – 무료 비밀번호 관리 서버 직접 만드는 법

comparison

여러분은 비밀번호를 어떻게 관리하고 계신가요? 혹시 여러 사이트에 같은 비밀번호를 쓰고 있거나, 메모장이나 엑셀에 적어 두고 계시진 않나요? 매년 수천만 건의 개인정보 유출 사고가 발생하는 요즘, 비밀번호 관리는 더 이상 귀찮은 일이 아니라 필수적인 보안 습관입니다. 오늘은 세계적으로 인기 있는 비밀번호 관리 서비스 Bitwarden과 완벽히 호환되면서도, 내 서버에 직접 설치해 무료로 사용할 수 있는 Vaultwarden을 소개하겠습니다. Docker 한 줄이면 설치가 끝나고, 가족 전체가 함께 쓸 수 있는 나만의 비밀번호 금고를 만들 수 있습니다.

Vaultwarden이란? Bitwarden과 무엇이 다른가

Vaultwarden은 Bitwarden의 서버 API를 Rust 언어로 다시 구현한 오픈소스 프로젝트입니다. 공식 Bitwarden 서버는 .NET 기반으로 리소스를 꽤 많이 잡아먹지만, Vaultwarden은 메모리 100MB 이하로도 쾌적하게 동작합니다. NAS나 라즈베리파이 같은 저사양 기기에서도 문제없이 돌릴 수 있다는 뜻이죠.

가장 좋은 점은 Bitwarden의 공식 클라이언트 앱(브라우저 확장, 모바일 앱, 데스크톱 앱)을 그대로 사용할 수 있다는 것입니다. 서버만 Vaultwarden으로 바꾸는 거라, 사용자 입장에서는 차이를 느끼기 어렵습니다. 게다가 공식 Bitwarden에서 유료 플랜(프리미엄, 가족, 조직)에서만 제공하는 기능들—TOTP 인증, 파일 첨부, 조직 공유 등—을 Vaultwarden에서는 모두 무료로 사용할 수 있습니다.

Bitwarden 공식 vs Vaultwarden 비교

공식 Bitwarden 클라우드 서비스는 무료 플랜에서 기본적인 비밀번호 저장과 자동 완성을 제공합니다. 하지만 TOTP(일회용 비밀번호) 생성기, 긴급 접근, 파일 첨부 등의 기능은 연간 10달러의 프리미엄 플랜부터 가능하고, 가족 공유는 연간 40달러입니다. Vaultwarden을 셀프호스팅하면 이 모든 기능을 무료로 쓸 수 있을 뿐 아니라, 비밀번호 데이터가 내 서버에만 저장되므로 보안 측면에서도 한층 안심할 수 있습니다.

물론 셀프호스팅에는 책임이 따릅니다. 서버 관리, 백업, 보안 업데이트를 직접 해야 하죠. 하지만 이 글에서 안내하는 방법대로 따라 하시면, 설치부터 백업 자동화까지 한 번에 완성할 수 있습니다.

comparison

Docker로 Vaultwarden 설치하기

Vaultwarden은 Docker 이미지로 제공되기 때문에, Docker가 설치된 환경이라면 어디서든 간단하게 실행할 수 있습니다. Synology NAS, 리눅스 서버, 심지어 Windows에 설치한 Docker Desktop에서도 동일하게 동작합니다.

사전 준비물

  • Docker 및 Docker Compose가 설치된 서버 (NAS, 리눅스 서버, 또는 Windows/Mac)
  • 도메인 (HTTPS 적용을 위해 권장, 예: vault.mydomain.com)
  • 5~10분의 여유 시간

Docker Compose 파일 작성

먼저 Vaultwarden 전용 디렉토리를 하나 만들고, 그 안에 docker-compose.yml 파일을 작성합니다.

프로젝트 디렉토리를 생성합니다. 터미널에서 mkdir vaultwarden && cd vaultwarden 명령을 실행하세요. 그다음 docker-compose.yml 파일을 아래 내용으로 작성합니다.

version 항목은 ‘3’으로 지정하고, services 아래에 vaultwarden 서비스를 정의합니다. 이미지는 vaultwarden/server:latest를 사용하며, container_name은 vaultwarden으로 설정합니다. restart 정책은 unless-stopped으로 하여 서버 재부팅 시에도 자동 시작되도록 합니다.

포트는 호스트의 8280번을 컨테이너의 80번으로 매핑합니다(8280:80). 볼륨은 ./vw-data를 컨테이너 내부의 /data에 마운트하여, 비밀번호 데이터가 호스트 파일시스템에 영구 저장되도록 합니다.

environment 섹션에는 다음 환경변수들을 설정합니다. SIGNUPS_ALLOWED는 처음에 true로 두어 계정을 생성할 수 있게 하고, 가족 계정을 모두 만든 뒤에는 false로 변경합니다. INVITATIONS_ALLOWED는 true로 설정해 조직 초대 기능을 활성화합니다. WEBSOCKET_ENABLED은 true로 하여 실시간 동기화를 지원합니다. DOMAIN에는 실제 접속할 URL(예: https://vault.mydomain.com)을 입력합니다.

컨테이너 실행

docker-compose.yml 파일이 있는 디렉토리에서 docker compose up -d 명령을 실행하면, Vaultwarden 이미지를 자동으로 다운로드하고 컨테이너가 백그라운드에서 시작됩니다. 처음 실행 시 이미지 다운로드에 1~2분 정도 걸릴 수 있습니다.

실행이 완료되면 브라우저에서 http://서버IP:8280으로 접속해 보세요. Bitwarden과 동일한 로그인 화면이 나타나면 설치가 성공한 것입니다.

setup

초기 설정과 계정 생성

Vaultwarden이 실행되면 가장 먼저 해야 할 일은 관리자 계정을 만드는 것입니다. 웹 인터페이스에서 ‘계정 만들기’를 클릭하고, 이메일 주소와 마스터 비밀번호를 설정합니다.

마스터 비밀번호, 이것만은 꼭 지키세요

마스터 비밀번호는 모든 비밀번호를 보호하는 열쇠입니다. 이 비밀번호만큼은 정말 강력하게 만들어야 합니다. 최소 12자 이상, 대소문자·숫자·특수문자를 조합하는 것이 좋습니다. 다만 너무 복잡해서 본인이 기억하지 못하면 소용이 없으므로, 의미 있는 문장을 변형하는 방법을 추천합니다. 예를 들어 “우리가족 비밀번호는 2026년부터 안전하다!”를 “Uri-gajok_Pw#2026!”처럼 변환하는 식이죠.

마스터 비밀번호는 Vaultwarden 서버 어디에도 평문으로 저장되지 않습니다. 서버에는 해시값만 저장되고, 실제 암호화·복호화는 클라이언트(브라우저, 앱)에서 이루어집니다. 그래서 설령 서버가 해킹당하더라도 마스터 비밀번호 없이는 저장된 비밀번호를 해독할 수 없습니다.

관리자 패널 활성화

Vaultwarden에는 관리자 전용 패널이 있습니다. 이 패널에서 사용자 관리, 서버 설정, 진단 정보 등을 확인할 수 있습니다. 활성화하려면 docker-compose.yml의 environment 섹션에 ADMIN_TOKEN 환경변수를 추가합니다.

ADMIN_TOKEN 값을 설정하는 방법은 두 가지입니다. 첫째, 단순 문자열을 직접 지정하는 방법이 있지만 보안상 권장하지 않습니다. 둘째, Vaultwarden이 제공하는 argon2id 해시를 사용하는 방법입니다. 터미널에서 docker exec -it vaultwarden /vaultwarden hash 명령을 실행하면 원하는 비밀번호의 해시값을 생성해 줍니다. 이 해시값을 ADMIN_TOKEN에 넣으면 원문 비밀번호가 노출되지 않아 훨씬 안전합니다.

ADMIN_TOKEN을 설정한 뒤 컨테이너를 재시작(docker compose restart)하면, http://서버IP:8280/admin 경로로 관리자 패널에 접속할 수 있습니다.

신규 가입 차단

본인과 가족의 계정을 모두 만들었다면, 외부인이 임의로 가입하지 못하도록 SIGNUPS_ALLOWED를 false로 변경하고 컨테이너를 재시작하세요. 이후 추가 사용자가 필요하면 관리자 패널에서 초대 이메일을 보내는 방식으로 계정을 생성할 수 있습니다.

브라우저 확장과 모바일 앱 연동

Vaultwarden의 가장 큰 장점 중 하나는 Bitwarden의 공식 클라이언트를 그대로 사용할 수 있다는 점입니다. 크롬, 파이어폭스, 사파리, 엣지 등 주요 브라우저의 확장 프로그램과 iOS, Android 앱 모두 호환됩니다.

브라우저 확장 프로그램 설치

Chrome 웹 스토어(또는 각 브라우저의 확장 스토어)에서 Bitwarden을 검색해 설치합니다. 설치 후 확장 프로그램 아이콘을 클릭하면 로그인 화면이 나타납니다. 여기서 중요한 것은 서버 URL을 변경하는 것입니다.

로그인 화면 왼쪽 상단의 지역(Region) 드롭다운을 클릭하고 ‘셀프호스팅(Self-hosted)’을 선택합니다. 서버 URL 입력란에 자신의 Vaultwarden 주소(예: https://vault.mydomain.com)를 입력하고 저장합니다. 그 다음 앞서 만든 계정으로 로그인하면 됩니다.

로그인 후에는 웹사이트에 접속할 때마다 Bitwarden 확장이 자동으로 저장된 비밀번호를 제안합니다. 새 사이트에 가입할 때는 강력한 임의 비밀번호를 생성해 주고, 자동으로 저장까지 해 줍니다. 이제 더 이상 비밀번호를 외울 필요가 없습니다.

모바일 앱 설정

스마트폰에서도 동일하게 App Store 또는 Google Play에서 Bitwarden 앱을 설치합니다. 앱을 처음 실행하면 로그인 화면이 나오는데, 마찬가지로 셀프호스팅 서버 URL을 입력하고 로그인합니다.

모바일에서는 특히 자동 완성(Auto-fill) 기능을 활성화하는 것이 중요합니다. iOS의 경우 설정 → 비밀번호 → 자동 완성 비밀번호에서 Bitwarden을 선택합니다. Android는 설정 → 자동 완성 서비스에서 Bitwarden을 기본 자동 완성 서비스로 지정합니다. 이렇게 하면 앱이나 브라우저에서 로그인할 때 자동으로 비밀번호가 채워집니다.

devices

데스크톱 앱과 CLI

Bitwarden은 Windows, macOS, Linux용 데스크톱 앱도 제공합니다. 브라우저 외의 프로그램(예: SSH 클라이언트, 이메일 앱)에서 비밀번호를 복사·붙여넣기 할 때 유용합니다. 설정 방법은 브라우저 확장과 동일하게 셀프호스팅 서버 URL만 지정해 주면 됩니다.

개발자라면 Bitwarden CLI도 활용할 수 있습니다. 터미널에서 스크립트를 통해 비밀번호를 조회하거나, CI/CD 파이프라인에서 시크릿을 가져오는 용도로 사용할 수 있습니다.

HTTPS 보안 설정

비밀번호를 다루는 서비스인 만큼 HTTPS는 선택이 아니라 필수입니다. HTTP로 접속하면 비밀번호가 네트워크를 통해 평문으로 전송될 수 있고, 브라우저 확장의 일부 기능(자동 완성 등)도 HTTPS에서만 정상 동작합니다.

방법 1: 리버스 프록시 활용 (권장)

이미 Nginx Proxy Manager나 Caddy 같은 리버스 프록시를 사용 중이라면, Vaultwarden을 역방향 프록시 뒤에 배치하는 것이 가장 간편합니다. 도메인(vault.mydomain.com)을 리버스 프록시에 연결하고, Let’s Encrypt 인증서를 자동 발급받도록 설정하면 됩니다.

Nginx Proxy Manager를 사용하는 경우, 새 프록시 호스트를 추가할 때 도메인에 vault.mydomain.com을 입력하고, 전달 주소에 Vaultwarden 컨테이너의 내부 IP와 포트(예: http://vaultwarden:80)를 지정합니다. SSL 탭에서 Let’s Encrypt 인증서 요청을 체크하면 자동으로 HTTPS가 적용됩니다.

방법 2: Cloudflare Tunnel 활용

포트포워딩이 불가능하거나 공인 IP가 없는 환경이라면 Cloudflare Tunnel을 이용할 수도 있습니다. Cloudflare가 자동으로 HTTPS를 제공하므로 별도의 인증서 관리가 필요 없습니다. 다만 비밀번호 데이터가 Cloudflare 네트워크를 통과한다는 점을 인지하고 사용해야 합니다. Vaultwarden은 엔드투엔드 암호화를 사용하므로 Cloudflare가 실제 비밀번호 내용을 볼 수는 없지만, 네트워크 경로를 최소화하고 싶다면 방법 1을 선택하세요.

방법 3: Vaultwarden 내장 HTTPS

별도의 리버스 프록시 없이 Vaultwarden 자체에서 HTTPS를 처리할 수도 있습니다. docker-compose.yml의 environment에 ROCKET_TLS 환경변수를 설정하고, 인증서 파일(.pem)과 키 파일을 볼륨으로 마운트하면 됩니다. 인증서 갱신을 직접 관리해야 하므로 리버스 프록시 방식보다 번거롭지만, 단일 서비스만 운영할 때는 간편한 선택입니다.

2단계 인증(2FA)으로 보안 강화하기

마스터 비밀번호만으로도 기본적인 보안은 확보되지만, 2단계 인증(2FA)을 추가하면 보안이 비약적으로 강화됩니다. 설령 마스터 비밀번호가 유출되더라도 2FA 없이는 로그인할 수 없기 때문입니다.

TOTP 앱 기반 2FA 설정

Vaultwarden 웹 볼트에 로그인한 후 설정 → 보안 → 2단계 인증으로 이동합니다. 인증 앱(Authenticator App) 옵션을 선택하면 QR 코드가 표시됩니다. Google Authenticator, Microsoft Authenticator, Authy 등 원하는 TOTP 앱으로 QR 코드를 스캔하고, 앱에 표시되는 6자리 코드를 입력하면 설정이 완료됩니다.

설정 후에는 반드시 복구 코드를 안전한 곳에 보관하세요. 스마트폰을 분실하거나 TOTP 앱에 접근할 수 없을 때 복구 코드로 로그인할 수 있습니다. 복구 코드는 종이에 적어 금고에 넣어 두거나, 신뢰할 수 있는 가족에게 전달해 두는 것을 권장합니다.

하드웨어 보안 키(YubiKey, FIDO2)

더 강력한 보안을 원한다면 YubiKey 같은 하드웨어 보안 키를 사용할 수도 있습니다. Vaultwarden은 WebAuthn/FIDO2를 지원하므로, 하드웨어 키를 등록하면 물리적 키를 USB에 꽂거나 NFC로 터치해야만 로그인이 가능합니다. 피싱 공격에 가장 강력한 방어 수단입니다.

가족·팀과 비밀번호 공유하기

Vaultwarden을 셀프호스팅하면 Bitwarden의 ‘조직(Organization)’ 기능을 무료로 사용할 수 있습니다. 이 기능을 활용하면 가족이나 소규모 팀과 특정 비밀번호를 안전하게 공유할 수 있습니다.

조직 만들기

웹 볼트에서 ‘새 조직’을 클릭하고 조직 이름(예: ‘우리 가족’)을 입력합니다. 조직이 생성되면 ‘구성원’ 탭에서 가족 구성원의 이메일 주소로 초대를 보냅니다. 초대받은 사람은 이메일의 링크를 클릭하고 Vaultwarden에 로그인하면 조직에 참여하게 됩니다.

컬렉션으로 비밀번호 분류

조직 안에서는 ‘컬렉션(Collection)’이라는 폴더 개념으로 비밀번호를 분류할 수 있습니다. 예를 들어 ‘스트리밍 서비스’, ‘공과금’, ‘와이파이’ 같은 컬렉션을 만들고, 각 컬렉션에 접근할 수 있는 구성원을 지정합니다.

  • 스트리밍 서비스 컬렉션: 넷플릭스, 디즈니플러스, 유튜브 프리미엄 계정을 공유
  • 공과금·관리비 컬렉션: 전기, 가스, 인터넷 요금 사이트 로그인 정보
  • 와이파이 컬렉션: 집, 부모님 댁, 자주 가는 카페의 와이파이 비밀번호
  • 긴급 연락 컬렉션: 보험, 병원, 긴급 서비스 로그인 정보

이렇게 하면 모든 가족 구성원이 필요한 비밀번호를 즉시 찾을 수 있고, 비밀번호가 변경되면 자동으로 모든 구성원에게 동기화됩니다. “넷플릭스 비밀번호 뭐야?”라는 카카오톡 질문은 이제 과거의 일이 됩니다.

기존 비밀번호 가져오기

이미 크롬이나 다른 비밀번호 관리 앱에 저장된 비밀번호가 있다면, Vaultwarden으로 간편하게 옮길 수 있습니다.

크롬 브라우저에서 가져오기

크롬의 비밀번호 관리자(chrome://password-manager/settings)에서 ‘비밀번호 내보내기’를 클릭하면 CSV 파일로 다운로드됩니다. Vaultwarden 웹 볼트에서 도구 → 데이터 가져오기를 선택하고, 형식을 ‘Chrome (csv)’로 지정한 뒤 파일을 업로드하면 모든 비밀번호가 한 번에 가져와집니다.

다른 서비스에서 가져오기

Vaultwarden(Bitwarden)은 거의 모든 주요 비밀번호 관리 서비스의 데이터를 가져올 수 있습니다. LastPass, 1Password, Dashlane, KeePass 등에서 내보낸 파일을 그대로 가져올 수 있으며, 가져오기 형식 목록에서 해당 서비스를 선택하기만 하면 됩니다.

가져오기가 완료된 후에는 반드시 원래 서비스에 남아 있는 비밀번호를 삭제하고, 내보낸 CSV 파일도 안전하게 삭제하세요. CSV 파일에는 모든 비밀번호가 평문으로 들어 있으므로 방치하면 보안 위험이 됩니다.

migration

백업 전략: 비밀번호 데이터를 절대 잃지 않는 법

비밀번호 관리 서비스에서 가장 중요한 것은 데이터 유실 방지입니다. 서버 장애, 디스크 고장, 실수로 인한 삭제 등 다양한 위험에 대비해야 합니다.

Vaultwarden의 데이터 구조

Vaultwarden은 모든 데이터를 컨테이너 볼륨의 /data 디렉토리에 저장합니다. 핵심 파일은 db.sqlite3으로, 사용자 정보와 암호화된 비밀번호가 모두 이 SQLite 데이터베이스에 들어 있습니다. 그 외에 첨부 파일, RSA 키, 아이콘 캐시 등이 하위 폴더에 저장됩니다.

자동 백업 설정

가장 간단한 방법은 vw-data 디렉토리 전체를 정기적으로 다른 저장소에 복사하는 것입니다. cron 작업이나 시놀로지 NAS의 Hyper Backup을 활용하면 자동화할 수 있습니다.

좀 더 안전한 방법은 vaultwarden-backup이라는 전용 백업 컨테이너를 함께 실행하는 것입니다. docker-compose.yml에 백업 서비스를 추가하면, 지정된 주기(예: 매일 새벽 3시)에 SQLite 데이터베이스의 안전한 스냅샷을 생성하고, 선택적으로 외부 스토리지(Google Drive, Backblaze B2 등)에 업로드할 수 있습니다.

백업을 설정할 때 한 가지 주의할 점이 있습니다. SQLite 데이터베이스는 단순히 파일을 복사하면 데이터가 손상될 수 있습니다. 반드시 SQLite의 .backup 명령이나 VACUUM INTO를 사용해야 합니다. 위에서 소개한 전용 백업 컨테이너는 이 과정을 자동으로 처리해 줍니다.

복원 테스트

백업을 설정했다면 반드시 복원 테스트도 해 보세요. 백업 파일을 별도의 테스트 환경에 복원해서 실제로 로그인이 되는지, 비밀번호가 정상적으로 표시되는지 확인합니다. 복원되지 않는 백업은 백업이 아닙니다.

운영 팁과 자주 하는 실수

Vaultwarden을 안정적으로 운영하기 위해 알아두면 좋은 팁과 흔한 실수들을 정리했습니다.

이미지 업데이트

Vaultwarden은 활발하게 개발되고 있어 보안 패치와 기능 업데이트가 자주 나옵니다. docker compose pull 명령으로 최신 이미지를 받고, docker compose up -d로 재시작하면 업데이트가 완료됩니다. 업데이트 전에는 항상 백업을 먼저 수행하세요.

자동 업데이트를 원한다면 Watchtower 컨테이너를 함께 실행할 수 있지만, 비밀번호 관리 서비스처럼 중요한 시스템은 수동 업데이트를 권장합니다. 업데이트 후 문제가 생겼을 때 즉시 대응할 수 있어야 하니까요.

자주 하는 실수 5가지

  • HTTPS 없이 외부 접속 허용: 비밀번호가 평문으로 전송될 수 있습니다. 반드시 HTTPS를 적용하세요.
  • SIGNUPS_ALLOWED를 true로 방치: 누구나 서버에 계정을 만들 수 있습니다. 초기 설정 후 반드시 false로 변경하세요.
  • ADMIN_TOKEN 미설정: 관리자 패널을 아예 비활성화하거나, 강력한 토큰을 설정하세요.
  • 백업 미설정: SQLite 데이터베이스가 손상되거나 삭제되면 모든 비밀번호를 잃게 됩니다.
  • 마스터 비밀번호 분실: Vaultwarden은 마스터 비밀번호를 복구해 줄 수 없습니다. 반드시 안전한 곳에 별도로 기록해 두세요.

모바일에서 자동 완성이 안 될 때

간혹 모바일 앱에서 자동 완성이 동작하지 않는 경우가 있습니다. 이때는 앱 설정에서 ‘접근성 서비스’나 ‘그리기 오버레이’ 권한이 부여되어 있는지 확인하세요. Android의 경우 배터리 최적화에서 Bitwarden을 제외해야 백그라운드에서 정상 동작합니다. iOS에서는 ‘설정 → Face ID 및 암호 → 자동 완성 암호’에서 Bitwarden이 선택되어 있는지 확인합니다.

비밀번호 건강 점검과 활용법

Vaultwarden에 비밀번호를 모두 옮겨 놓았다면, 이제 비밀번호 보안 상태를 점검할 차례입니다. Bitwarden 클라이언트에는 ‘볼트 건강 보고서(Vault Health Reports)’ 기능이 있습니다.

이 보고서에서는 다음 항목들을 점검합니다. 노출된 비밀번호는 알려진 데이터 유출 사고에서 발견된 비밀번호를 감지합니다. 재사용된 비밀번호는 여러 사이트에 동일한 비밀번호를 사용하는 경우를 찾아냅니다. 약한 비밀번호는 추측하기 쉬운 단순한 비밀번호를 경고합니다.

보고서 결과를 보면 대부분의 사람들이 깜짝 놀랍니다. 같은 비밀번호를 수십 개 사이트에 쓰고 있거나, 이미 유출된 비밀번호를 아직 사용 중인 경우가 많기 때문입니다. Vaultwarden이 자동으로 강력한 임의 비밀번호를 생성해 주므로, 약한 비밀번호를 하나씩 교체해 나가면 됩니다.

마무리: 내 비밀번호는 내가 지킨다

Vaultwarden은 설치 난이도 대비 얻을 수 있는 보안 효과가 압도적입니다. Docker 컨테이너 하나로 시작하는데, 결과적으로 가족 전체의 수백 개 비밀번호를 체계적으로 관리하고, 자동 완성으로 편의성까지 잡을 수 있습니다.

정리하면, Vaultwarden 셀프호스팅의 핵심 장점은 세 가지입니다. 첫째, 완전 무료로 Bitwarden 프리미엄의 모든 기능을 사용할 수 있습니다. 둘째, 비밀번호 데이터가 내 서버에만 저장되어 제3자에게 의존하지 않습니다. 셋째, 가족·팀과 안전하게 공유하면서도 각자의 개인 볼트는 완벽하게 분리됩니다.

비밀번호 관리를 시작하기에 가장 좋은 때는 지금입니다. 오늘 Vaultwarden을 설치하고, 가장 중요한 계정부터 하나씩 옮겨 보세요. 한 번 세팅하면 비밀번호 걱정 없는 생활이 시작됩니다.

이미지는 Claude AI 로 생성되었습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다