LastPassの無料版が機能制限されたからBitwardenの自分専用サーバ作ってみた

LastPassの無料版の機能制限が厳しくなったそうですね。

どーん。各種パスワード、管理してます? パスワードマネージャー系何使ってますか? もし、LastPassユーザーで無料プランを使っているという人は...

パスワードマネージャなんて複数端末で同期してなんぼなので、PCだけ、モバイルだけって制限されたらだいぶ使いづらいですよね。まぁ僕は使ってないんで特に困ってもないんですけど。無料版で囲い込んでおいてあとから機能制限を厳しくするっていうのは賢いやり方ですよね。ユーザ的にはたまったもんじゃないですが。

で、世の中には他にもパスワードマネージャサービスがたくさんあります。有名ドコロだと1Passwordとか?でもこれもいつ無料版が改悪されるか分からんですよね。

っていうところで、最近流行ってきている(らしい)のがBitwarden。

「bitwarden」はオープンソースで開発されているパスワードマネージャーで、クラウドを利用して複数のデバイス間でアカウント情報を自動で同期してくれるというところまで無料で使用できるアプリです。さっそく使い勝手を試してみました。
PCやスマートフォンからパスワードを一括管理できる人気パスワード管理サービス「LastPass」がこれまで無料利用が可能だったPC・スマートフォンなどのデバイスの垣根を超えたパスワード共有機能を有料化すると発表しました。無料版の機能が制限されることになったLastpassについて、同種のパスワード管理サービス「Bitw...

(少なくとも今のところは)無料版でも同期する端末数の制限等もなく、人気急上昇の模様。有料版が年間10ドルっていうのもそこそこ安くていいのかも。

そして人気の理由の一つに「オープンソースで開発されている」というところがあります。ソースコードがいろいろな人の目に触れることでセキュリティーホールが潰されやすいというのはもちろん、「自分でサーバを立てればパスワードを自分の管理下に置き、さらに有料版の機能も無料で使える」という大きなメリットがあります。

そこで今回はこのBitwardenの自分専用サーバを立ててみました。

作業にあたり、こちらのページなどを参考にさせていただきました。

bitwarden 最近注目を集めているbitwardenというパスワード管理サービスがある。有名なLastPassや1Passwordのようにログインパスワードやクレジットカード情報をサーバー上で管理してくれる。bitwardenがこれ...

Bitwardenの公式サーバというものがあります。

The core infrastructure backend (API, database, Docker, etc). - bitwarden/server

が、上のページ含め色々調べてみると、

  • 公式提供のサーバゆえ、有料機能は使えない(お金払えば使える)
  • 要求スペックが高く、ランニングコストがそこそこ必要

…と結構大変そう。そこで有志によって開発されているのがbitwarden_rsになります。

Unofficial Bitwarden compatible server written in Rust - dani-garcia/bitwarden_rs

Rustというプログラミング言語によってサーバ機能が構築されていて、動作が軽く要求スペックも低いようです。また非公式のサーバなので、公式では有料となる機能も無料で使えたりします。ということで今回はこちらで立てていきましょう。

正直Rustとか触ったこと無いんですが、幸いにしてDockerという仮想化技術を使えばそのへん気にせず使うことが出来るので、かんたんでした。

実験環境

  • さくらのVPS v5
    • CPU 仮想3Core
    • メモリ 2GB
    • SSD 100GB + 追加ストレージオプション 100GB
  • Ubuntu 20.04 LTS
  • Webサーバ Apache2.4

やった手順

bitwarden_rsのドキュメントによれば、CaddyというWebサーバを使うのがおすすめのようです。が、今回のサーバではすでにApacheが動いているので、今回はそれをそのまま使おうと思います。

まずはじめに、適当なドメインをサーバに向けておきます。僕の場合は既存のドメインからサブドメインを切りました。

次にそのドメインに対してHTTPSが有効になるようにしておきます。僕の場合はLet’s Encryptを使っているので、そちらで証明書を追加発行しました。

さてここからが本番。まずはDockerの環境を用意します。

apt install docker docker-compose

サーバの再起動時などに自動的に起動するようにしておきます。

systemctl enable docker.service

ではここから実際にbitwarden_rsの環境を構築してきます。まず適当なディレクトリを作ります。

mkdir bitwarden
cd bitwarden

ここにdocker-compose.ymlファイルを作成していきます。

vi docker-compose.yml

version: '3'

services:
  bitwarden:
    image: bitwardenrs/server
    restart: always
    volumes:
      - ./bw-data:/data
    ports:
      - 8080:80
      - 3012:3012
    environment:
      WEBSOCKET_ENABLED: 'true' # Required to use websockets
      SIGNUPS_ALLOWED: 'true'   # set to false to disable signups
      LOG_FILE: '/data/bitwarden.log'

bitwarden_rsでは普通のHTTPが80番、WebSocket(PC等での別クライアントへの情報の即時反映に使っています。モバイルアプリはまた別。)が3012番ポートで動いています。そこでApacheとのバッティングを避けるためにも、80番は8080番、3012番はそのまま3012番に割り当てています。

この状態でコンテナを実行状態にすると8080番ポートでアクセスできるようになるはずです。

docker-compose up -d
curl localhost:8080
<!DOCTYPE html>  #以下のようにソースが表示されれば正常に動いています
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=1010">
    <meta name="theme-color" content="#175DDC">

    <title page-title>Bitwarden Web Vault</title>
...

次にApacheの設定を行っていきます。うちのサーバで動いている設定方法を記していきますが、環境ごとに違う場合もあると思うので、適宜調整してみてください(丸投げ)。ちなみにうちでは複数のサイトをバーチャルホストを使って同時に動かしていて、ドメインごとに設定ファイルを分けています。

# 必要なモジュールの有効化
a2enmod proxy_http proxy_wstunnel

# 設定ファイルの作成
vi /etc/apache2/sites-available/bitwarden.conf

<VirtualHost *:443>
	ServerName example.com 
	SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
	Include /etc/letsencrypt/options-ssl-apache.conf
	ProxyRequests Off
	RewriteEngine On
	RewriteCond %{HTTP:Upgrade} =websocket [NC]
	RewriteRule /notifications/hub(.*) ws://localhost:3012/$1 [P,L]
	ProxyPass / http://localhost:8080/
</VirtualHost>

<VirtualHost *:80>
	ServerName example.com
	RewriteEngine on
	RewriteCond %{SERVER_NAME} =example.com
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

# 設定ファイルの有効化
a2ensite bitwarden

# Apacheの設定ファイル再読み込み ここでエラーが出なければ一安心
systemctl reload apache2

ここまで問題なく終えることができれば、外部から設定したURL(上記の例ならhttps://example.com/)にアクセスすると、Bitwardenの画面にアクセスできると思います。画面の指示に従ってアカウントを登録すれば使う準備はOKです。ブラウザの拡張機能や各種アプリからは、設定でセルフホスティング用のURLが設定できるので、そこでURLを指定すれば同じ用に使えます。

このままだとアカウント登録機能が開放されたままで、アクセスさえできれば誰でも登録ができてしまうので、閉じておきましょう。

docker-compose down
vi docker-compose.yml

...
      # 以下の部分をtrue→falseに書き換える
      SIGNUPS_ALLOWED: 'false'   # set to false to disable signups
...

docker-compose up -d

登録したユーザやパスワードなどの情報は暗号化された上で、docker-compose.ymlファイルと同じディレクトリに作成されたbw-dataディレクトリに保存されているので、適宜バックアップを取っておくと良いと思います。

ということでざっくりbitwadern_rsを動かす方法の解説でした。ここがわからない、ここが間違っているなどありましたらぜひコメントください。

スポンサーリンク

フォローする