Self-Hosted 암호관리 서버 Vaultwarden을 Docker-compose로 설치하기
Self-Hosted의 유용함
Self-Hosted
는 외부 서비스를 이용하지 않고 자신이 가진 기기에 직접 서버를 구성해서 사용하는 것을 말합니다. 유용한 외부 서비스도 많지만 언젠가 망하거나 유료화 되거나 기능에 제약이 생깁니다. 사용자가 많아 해킹에 대상이 되기도 합니다.
반면, Self-Hosted 소프트웨어는 대부분 오픈 소스이기 때문에 본인만 잘 관리한다면 유료에 준하는 기능을 무료로 이용가능합니다.
Self-Hosted 소프트웨어는 리눅스에서 Docker를 이용하는 것이 가장 활성화되어 있습니다. 파이류의 하드웨어나 Mini PC 등을 이용해 직접 서버를 돌리거나 무료로 이용가능한(가입 타이밍 각 재야 하지만) 오라클 클라우드 등을 이용해 운영할 수 있습니다. 저는 주로 오라클 클라우드 A1을 이용해 Self-Hosted 앱을 운영합니다.
Vaultwarden이란?
Vaultwarden은 암호를 관리하는 서버입니다. 본래 Bitwarden이라는 유료 암호 관리 앱에서 포크된 오픈소스 버전입니다. Vaultwarden은 리눅스 서버만 있으면 무료로 이용가능하며 Bitwarden, 1password같은 유료와 맞먹는 기능을 제공합니다. Bitwarden의 포크 버전이기 때문에 클라이언트(브라우저, 앱)에서는 Bitwarden용 확장기능이나 앱을 이용하면 됩니다.
왜 암호 관리 서버가 필요한가?
요즘은 크롬, 에지, 파이어폭스 등의 웹브라우저에서도 암호를 온라인 저장합니다. 대기업 혹은 재단이라 해킹당할 위험은 크진 않지만 가능성이 아예 없진 않습니다. 또한, 브라우저상의 암호 저장방식은 브라우저간의 상호저장이 안되고 안드로이드 앱에서 사용하는 암호도 저장할 수 없습니다. 그래서 보안에 신경을 쓰는 사람이라면 Bitwarden, 1password같은 암호관리 서비스를 이용하기도 합니다.
- OS, 웹브라우저에 상관없이 암호 공유 및 관리 가능
- 앱에서 사용하는 암호도 관리가능
- OTP 코드도 관리 가능(휴대폰 분실시에도 OTP 접속 가능)
Docker-compose로 Vaultwarden 설치하기
저의 설치 환경은 오라클 클라우드 A1, 우분투 20.04 입니다. 도커, 도커컴포즈를 이용합니다. 리버스 프록시는 NPM(NginX Proxy Manager)를 사용합니다. SSL은 와일드카드 인증서입니다.
vaultwarden 폴더 및 도커 컴포즈 파일 생성
저는 도커로 설치하는 소프트웨어는 모두 /home/docker
안에서 관리합니다.
# vaultwarden 폴더 생성
mkdir /home/docker/vaultwarden
# vaultwarden 폴더로 이동
cd /home/docker/vaultwarden
# docker-compose.yml 파일 생성 및 편집
nano docker-compose.yml
docker-compose.yml 파일의 내용
version: '3.1'
services:
vaultwarden:
container_name: ds-vaultwarden
image: vaultwarden/server
restart: always
ports:
- 8088:80
volumes:
- ./data:/data
environment:
- TZ=Asia/Seoul
- ADMIN_TOKEN=examplepw1234 #관리자용암호
- 포트는 직접 정해서 변경하면 됩니다. 저는 사용중인 포트가 많아서 비어 있는 8088 포트를 사용했습니다. 변경시 8088을 지우고 원하는 포트로 바꾸면 됩니다. 저는 OS에서 8088포트를 따로 열지는 않고 NginX Proxy Manager를 이용해 리버스 프록시로 접근합니다.
- ip:port로 바로 접속하려면 OS상에서 포트를 열어줘야 합니다.(위의 예제에서는 8088)
- ADMIN_TOKEN은 PW분실시 복구를 위한 마스터 암호입니다. examplepw1234를 지우고 자신이 정한 패스워드로 입력하면 됩니다.
vaultwarden 시작
docker-compose up -d
docker-compose.yml 파일을 올바르게 작성하고 저장한 후에 위의 명령을 이용해 도커를 시작하면 vaultwarden 서버가 구동됩니다.
NPM(NginX Proxy Manager)에서 리버스 프록시 설정
ip:port로 직접 접근하는 분들은 해당되지 않는 내용이니 그냥 넘어가시면 됩니다. 저는 도메인 여러개 가지고 있어서 리버스 프록시로 vaultwarden에 접근합니다.
저는 도커의 게이트웨이가 IP가 172.17.0.1이라 그걸 넣었습니다. 다른 분은 IP가 저랑 다를 수 있습니다. 보통은 도커의 Bridge부분 IPV4 IPAM Gateway를 넣어주면 됩니다. 인증서를 사용하는게 좋은데 저는 와일드카드 인증서라 딱히 보여줄 건 없고 SSL 말고는 다른 건 딱히 건드릴게 없습니다.
Vaultwarden 접속 및 최초설정
NPM에서 설정한 도메인으로 접속하거나 ip:port로 접속해서 계정을 만듭니다. 이후에 관리자 페이지에 접속해서 최초설정을 해야 합니다. 당연한 거지만 마스터 암호(Admin Token)가 필요합니다.
도메인인 경우
도메인을 pw.domain.com이라고 가정하면 pw.domain.com/admin
으로 접속합니다.
ip:port인 경우
ip:port/admin
으로 접속합니다.
관리자 페이지에서 최초 설정
관리자 설정에서는 General setting 일부와 SMTP Email setting 정도만 해주면 됩니다.
- url 을 사용한다면 General setting에서 Domain URL을 수정합니다.
e.g.)https://pw.domain.com/
- 다른 사람이 가입하지 못하도록 General setting에서 Allow new signup을 체크 해제 합니다. 새로운 사용자는 초대 형식으로 추가할 수 있습니다.
- SMTP Email 설정 : SMTP Email설정은 본인이 사용하는 메일에 맞게 넣어주면 됩니다. 메일마다 주소와 포트가 다를 수 있습니다. SMTP를 지원하지 않는 메일도 있습니다. 저는 Zoho 도메인 메일을 사용하기 때문에 다음과 같이 설정했습니다. 설정 저장 후에 Test SMTP에서 메일이 제대로 전송되는지 확인할 수 있습니다.
Vaultwarden 관리자에서 사용자 추가
관리자 화면의 Users 탭에서 원하는 만큼 사용자를 추가하고 초대할 수 있습니다.
Vaultwarden 사용하기
Vaultwarden 서버 설정이 끝났으면 이제 PC, 맥의 웹브라우저, 안드로이드, 아이폰 등의 앱에서 사용할 수 있습니다. 사용법은 별로 어렵지 않습니다. bitwarden용 앱이나 확장프로그램을 이용하면 됩니다.
관리자 설정의 접속주소는 https://pw.domain.com/admin
이지만 일반 사용시의 접속주소는 https://pw.domain.com
이 됩니다. 도메인과 SSL을 사용하지 않는다면 http://ip:port
입니다.
웹브라우저(크롬, 파이어폭스, 에지)
크롬 확장프로그램
파이어폭스 확장기능
에지 추가기능
안드로이드 및 아이폰OS
- 앱스토어에서
bitwarden
검색 후 설치 - 계정 및 설정 입력(캡처를 못하겠네요.)
- OS의 권한 설정(자동완성 서비스, 접근성, 다른 앱 위의 그리기 등)
마치며...
이제 vaultwarden을 이용해 일년에 $10인 bitwarden의 서비스를 이용할 수 있습니다.(무료 버전도 있긴합니다. OTP 지원안함) 적고 보니 생각보다 얼마 안하는 가격이네요...; vaultwarden돌리려고 웹서버 굴리는 건 수지 타산이 안맞고 서버 돌리는 김에 vaultwarden도 쓰고 싶은 분들에게 추천합니다.
개인적으로 폰 분실에 대비해서 OTP를 관리할 수 있는게 가장 마음에 듭니다.