見出し画像

TailscaleとBitwarden(Vaultwarden)でお気楽パスワード管理(VMで予行演習編)

現状

パスワード管理はKeePassのファイルをDropboxで同期して各デバイスから利用している。数年前からBitwardenには興味があったものの、ファイルを添付する機能が有料だということで移行に躊躇していた。
BitwardenをRustで書き直したオープンソースのVaultwardenを自己ホストすれば有料機能も使えるということでいっちょやってみるかと思い立った。
鍵の保管庫の入口をインターネットに公開するのはドキドキしちゃうので、Tailscaleを利用したVPN(tailnet)からのみ利用する形にしたい。
参考:https://blog.izurina.dev/post/tailwarden/
最初はNAS(AsustorのAS3304T)のApps(TailscaleもVaultwardenもある)を使って実現できないかとあれこれ試行錯誤したのだが、Docker上で動いているTailscaleでHTTPSの証明書を有効にする手段が分からなかったので断念した(Webブラウザからは利用できるものの、スマホアプリからだと証明書関連のエラーが出て使えない状況だった)。
RaspberryPiにVaultwardenをインストールしてもよいのだろうが、鍵の保管場所が耐久性の怪しいSDカードというのも心許ない。(バックアップとればいいんだけど)
最近はIntel N100のミニPCがコスパよいらしいので、自宅サーバーとして買ってみたい欲求が…(物欲ドリブン)。しかし買ったところで当初の目的を果たせませんでしたでは話にならないので、事前に予行演習をすることにした。

やること

WindowsのHyper-V上にUbuntuの仮想マシンを立て、TailscaleとVaultwardenを利用して自分だけが利用できるパスワード保管庫を作る。


VMの準備

Hyper-Vの有効化

UEFIでCPUの仮想化機能を有効にしたうえで、「Windowsの機能の有効化または無効化」からHyper-Vを有効にする。WindowsはProライセンスが必要。

仮想スイッチの作成

Hyper-Vマネージャーを起動し、仮想スイッチマネージャーで仮想スイッチを作っておく。今回は「外部ネットワーク+管理オペレーティングシステムにネットワークアダプタの共有を許可する」の設定で作成。適当な名前を付ける。
参考:https://qiita.com/kit/items/56916c4285f353e89ea0

仮想マシンの作成

Hyper-Vマネージャーを起動し、[操作]-[新規]-[仮想マシン]を選択。

  1. 名前と場所の指定:よしなに

  2. 世代の指定:Ubuntu Desktop 64bitをインストールするので第2世代を指定

  3. メモリの割り当て:お試しなので8GBもあれば十分でしょう

  4. ネットワークの構成:先に作っておいた仮想スイッチを選択

  5. 仮想ハードディスクの接続:サイズは適当に

インストールオプションでUbuntuのイメージファイルを指定しておいて起動時にインストールできるようにする。
完了したら、起動する前に作った仮想マシンを右クリックして[設定]から追加の設定をする。
セキュアブートのテンプレートを「Microsoft UEFI 証明機関」に変更
統合サービスのゲストサービスを有効にする
参考:https://qiita.com/mfunaki/items/65ab01b1db116280550a

VMの起動とUbuntuのインストール

Hyper-Vマネージャーから[起動]し[接続]する

Try or Install Ubuntuを選択
Englishでインストールして後で日本語UIに切り替える
参考:

キーボードレイアウトはJapaneseを選択
ミニマルインストレーションを選択
サードパーティソフトウェアのインストールはチェックしない
InstallationTypeはnoneでよし
再起動して完了

Ubuntuを使えるようにする

ifconfigも使えないのでnet-toolsをインストール

sudo apt install net-tools

リモートデスクトップを利用できるようにする

VNCで繋げるようにする。
[設定]-[共有]でSharingをオン
リモートデスクトップをオンにする

パスワード要求にして、認証のパスワードを任意のものに変更する(最初は自動設定されたパスワードになっている)
VNCではなくRDPでつながる(VNCはなぜか不安定)
https://zenn.dev/fuku_senta/articles/abfecde4d7a097

クライアント側でPictureQualityをAutomatic以外にしたら直った。
参考:https://gihyo.jp/admin/serial/01/ubuntu-recipe/0713


sudo apt install xrdp
sudo systemctl enable xrdp

XRDPも一応インストールしておくがあまり意味がないかもしれない。

デスクトップが落ちないように設定

RDPとVNCのパスワードが毎回更新されてしまう問題に対処するため、ダミーのキーリングを作成する
参考:https://askubuntu.com/questions/1403943/22-04-remote-desktop-sharing-authentication-password-changes-every-reboot

ユーティリティのパスワードと鍵を開き
クレデンシャルを削除する
新しいキーリングを作成する→パスワードを入力せずエンター
このキーリングをデフォルトに指定する
パスワードと鍵を閉じ、リモートデスクトップの設定画面で任意のパスワードを設定する
パスワードと鍵を開き、先ほど作成したキーリングにクレデンシャルが追加されているのを確認したら、Loginをデフォルトに指定しなおす。

SSHを利用できるようにする

Ubuntuを最小インストールしたため、OpenSSHも入っていないのでインストールする。

sudo apt install openssh-server

他のPCからSSHできることを確認

ssh [IPアドレス] -l [ユーザー名]

自動起動を有効化

sudo systemctl enable ssh

コンフィグファイルをバックアップ

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

コンフィグファイルを編集

sudo nano /etc/ssh/sshd_config
# nanoが立ち上がる
PermitRootLogin no
PermitEmptyPasswords no
# Ctrl+Oで保存

本来ならクライアント側で公開鍵を作って、公開鍵をサーバーに送って認証するべきなんだろうけど、VPNからしかアクセスできないようにするのでここらへんはちょっと甘め。
SSHを再起動

sudo systemctl restart ssh

https://www.miraiserver.ne.jp/column/about_ubuntu-ssh/


ファイアウォールを設定する

ufwはインストール済み(inactive)
gufwはUbuntuSoftwareからインストールできる

sudo ufw default deny
sudo ufw allow from 192.168.1.0/24
sudo ufw allow from 100.64.0.0/10
sudo ufw allow from fe80::/10
sudo ufw allow from fc00::/7
sudo ufw allow from 240b:abcd:efgh:ijkl::/64
# 設定の確認
sudo ufw status
sudo ufw enable

TailscaleはCGNATのIPアドレスを使うので100.64.0.0/10を許可しておく
参考:

自動更新するようにする

sudo crontab -e

0 3 * * * sudo apt-get update && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo apt-get autoclean

スクリプトの中ではaptではなくapt-getを使う

Hyper-VのゲストOSが自動起動するようにする


Tailscaleを使えるようにする

curl -fsSL https://tailscale.com/install.sh | sh

https://tailscale.com/download/linux/rpi

上のラインを使えるようにするためにCurlをインストール

sudo snap install curl

Tailscaleの開始

sudo tailscale up

出てきたURLをOpen Linkで開いてログイン

(optional)Exit NodeとしてAdvertise

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
# 編集したらCtrl+Oで保存
sudo sysctl -p
# sysctl.confを再読み込み
sudo tailscale up --advertise-exit-node

Dockerを使えるようにする

sudo apt install docker-compose

これでDockerもあわせて入る。

(optional)PortainerCEを使えるようにする

sudo docker volume create portainer_data
sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always\
 -v /var/run/docker.sock:/var/run/docker.sock\
 -v portainer_data:/data portainer/portainer-ce:latest

https://localhost:9443で管理画面に入れる
タイムアウトした時は

sudo docker restart portainer

Vaultwardenを使えるようにする

ディレクトリを作る

mkdir /home/<username>/vw-data

Dockerを実行

sudo docker run -d --name vaultwarden\
 -v /home/<username>/vw-data/:/data/\
 -p 127.0.0.1:8080:80 --restart unless-stopped\
 vaultwarden/server:latest
sudo tailscale serve --bg 127.0.0.1:8080

https://<machinename>.<tailnet-name>.ts.netでアクセスできれば完了。

Windows用クライアントソフトとAndroidアプリからも問題なく利用可能になった。iOSはまだ確かめてないけど多分大丈夫でしょう。

この記事が気に入ったらサポートをしてみませんか?