2

docker安装bitwardenrs并配置ssl,设置cloudflare反向代理 cdn加速 再设置禁用新用户...

 2 years ago
source link: https://hellodk.cn/post/586
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

docker安装bitwardenrs并配置ssl,设置cloudflare反向代理 cdn加速 再设置禁用新用户注册并隐藏首页注册按钮

2021-08-24 12:34:36 update

官方的 bitwardenrs docker image 移步了。最新的是:https://hub.docker.com/r/vaultwarden/server

原来的 https://hub.docker.com/r/bitwardenrs/server is deprecated


首先docker的安装没什么好说的,我本次是在centos7 vps上进行的安装。web服务器是nginx。bitwardenrs和bitwarden的区别你也肯定知道,不知道搜一下就行了,我们选择拉取 bitwardenrs 镜像。

Bitwarden官方推荐使用Docker镜像安装,但是Bitwarden 服务器使用 .Net 开发,如果使用 Docker 来部署,镜像体积过大;此外它使用 MSSQL 数据库,部署这个数据库对服务器配置要求比较高。

而bitwarden_rs是第三方开发的Bitwarden安装镜像。bitwarden_rs采用 Rust 实现了 Bitwarden服务器,这个实现更进一步降低了对机器配置的要求,并且 Docker 镜像体积很小,部署非常方便。此外,官方服务器中需要付费订阅的一些功能,在这个实现中是免费的。测试在512MB内存上机子完美运行bitwarden_rs。

以上引用来自:戳我

1.拉取bitwardenrs镜像

docker pull bitwardenrs/server:latest

2.直接通过 docker run 创建镜像

你也可以通过 docker-compose 进行管理,还能更好的保存运行参数。但我保存了 docker run 命令且图便宜就 docker run 了。

docker run -d --name bitwardenrs -v /docker/volume/bitwardenrs:/data/ -p 85:80 -p 3012:3012 -e WEBSOCKET_ENABLED=true bitwardenrs/server:latest

第一次创建这个容器请不要加 -e SIGNUPS_ALLOWED=false 参数,这个参数是禁止新用户注册的。

  • -v /docker/volume/bitwardenrs:/data/ 参数中,前者/docker/volume/bitwardenrs是host中持久化数据的路径,后者/data/是container中数据保存路径
  • -p 85:80 -p 3012:3012 服务监听端口一般使用80,你可以使用 lsof -i:80 查看你的系统80端口是否有被占用,如果有使用其他端口。如果要显示通知,则加上-e WEBSOCKET_ENABLED=true,并且多映射一个端口 -p 3012:3012
  • 其他参数比如邮件通知相关的、日志记录文件路径相关的,可以按照你的喜好增加
  • --name bitwardenrs 将该容器取名为 bitwardenrs

我就这些了。

3.配置前置代理nginx 配置ssl

server
listen 443 ssl http2;
# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
proxy_ssl_server_name on;
# ssl on;
server_tokens off;
ssl_certificate /etc/letsencrypt/live/hellodk.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hellodk.cn/privkey.pem;
ssl_session_timeout 1d;
#ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
server_name bitwarden.hellodk.cn;
client_max_body_size 128M;
location / {
proxy_set_header Host 'bitwarden.hellodk.cn';
proxy_pass http://127.0.0.1:85;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:85;

其中我申请的ssl 证书已经过期了,反正现在我的网站主页以及seafile用的都是这个“过期”证书,但是都通过cloudflare反代以及cdn加速使用了他们的证书,我反而更轻松了。

ssl_certificate /etc/letsencrypt/live/hellodk.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hellodk.cn/privkey.pem;

上面这两个证书已经过期了

可以再配一个 http 自动跳转到 https 的 server 块,其实我发现不配置也能正确跳转,可能是 cloudflare 帮我们做过了相关配置

server {
listen 80;
server_name bitwarden.hellodk.cn;
rewrite ^ https://$http_host$request_uri? permanent; #强制将http重定向到https
server_tokens off;

4.配置cloudflare代理 cdn加速

在 cloudflare.com 的dns面板中 新增一个dns A记录,然后设置名称和代理ip,后面将代理状态打开,过一会儿刷新页面就可以使用 cloudflare的免费的ssl证书了,具体要等多久我不确定。尽管我的 letsencrypt证书已经过期,但网站通过cloudflare的证书可以正常使用,证书的有效期还更长,岂不美滋滋,只不过证书不够个性化,hhhh

5.容器启动,注册用户,导入chrome数据 (.csv文件)

容器启动后,访问网站,注册用户。

chrome 打开 chrome://settings/passwordsSaved Passwords 右边三个竖向排列的三个点,点击,然后Export passwords...,将 .csv 文件下载到本地

然后从bitwardenrs的Tools➡️️Import Data,选择 chrome csv,再选择文件导入,大功告成。

6.禁止新用户注册

一般自建bitwarden服务器是供个人使用,我们在注册完自己的账号后,都选择关闭注册功能,防止他人注册。

需要用到上文中的-e SIGNUPS_ALLOWED=false 参数重新启动容器。但是不能直接重新 docker run,因为会提示你这个同名容器已经存在。

但不用担心,刚刚我们已经注册了用户了,数据库信息已经持久化到/docker/volume/bitwardenrs 这个宿主机目录中了。所以正确的步骤是

docker container stop bitwardenrs

然后remove容器

docker container rm bitwardenrs

再重新 docker run 启动容器,这一次要加上-e SIGNUPS_ALLOWED=false参数

docker run -d --name bitwardenrs -v /docker/volume/bitwardenrs:/data/ -p 85:80 -p 3012:3012 -e SIGNUPS_ALLOWED=false -e WEBSOCKET_ENABLED=true bitwardenrs/server:latest

这时候服务已经起来了,登录首页,发现创建账户的按钮还在,我们点击进去尝试注册用户,看到如下报错

20210612003435.png

添加了-e SIGNUPS_ALLOWED=false参数了但注册按钮依然存在

20210702154824.png

尝试注册新用户每次都提示 An error has occurred. Registration not allowed or user already exists,说明这个参数生效的,后端接口阻止了新用户注册

虽然功能实现上达成目的了,但我希望隐藏掉这个功能入口,直接让用户不知道这个功能存在,不让他尝试(虽然通过url还是能进入,但是你可以接着在nginx上做文章。后面我也忘了url是什么了,所以无所谓啦)

说干就干。

7.隐藏首页注册按钮

通过 docker exec -it bitwardenrs bash 进入容器

我们需要编辑的是这个文件 /web-vault/index.html (这个文件在 bitwardenrs 容器中,所以是先进入容器然后再找这个文件,你在宿主机是几乎不可能找得到的……)

在 body 的结束标签(即</body>)和 html 的结束标签(即</html>)之间,添加下面js代码

<script type="text/javascript">
setInterval(()=>{
var s = document.querySelectorAll("body > app-root > app-frontend-layout > app-login > form > div > div > div > div > div:nth-child(5) > a");
if(s && s[0]){
s[0].style.display = 'none';
},100);
</script>

以上代码的含义是每隔100毫秒执行一次,通过获取dom元素(首先需要判断对象是否存在),获取到对应的a标签,就是注册按钮,将其display属性的值设为none,这样它就不会显示了。如下图所示

20210612004135.png

保存退出。然后执行exit退出容器。

接着重启容器

docker container restart bitwardenrs

然后客户端那边清除缓存后再次访问网站首页测试,成功达成预期目标。见下图,只有登录按钮了~

20210612004331.png

如果你访问网站首页还是原本的样子,建议先使用chrome自带的网站数据clear功能清除掉缓存数据,然后再对该网页按下F12,打开其审查元素,再对左上角刷新按钮右键选择Empty Cache and Hard Reload功能重新加载这个页面,应该可以了吧~~~ 有效果了吧

bitwardenrs 针对所有平台(几乎)都有实现客户端,可以安装 chrome extension 了,可以安装 iOS app、Android app 了。

尽情使用它吧~

听说 bitwardenrs 的 send 功能也很不错哦


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK