Dashy的公网安全设置与使用技巧
当厌倦了传统浏览器的海量书签,或者是需要一个随时随地能访问的书签面板。那么Dashy可能是目前最好用的工具。
本文内容需要有如下条件,否则请划走即可。
1.至少2gb内存的vps或者轻量服务器一台。系统为debian或者其他任意linux发行版。
2.公网ip或者域名。
文章只是简单总结了一下过程和曾经遇到的坑。至于如何安装,如何使用,如何把页面做漂亮,并不是本文的目的。重复的内容没有意义。但欢迎留言沟通遇到的问题。
需求目的
首先是满足一个可随时访问的书签页面,其次是不想使用浏览器的同步功能。第三是可定制的页面以及针对不同书签的不同操作,比如当前页跳转或者点击复制。最后是安全且独立自用。
实现原理
简单说,通过搭建一个网站,并且使用账号密码登陆,以此满足访问的安全性,并且是网站性质,所以各个终端均可访问。并且是随时随地的正常访问。
使用技巧
这里只谈实际的配置内容,不涉及基础的搭建或者申请证书的过程。
总体过程为:购买vps——安装1panel面板——面板安全设置中开启ssl访问,使用自签证书——应用商店安装Dashy——域名绑定到VPS——域名申请证书——域名反向代理到Dashy——设置Dashy——创建Dashy内容项。
有操作的可以使用docker编排直接安装最新版,目前应用商店只提供了3.1.0,最新为3.1.1。只是多了一些步骤,后面的操作是相同的。
域名和CF
如果是大陆域名服务商,通过1panel内置的证书部分,申请免费证书即可,根据提供商的不同,使用apiKey或者是用户名密钥的形式,由1panel协助进行证书的申请与续签即可。
CF则需要区分两个情况,如果你在创建子域名或者主域名使用了CDN加速,也就是“云朵”标记。则本地的Dashy不需要再配置ssl证书。也就是在反向代理时不需要启用https。如果没有打开加速或者是其他提供商,则需要开启。
套https也是为了安全,但实现方式有区别。如果同时开启了CF的CDN加速和本地反向代理时的强制https。在浏览器访问时则会提示Dashy重定向次数过多。页面无法打开。这时候只要关闭其中一个https层,就可以恢复了。提示重定向次数过多,就是因为套了两层https证书导致的。
Dashy的账户和游客登录问题

要开启账号登录,只要填入auth段即可。hash即为密码,随便找个在线的SHA-256加密计算你的密码,并填入即可。
建议第一次配置时,把enableGuestAccess属性改为true。因为当你开启账户登录后,有一定几率无法跳到正常的登录页面,由于缓存或者什么原因,会提示没有内容或者没有授权访问一类的东西。并且此时没有开启游客登录的话,前端找不到登录的入口。
而开启游客登录时,即使页面提示禁止访问,也可以在右上角找到登录按钮,点击即可跳转登录页面。
"auth": {
"enableGuestAccess": false,
"users": [
{
"user": "admin",
"hash": "0f2",
"type": "admin"
}
],
"enableOidc": false,
"enableHeaderAuth": false,
"headerAuth": {
"userHeader": "REMOTE_USER",
"proxyWhitelist": []
},
"enableKeycloak": false
},
需要开启账号登录按如上代码即可,正常只要配置users段就过了。下面的enableOidc到最后都可以是不需要的(注意括号成对和逗号分隔)。下面这部分是外接验证使用的,可以看到这里都是false。
首次账号进入之后,手动执行一次重建,没有问题,再修改代码,将游客访问改为false即可。之后就是正常的使用账号登录。
至于游客访问为什么要关闭,是因为开启游客访问时,在游客情况下,点击设置按钮可以看到完整配置的yml文件。Dashy的页面所有内容都是保存在user-data下的yml文件中的。这里就包括前面SHA-256所加密的密码全文,非常不安全。
等于游客可以直接拿到管理员账户。因此关闭游客访问,之后只有访问就需要先登录账户才能访问。

Dashy的内存要求
这个小东西即使是Docker版本,在初次加载和每次重建时都会吃大量的内存,1G的小机器几乎就是要命的任务,2GB内存,大概会先占用1.6左右,加载完成后占用就很小了。
Dashy 的报错大部分跟配置文件有关,比如你修改了账号密码的部分,然后刷新页面长时间加载之后报错,那基本是没有对配置文件的读写权限导致的。
Dashy的配置文件分为两个情况,一种是你修改了内容,它利用浏览器缓存保存在你本地,但是我们需要的是每个客户端都能看到内容,因此我们都是选择保存到配置文件的。正常自建docker的,不会有什么问题。但是如果是它推荐的那些云平台,比如谷歌的GCP,直接运行docker的Run服务,则会在修改之后,无法写入到配置文件,因而失败。
具体原因未知,按官方说法,可以手动修改配置文件来完成,但是使用Run服务时,并不能像vps一样,找到对应的文件夹,也就找不到配置文件了。从docker原理来说,我认为可以,但是我不会操作。
这里使用1panel的应用商店只是简化了docker过程,并无利益相关。
控制端口的外部访问
在搭建初期,基于1panel面板,在安装应用时,会主动勾选外部访问按钮,透传docker的网络端口,个人一般在测试服务正常后,重装或者取消勾选外部访问。这也是为了安全。
如前面所说,Dashy本身对http/s无感,因此能通过域名访问的,在允许外部访问时,通过IP加端口也可以进行直接访问。套用CF的代理,可以避免获得该域名直接映射的IP地址,当然从原理来说,也不是真的获取不到。那对于其他域名解析商提供的域名,则没有这么便利,大部分都是自己套https。
简单说,关键就在于Dashy并没有强制Https的部分,所以端口暴露在外的,通过ip加端口加http就可以完成访问,也因此,明文的访问过程,也就暴露在各个网络部分了。
这里也要说一点,Dashy可能本身设计为内网提供服务的,因此对Https并不敏感,虽然目前配置文件也有关于https的说明。
而通过域名加反向代理,则是通过固定的443端口访问vps,而vps将后端的服务回传到浏览器。
所以这里展示一下,当手动创建docker版本的Dashy时应如何填入网络配置,避免端口的暴露。

创建docker时,网络选择1panel-network,这样建立的服务,如果防火墙没有放通,则不能通过40310端口进行访问。但是通过反向代理可以将域名映射给后端的40310端口使用。
如果网络选择的是其他网络,不管是桥接还是该docker专用的网络,则会直接绕过防火墙,将端口对外。
至于防火墙如何开启,请参照1panel的提示,正常安装ufw即可。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
