使用零信任来内网穿透

引子

家里的 NAS 一直想做个穿透，然后可以在外面看视频啥的，遇见了便宜的服务器就买了一个玩玩，发现买的服务器的厂商安全做的不是很好，自己的 NAS 就被爆破过一段时间，就很担心自己的数据丢失之类的。在玩 Cloudflare 的时候，发现他们提供 Zero Trust 服务，遂使用 CF 的服务来实现我的穿透需求。

关于零信任

零信任网络访问（Zero Trust Network Access），与之对应的网络访问模式叫做边界网络访问，这种信任模式呢会定义出什么设备什么网络是可信任的，什么设备什么网络是不可信任的，然后在可信任和不可信任之间建立起高墙，这样的墙就是我们说的 “防火墙”。

这种信任模式有他的好处，好处在于便于管理，一次定义，终身适用。但同时这中间存在了问题点。

首先，如果，出现了一种新的威胁，可以是病毒可以是攻击，这些威胁超出了防火墙的保护范围，那么这个防火墙就是形同虚设的。其次，攻击者可以通过某些方式，比如说社工绕过防火墙，从内部发起攻击。最后，边界信任的模型无法识别到来自被定义为信任的设备的攻击。这些弱点也使得边界模型需要做出改变才能适应现在的网络安全需求。

零信任网络访问模型就是解决边界模型问题的一种改良之策。首先，默认情况下，我们不应该去信任网络中的任何设备和区域，这点呢就是防止在边界信任模型中处于同一信任域中的内部设备相互攻击的情况。其次，信任要通过基于认证和授权重构访问控制的信任体系，对访问进行信任授权。最后呢，就是信任应该是动态的，就是说这个授权需要基于访问实时地进行评估和变换，不能说我第一次拿到授权之后，我换个设备还是这个授权。

Cloudflare 提供的零信任访问就是基于上面的理论形成的服务。特点：免费！

使用零信任

创建隧道

登陆 Cloudflare 后，会在主界面左侧看到Zero Trust。

如果是第一次使用，会让购买服务，自己使用的话只用购买免费版就好。
点击进入后，选择Access->Tunnels。

点击Create a tunnel，输入名字点击Save tunnel，在新的页面中会提示让选择自己的系统。

因为 Docker 的易用性，我推荐使用 Docker 来完成后面的操作。点击 Docker 图标后，下方的会弹出 Docker 使用的命令，建议在使用之前加上-d --net=host --name=<yourContainerName>，所有的命令看起来是这样的

Copy
docker run \
-d \
--net=host \
--name=<yourContainerName> \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate \
run --token <your token here>

Docker 会自己拉取所需要的镜像并运行。运行成功后，在刚才的页面底部会提示连接成功。点击Next。
在接下来的界面里输入的是公网访问的信息。

Domain选择自己有的域名，然后输入一个没在其他地方使用的Subdomain，在下面的 Service 里选择自己内网里的服务信息，比如，我内网中有个网页服务，用的是刚才使用 Docker 连接 CF 的那台服务器，我想把这个网页映射出来，我就可以选择HTTP服务，URL中输入localhost:80。端口这个根据个人本地的不同来做调整。输入完成后Save tunnel。
接下来，你就可以使用 Cloudflare 提供的服务来完成内网穿透了，访问刚才自己设置的域名，即可以访问自己的服务了。

二阶段认证

我放弃购买的服务器做穿透的原因就在这里，服务器的安全性我没法确定，好在 Cloudflare 也提供了认证服务。
回到Zero Trust页面，选择Access->Application->Add an application->Self-hosted

在接下来的页面里输入自己的应用名称，以及期望的认证有效时间（Seesion Duration），输入刚才自己创建的子域名。点击Next，进行Policy的编辑。
在Policy内输入名字，选择好Seesion Duration，往下翻，按照我图中的填写来配置邮箱的二阶段认证

这里要注意Require中邮箱地址，需要和注册的 Cloudflare 地址一致，就是我图中框出来的位置（如果想用其他邮箱，则需要在主界面中Manage Account->Members来添加其他邮箱），这里有个坑，CF 把我的邮箱首字母大写了，导致我输入自己的邮箱后，怎么都收不到验证邮件。
以上操作做完之后，后面的设置可以维持默认，点击Next往后就好。
设置完成后，访问自己的域名，就会发现需要输入邮箱地址来获取 OTP 了

输入在Policy中使用的邮箱获取 OTP 后就可以访问自己的应用了。

总结

Cloudflare 提供的零信任功能，带宽上虽然不是很大，但是看个 1080 的视频还是够用了，安全方面也解决了我对二阶段认证的需求，对我的资产有一定程度的保护，如果有和我类似的需求，Cloudflare 的这个应用还是可以尝试一下。（对比之下我司的 SDP 服务是真的有些拉跨了……）