Vaultwarden は Rust で書かれた非公式 Bitwarden 互換サーバ (以前の名称は bitwarden_rs) です。Memory 512MB 環境でも(私が見た限り)問題なく動作しているので Google や Oracle の無料クラウドに入れて運用している人もいるらしい。本家Bitwardenでは有料のオプション機能がVaultwardenでは全部解放されているのが嬉しい所。ググるとDocker環境でインストールしている人が多いが、ここでは FreeBSD 環境でのインストール手順をメモしておく。
FreeBSD のパッケージでインストールしようとすると依存関係にmysql5.7を要求してくるのでデータベースがそれ以外の人は port から自分で make しなければならない。その場合、まず、データベース環境を先に整えておく必要がある。ここでは Mariadb 10.6 が予めインストールしてある事を前提とする。
この記事の Mariadb 部分が参考になるかもしれない。
さて、最新の Vaultwarden は最新 Rust でのコンパイルを要求してくるため port で make すると Rust も make するためとても時間がかかる。私の環境では3−4時間ほどかかった。
/usr/ports/security/vaultwarden
make install clean
インストールが終わったら
/usr/local/etc/rc.conf.d
にある vaultwarden.sample を vaultwarden にコピーして必要に応じて変更を加える。
なお、この sample は設定できるパラメータの一部しか無いので全部が掲載されている奴を
curl -L -o vaultwarden.env https://raw.githubusercontent.com/dani-garcia/vaultwarden/main/.env.template
で持ってきて vaultwarden にコピーした方が良いかもしれない。
取り敢えず
ROCKET_ADDRESS=127.0.0.1
export ROCKET_ADDRESS
ROCKET_PORT=8080 # your port here
export ROCKET_PORT
SIGNUPS_ALLOWED='true'
export SIGNUPS_ALLOWED
DOMAIN='https://vaultwarden.example.com'
export DOMAIN
# ADMIN_TOKEN= # generate one with ~$ openssl rand -base64 48
ADMIN_TOKEN ='admin password'
export ADMIN_TOKEN
あたりを設定しておけば良いだろう。
ROCKET_PORT の設定をコメントアウト、省略すると port は8000が選ばれる様だ。
なお、データベースは最初デフォルトで
# DATABASE_URL=data/db.sqlite3
が設定されていて sqlite が使われるが
# DATABASE_URL=mysql://user:password@host[:port]/database_name
DATABASE_URL=mysql://vw_user:vw_userpassword@localhost/vw_database
export DATABASE_URL
の様にすると(ここでは Mariadbの)デフォルトport 3306 に接続しに行きこちらを使う事になる。
もちろん先にvw_userとvw_databaseを作って置く事。
socket は使えないか質問してみたら、近い将来使える予定とのことでした。w
最後に Nginx の設定だが、ここにNginx,Apache他の設定サンプルがあるのでそれを参考にするとよいだろう。
現在の私の設定は次の通り
# The `upstream` directives ensure that you have a http/1.1 connection
# This enables the keepalive option and better performance
#
# Define the server IP and ports here.
upstream vaultwarden-default {
zone vaultwarden-default 64k;
server 127.0.0.1:8080;
keepalive 2;
}
upstream vaultwarden-ws {
zone vaultwarden-ws 64k;
server 127.0.0.1:3012;
keepalive 2;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name vaultwarden.exmaple.com;
# Allow large attachments
client_max_body_size 128M;
location / {
proxy_http_version 1.1;
proxy_set_header "Connection" "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default;
}
location /notifications/hub/negotiate {
proxy_http_version 1.1;
proxy_set_header "Connection" "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default;
}
location /notifications/hub {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Forwarded $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-ws;
}
# Optionally add extra authentication besides the ADMIN_TOKEN
# Remove the comments below `#` and create the htpasswd_file to have it active
#
location /admin {
# # See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
# auth_basic "Private";
# auth_basic_user_file /path/to/htpasswd_file;
#
proxy_http_version 1.1;
proxy_set_header "Connection" "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://vaultwarden-default;
}
ssl_certificate /usr/local/etc/nginx/full.key;
ssl_certificate_key /usr/local/etc/nginx/priv.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
ssl_dhparam /usr/local/etc/nginx/dhparam;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
# ssl_trusted_certificate /usr/local/etc/ssl/ca+chain.key;
ssl_trusted_certificate /usr/local/etc/ssl/ca+chain.key;
# replace with the IP address of your resolver
resolver 1.1.1.1 valid=10s;
# resolver 127.0.0.1;
}
最後に
/usr/local/etc/rc.d/vaultwarden start
/usr/local/etc/rc.d/nginx restart
して、vaultwarden.example.com を見に行くと Bitwarden の画面が出るはずだ。
以上、参考になると幸いです。何かご質問ございましたら分かる範囲でお答えします。
ではでは
コメント