把自己的服务暴露在公网之后安全是首要考虑的问题,大部分的应用都有User/Auth Service用来供User注册登录,这篇文章简要介绍一下为部署在公网的服务提供用户登录功能。
Nginx Basic Auth
这是最基本的用户登录,约等于没有前端,仅有一个登录功能,使用nginx即可解决。Stats for Strava介绍的Strava数据分析的镜像就是不带用户登录的,然而直接部署在公网所有人都能看到你的Heat Map的出发路线,大致也能猜到你家在哪,添加这个功能就很有必要了。
具体配置详见:使用Docker部署Strava数据分析面板 | Kunyang’s Blog
一般来说像Strava这种只读的服务,一个用户名密码就足够了。
Cloudflared Zero Trust Access
对于某些有权限对系统写的服务(举个例子比如Portainer,可以控制容器的启停),还有涉及到金钱的服务,比如Freqtrade,我认为只有用户名和密码是不够的,好在Cloudflared Zero Trust提供2FA功能,可以添加邮箱的2FA或者其他MFA。
配置
在Cloudflare → Zero Trust → Access,Appilcations添加一个应用,输入要使用的域名,比如strava.kyxie.me,然后再添加一个Policy,选择Email,填写自己的邮箱,最后在Applications应用这个Policy,就可以使用Cloudflare提供的邮箱2FA了。
局限性
Cloudflared Access无法像nginx一样提供特别精细的访问控制,就像Stats for Strava我预留了一个webhook endpoint来供Strava实时更新活动,这种情况Cloudflared有可能把所有的路path都给block掉了,导致webhook失效。
似乎Cloudflared也有解决办法但是我觉得配置比较困难,没必要继续深究了。
Authelia
如果需要更强大的IAM身份与访问管理,可以使用Authelia,同样支持Docker部署,对我来说完全没有必要放在我的服务器中,毕竟能访问我服务器的人也就只有我自己和其他黑客。