千万不要想着折腾 Cloudflare Browser Rendered Terminal
最近不知怎么突发奇想又看回了赛博菩萨 cloudflare,看到使用 Cloudflare Tunnel 的时候有一个 Browser Rendered Terminal,就想着给自己的服务器装一下,结果非常失望,is a total waste of time。
Cloudflare 的 Zero Trust 产品有两个非常给力的工具,Cloudflare tunnel 和 Cloudflare access。
Cloudflare Tunnel
Tunnel 可以用来给你的服务器打洞,比如你有一个内网服务,运行在本地的某个端口(例如 http://localhost:8080
),通过 Cloudflare Tunnel,你可以轻松地将这个服务暴露到公网,好处是 Cloudflare 帮你做了安全相关的事情,同时如果没有公网 IP,也可以访问。
Cloudflare Tunnel 的工作原理是通过 cloudflared
工具建立一条加密的隧道,将你的本地服务流量转发到 Cloudflare 的全球网络。你可以给这个服务绑定一个域名,外部用户通过访问这个域名即可访问你的服务,而无需直接连接到你的服务器。
Cloudflare Access
当你把内网服务使用 Tunnel 暴露给外网后,所有人都可以访问了,如果我们只希望特定的人可以使用我们的服务,通常需要实现一套登录功能,这不仅麻烦,而且自己实现的可能安全度不高。
Cloudflare Access 可以帮助你轻松实现基于身份验证的访问控制,而无需自己开发复杂的登录功能,它可以限制只有特定用户或用户组才能访问你的内网服务,从而大大提升安全性。同时,Cloudflare Access 支持与常见的身份提供商(如 Google Workspace、Azure AD、Okta、GitHub 等)集成,用户在访问你的服务时需要通过这些身份提供商验证身份,免去了自己管理密码。
当用户尝试访问你的服务时,Cloudflare Access 会拦截请求,并将用户引导到身份验证页面。用户通过身份验证后,Cloudflare Access 会根据你配置的访问策略决定是否允许访问。如果通过验证,用户的请求会被转发到你的服务;否则,访问会被拒绝。
Cloudflare Access 中提供的 Browser Rendered Terminal 功能
Access 还提供了一个叫做 Browser Rendered Terminal 功能,根据文档介绍,它可以在浏览器中渲染一个 Terminal 用来通过 SSH 的方式访问你的服务器。
那自然想到一个非常棒的用法,就是把自己的服务器使用 tunnel 连接,设置 Access 以及 Browser Rendered Terminal,实现的效果就是我们可以使用 Access 的统一登录方式,管理我们所有的服务器了,再也不用记住所有的服务器密码了。(什么,你说为什么不设置 SSH 证书登录?我平时用很多终端设备,实在是懒得配置一遍)
同时因为有 Access 拦截,安全性也比单纯的密码大大提高了!
坑
但配下来才发现这个 Browser Rendered Terminal 就像是一个半成品,并不能很好的使用:
Tunnel 与 Access 的域名配置让人迷惑
这里就不得不吐槽以下 Cloudfare 产品的界面交互了,配置 Tunnel 的时候,我们需要绑定域名,这里很容易理解,这个域名会解析到你对应的服务上。
但当我们接下来设置 Access 的时候,神奇的是有需要输域名。其实也可以理解,毕竟 Access 也不是必须配合 Tunnel 来使用,但是两边输入的时候都会提示你会帮你设置 DNS,很让人担心是不是给我之前 Tunnel 覆盖掉。
Tunnel 与 Access 的配置有 Bug
先设置 Tunnel 的域名,再设置 Access 的域名,两个域名一样,会发现访问域名返回的是一个空白页面。
鼓捣了半天,把 access 的域名改成别的再改回来,就好了。
过了 Access 还是需要输入密码
Tunnel 只是帮你在服务器本地调用了 ssh localhost:22 这样的话,你其实还是需要输入账号和密码,到这里就蛋疼了,这不是脱了裤子放屁么。
目前的解决方式是禁止了 root 的登陆,然后设置了一个平时使用的用户,限制该用户只能通过本地 ssh 来登陆,这样的话这个用户可以设置一个非常简单的密码,输入一下成本也不高了。
远程登陆不能直接 ssh,而是需要经过 Access,让 Access 来保障安全。
说一下如何设置某个账户只能本地登陆。
启用
pam_access
:
编辑/etc/pam.d/sshd
文件,确保包含以下行(如果没有,则添加):1
account required pam_access.so
配置访问规则:
编辑/etc/security/access.conf
文件,添加以下规则:1
2
3+:work:127.0.0.1
+:work:::1
-:work:ALL这里尝试过使用
+:work:LOCAL
,发现不行,还是会被屏蔽,所以改为了 127.0.0.1。重启 SSH 服务:
1
sudo systemctl restart sshd
都设置完以后效果还不错,浏览器 terminal 做的字体什么的都挺好看。