はじめに
こんにちはizurinaです.
少し前にTailscaleとBitwarden(Vaultwarden)を使って,自分だけのパスワードマネージャーを構築しました.俗にいうBitwardenのセルフホストってやつです.この記事はそれについてまとめようかなと思います.
Bitwardenの保管庫にはTailnet内からしかアクセスできないようになっているので,比較的安全にパスワード管理できると思います.また,Tailnet,つまりある意味では自分専用のVPNからしか保管庫にアクセスできないという点では「自分だけのパスワードマネージャー」と言えると思います.
動機
あまりパスワード管理をクラウドに委ねたくなかったというのが大きな理由です.大きくない理由としては,BitwardenのフォークであるVaultwardenをセルフホストすると本来有料の機能も無料で使えるメリットがあるからです.
セルフホストするためにはVPSを借りるなり,自宅鯖を飼うなりしないといけないのですが,規約読みたくないマンとしてはVPSを借りるのは億劫でしたし,自宅鯖でセルフホストするにしても自宅鯖をインターネットの海に公開するのも正直怖いです.そんなときに,Tailscaleという救世主が現れたおかげで,インターネット上に自宅鯖を公開することなくBitwardenのセルフホストができることがわかったので,やってみるかとなりました.ぶっちゃけ最後は勢い(何の?)に任せた感じです.
事前準備
この記事では前提条件が整った体で手順を書いていきます.ここに必要なものを簡単にまとめるので不足しているものがあれば準備しておいてください.
サーバ
VPSでも自宅鯖でも構いません.OSはDebian,Ubuntu,CentOS,Fedoraのいずれかが無難です.参考までに,筆者環境はFedora Linux Server Editionです.
Tailscale
Tailnetを使うので当然必須です.インストールはこのページに従えば問題ありません.Tailnetも構築しておきましょう.鯖の他にBitwardenを利用するマシンもTailnetに入れる必要があります.
Docker
Vaultwardenのコンテナイメージを使ってコンテナを建てる方が圧倒的に楽です.インストールはこのページの通りに.composeも使えるようにしておいてください.
セルフホストの手順
Vaultwardenの起動
BitwardenのフォークであるVaultwardenのコンテナを立ち上げます.バニラのBitwardenはクラウド版の無料ライセンスと使える機能は同じなのに対して,Vaultwardenは本来有料の機能も無料で使うことができます.加えて,Vaultwardenの方がパフォーマンスがいいらしいです.
ディレクトリ構成
以下のようなディレクトリ構成にすればおkです.
vaultwarden/vw-data
はデータ永続化用のディレクトリです.必ずmkdirしてください.やっておかないと鯖落ちしたときに悲しいことが起きてしまいます.
vaultwarden
├── docker-compose.yml
└── vw-data
docker-compose.yml
version: '3'
services:
vaultwarden:
image: vaultwarden/server
container_name: vaultwarden
environment:
- TZ=Asia/Tokyo
- VIRTUAL_PORT=80
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=true
volumes:
- ./vw-data:/data
ports:
- 33545:80
restart: always
メールサーバの設定とかもここでやるらしいですが,とりあえず動けばいいので特に設定していません.あまり良くないけどね.
コンテナの起動
コマンド1行叩くだけです.
$ docker-compose up -d
HTTPS終端
コンテナの起動ができたら終わり!ではありません.VPN経由だとしても以下のスクショの通りHTTPSを使え!と怒られてしまいます.
VPN使ってるから許してくれよ…と言いたいところですが,仕様なので仕方ありません.
しかし,幸いなことにTailscaleで簡単にこの問題を解決できます.以下のコマンドをsudo権限で実行してください.Let’s EncryptのSSL証明書が発行されます.
# tailscale serve https / http://127.0.0.1:33545
実行出来たらちゃんと終端出来ているか確認します.まずはコマンドラインで確認します.以下のようになっていればおkです.
$ tailscale funnel status
https://[subdomain].tailXXXX.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:33545
最後にTailnetに参加しているマシンからアクセスして確認します.ブラウザからhttps://[subdomain].tailXXXX.ts.net
アクセスして,アカウント作成やログインが問題なくできれば終了です.[subdomain]
とXXXX
は適切に置き換えてください.tailscale funnel status
の実行結果に表示されているものを入力すれば問題ありません.
SSL証明書の発行のためにserve
サブコマンドを叩きましたが,これだけではインターネット上に自分の鯖のVaultwardenが公開されず,Tailnet内からのみアクセス可能なのでご安心を.
最後に
TailscaleとVaultwardenで自分専用のパスワードマネージャーをセルフホストする方法をまとめました.複雑なことは何もやっていないのに,どこにも書いてなかったので,自分が書いてみました.誰かの役に立てればうれしい限りです.
では!
参考
- dani-garcia, “Vaultwarden”
- K-S-K「Vaultwardenの利用」
- Tailscale, “Use Tailscale Funnel and serve ”