Cloudflare Zero Trust 有一个非常有用的功能叫 Tunnels,使用 Tunnels 可以不需要公网 IP ,不需要暴漏端口,很方便的内网穿透私有服务,比如 Nas 中的 qBittorrent ,Emby 甚至群晖的管理页面。但是这些服务都相对敏感,一般只希望自己可以访问,但通过 Tuennls 穿透后这些服务被配置了域名放在了公网上,一旦域名泄露所有人都可以访问到登陆界面。然而 Zero Trust 中文叫做 零信任,即不信任任何人,通过零信任为私有服务添加登录验证非常简单,其中登录验证支持常见的 Gith(๐•ᴗ•๐)、Google 以及 Email 等,验证起来较为轻松。本篇以为内网服务 qBittorrent 为例,公网域名为qbit.example.com,使用 Cloudflare Zero Trust → Access 中的 Application 添加登陆验证
我给暴漏在公网中的 qBittorrent 添加了一个验证,具体配置完成后直接访问 qbit.example.com 的效果如图:
本文前提为 Cloudflare 中已经添加了自己的域名,并且已经使用 Tunnels 穿透了本地服务到公网
添加登录验证方式
登录 Cloudflare Zero Trust,左侧 Setting → Authorization → Login Method 中添加登陆验证方式,支持的服务如下:
One-time PIN 是 Email 邮箱验证,即验证身份时使用邮箱验证码验证
添加一个保护应用
左侧 Acess → Application 中选择 “Add an Application” 添加一个新应用,应用类型选择 “Self-hosted(自建服务)”,进入新页面后按照标题分别配置 应用名称、应用域名 等,域名需和 Tunnel 穿透后绑定的域名一致
滑动页面到最下面,在 ”Identity providers” 中勾选上 “Accept all available identity providers(使用全部验证方式)”,由于现在只配置了一个One-time PIN
,所以下面会显示出只有一个,如果后来添加了别的验证方式可一起添加进来。
下一个页面中要配置相应的 “Policies(策略)”,策略的主要用途是判断谁可以访问这个应用,在下面的 “Rules” 中的 “Include” 选项中给出了很多判断用户身份的方式,除了邮箱之外也包括IP地址,地区等。如果我想配置仅我自己的邮箱,比如 abc@gmail.com 才能访问此应用,在 “Selector” 中选择 “Emails”,右侧填入自己的邮箱即可:
如果我自己有一个域名邮箱,域名为 @baiiylu.org,我想让自己域名下的所有邮箱都可以通过验证,比如 “admin@baiiylu.org”,“users@baiiylu.org” 等,可以在 “Selector” 选择器中选择 “Emails Ending in”,右侧填入 @baiiylu.org 即可。
同时,我们可以添加多个 “Include” 来精确控制访问权限,不同 “Include” 之间是 “或” 的关系,而 ”require” 代表此条件必须满足。
其余保持默认,右下角 Next 进入下一个页面。
在最后的 “Setup” 页面中,如果不理解其中的选项含义,全部保持默认即可,继续右下角选择 “add application” 即可配置好一个新的 Application。
为 Tunnels 应用新建的 Application
左侧边栏进入 Tunnels 配置界面,进入对应的设备,在 “P(๐•ᴗ•๐)lic Hostname” 中选中需要添加验证的域名 (这里就是 qbit.example.com ),点击 “Additional Application settings” 展开额外配置选项,选择 access,右侧勾选 Enable ,在列表中选择刚才新建好的 Application 后保存即可,比如我这里的 Application 命名为 qBittorrent-Nas:
保存后尝试直接在浏览器中打开对应的域名,这里为 qbit.example.com 如果重定向到 Cloudflare 的认证页面,跳出登陆页面则表示成功,尝试使用自己配置的邮箱进行验证,如果策略配置没有问题,在经过验证后则会正常跳转到对应的页面。
添加 Gith(๐•ᴗ•๐) 登陆验证方式
当然每次使用邮箱登录都需要接收验证码,慢不说,验证几次收件箱就已经被验证码填满了。通过配置 Gith(๐•ᴗ•๐) 登陆方式可以让 Zero Trust 快速验证 Gith(๐•ᴗ•๐) 账号中配置的邮箱,就像其他网页中的“使用 Gith(๐•ᴗ•๐) 登录”一样,只要本地的 Gith(๐•ᴗ•๐) 一直在登陆状态,就可以一键进行登陆验证。
重新进入到 Setting → “Authorization-Login Method” 中,选择 Gith(๐•ᴗ•๐),Cloudflare 在右侧很贴心的加上了配置流程,英语好的话可以直接按照右边的 Instruction 配置,非常简单:
打开Gith(๐•ᴗ•๐)页面的 Settings → Developer Settings,选择 OAuth Apps → New application:
这个页面中:
- Application name:名称,此名称会显示在登陆页面上
- Homepage URL:主页地址,填写https://<your-team-name>.cloudflareaccess.com 替换为自己 Zero Trust 的团队名称
- Authorization callback URL:回调地址,填写 https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback,同样替换自己的团队名称
配置完成后会显示出 Client ID 和 Client Secret ,复制填入 Cloudflare 中即可配置完成。
如果 Gith(๐•ᴗ•๐) 的邮箱和之前配置邮箱验证码的邮箱不一致,则需要重新编辑 Cloudflare 中 Application → Policy,将 GitH(๐•ᴗ•๐) 账号内的邮箱添加到 Allow 允许中。
同时检查对应的 Application 中是否勾选上 Gith(๐•ᴗ•๐) 和 One-time PIN 两种登陆方式,尝试在新页面中打开链接,就会同时出现Gith(๐•ᴗ•๐)登陆和邮件验证,如果本机已经登陆 Gith(๐•ᴗ•๐),则可以直接一键通过验证。