비밀번호 관리 프로그램으로 Enpass를 사용해 오다 추석 연휴를 이용해 Vaultwarden을 설치해 보았습니다.
사실 굳이 옮기지 않아도 과거 1–2만 원대에 구입한 Enpass의 평생 라이선스만으로 충분하나 회사 보안정책상 볼트를 저장하는 클라우드 서비스가 모두 차단되어 더이상 이용이 불가능 하게 되었습니다.
1-2만원에서 9만 원대로 가격을 훌쩍 올려버리고 더 비싼 가격의 상위 평생 라이선스를 만든 Enpass와 달리 Vaultwarden은 2FA-OTP도 무료로 이용가능한 부분도 한몫 했습니다.
(OTP 서비스는 Authy를 사용해왔으나 최근 일부 유저들의 개인정보가 유출되는 사고가 있어 사용하지 않습니다.)
저는 별도 NAS를 구동하진 않고 오라클 클라우드 프리티어 플랜의 인스턴스 공간이 남은 곳에 설치했습니다.
bitwarden와 Vaultwarden(구: bitwardenrs) 차이
bitwarden은 Bitwarden Inc. 에서 공식으로 배포하는 오픈소스이지만 일부 유료로 제공되는 기능들이 빠져있고 설치가 복잡합니다.
반면 Vaultwarden은 오픈소스 특성을 이용해 이러한 부분들을 손쉽게 설치 및 이용 가능하도록 해주는 파생 오픈소스입니다.
설치하기
문서들이 활발히 잘 공유되어 있으나 여러 공유된 문서들을 조합해 설치하였으므로 기록 목적으로 각 출처를 명시해 두었습니다.
우분투 인스턴트 초기화
/* apt 최신화 */
$ sudo apt update
$ sudo apt -y upgrade
/* 2GB 스왑 설정 */
$ sudo fallocate -l 2G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
/swapfile swap swap defaults 0 0 /* 윗 명령어 입력시 전환되는 에디터에서 추가 */
/* 해외 리전의 경우 타임존 세팅 */
$ sudo timedatectl set-timezone Asia/Seoul
Vaultwarden 설치
/* Docker 설치 및 세팅 */
$ sudo apt install docker.io
$ sudo systemctl enable --now docker
/* 버전 확인을 통해 정상 설치 확인 */
$ docker --version
/* Docker Compose 설치 및 세팅 */
$ sudo apt install docker-compose-plugin -y
/* 버전 확인을 통해 정상 설치 확인 */
$ docker compose version
/* 디렉터리 생성 (저는 Home안에 생성했습니다.) */
$ mkdir ~/dockers
$ mkdir ~/dockers/vaultwarden
$ mkdir ~/dockers/vaultwarden/vw-data
$ cd ~/dockers/vaultwarden
리버스 프록시 세팅 (Nginx Proxy Manager)
기본 http로 접속 시 보안 정책으로 이용이 불가능하기 때문에 리버스 프록시를 통해 https 이용이 가능하도록 설정합니다.
/* Nginx Proxy Manager 디렉터리 생성 */
$ mkdir ~/dockers/nginxproxymanager
$ cd ~/dockers/nginxproxymanager
/* SSL 인증서 저장을 위한 디렉터리 생성 */
$ mkdir data letsencrypt
$ vi docker-compose.yml
/* 이하 docker-compose.yml 내용 */
version: "3"
services:
app:
image: "jc21/nginx-proxy-manager:latest"
restart: unless-stopped
ports:
- "80:80"
- "81:81"
- "443:443"
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: "jc21/mariadb-aria:latest"
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "npm"
MYSQL_DATABASE: "npm"
MYSQL_USER: "npm"
MYSQL_PASSWORD: "npm"
volumes:
- ./data/mysql:/var/lib/mysql
/* 컨테이너 실행 */
$
docker-compose up -d
이후 Letsencrypt 인증서 발급과 Nginx Proxy Manager 접속을 통해 기본 설정을 진행합니다.
Vaultwarden 후속 세팅 및 도커 재시작
Vaultwarden를 넣어둔 디렉터리로 이동해 docker-compose.yml 을 생성 및 수정합니다.
$ vi docker-compose.yml
/* 이하 docker-compose.yml 내용 */
version: "2.1"
services:
vaultwarden:
image: vaultwarden/server
container_name: vaultwarden
volumes:
- ./vw-data/:/data/
ports:
- 8088:80
- 3012:3012
restart: unless-stopped
environment:
- SIGNUPS_ALLOWED=false // 신규회원 가입 막기 (먼저 계정생성 후 진행할 것)
- INVITATIONS_ALLOWED=false // 생성된 계정에서의 초대 차단
- SHOW_PASSWORD_HINT=false // 비밀번호 찾기 차단
수정 완료 후 다음 명령어를 통해 도커 컨테이너를 시작합니다.
/* 이미 컨테이너가 실행되어 있을 경우 */
$ sudo docker-compose down
/* 현 디렉터리에 있는 도커 컨테이너 실행 */
$
docker-compose up -d
Vaultwarden 버전 업데이트
마운트 된 볼륨만 살아 있으면 컨테이너 삭제·재설치해도 상관없지만, 만일을 대비해 진행 전 데이터 백업은 필수로 진행합니다.
Vaultwarden이 설치된 Docker 디렉터리로 이동 후 다음의 명령어들을 입력합니다.
/* 최신버전 풀 */
$ docker pull vaultwarden/server:latest
/* Vaultwarden 컨테이너 정지 및 삭제 */
$ docker stop vaultwarden
$ docker rm vaultwarden
/* Vaultwarden 컨테이너 생성 및 실행 */
$ docker run -d --name vaultwarden -v /vw-data/:/data/ -p 8088:80 -p 3012:3012 vaultwarden/server:latest
후기
리버스 프록시 쪽 설정하는 게 생소해서 시행착오가 좀 있었고 (원 글 출처에 스크린샷이 없어서 더 헤맸습니다.) 도커는 과거 서버 엔지니어 지인 및 회사에서 자주 듣던 단어라 겁났는데 의외로 명령어 몇 줄로 끝나서 쉬웠습니다.
사용하는 환경에서 클라우드가 차단되지 않고 추가 기능들의 가격이 저렴하다면 저는 전반적으로 Enpass가 더 잘 맞는 것 같습니다.
장점
엄청 다양한 비밀번호 관리 서비스들의 컨버팅을 지원하는 점이 좋았습니다.
첨부파일 혹은 별도 항목을 열기 위해 2차 인증을 걸 수 있습니다.
(단, 마스터 비밀번호만 가능)URL Autofill의 다양한 양식 지정 가능 (특히 정규식 지원)
단점
Enpass는 input 영역을 클릭 시 알아서 계정을 입력할 수 있도록 해주는데 비해 bitwarden는 추가 기능을 켜야 이메일·패스워드 자동완성이 됩니다.
bitwarden는 자동완성 기능이 하나의 계정을 기준으로 이루어져서
다중 계정이 있을 경우 리스트에서 선택이 가능한 Enpass의 편의성이 더 높았습니다.신분증 이미지 등을 첨부 가능토록 되어있으나
Enpass처럼 바로 볼 수 있는 게 아니라 다운로드만 가능합니다.금융, 여행, 라이센스 등 Enpass에 비해 기본적으로 제공하는 카테고리가 적습니다.
Enpass와 달리 로고 혹은 심볼 이미지를 등록하지 못해 리스트에서 항목을 찾기 어렵습니다.