![Cloudflare“Access”服务真正的安全](https://linux22.com/image/721150/Cloudflare%E2%80%9CAccess%E2%80%9D%E6%9C%8D%E5%8A%A1%E7%9C%9F%E6%AD%A3%E7%9A%84%E5%AE%89%E5%85%A8.png)
Cloudflare 访问是 Cloudflare 推出的一项颇具吸引力的新功能,它或多或少基于 Google 的超越集团(具有登录功能的反向代理,可在访问内部网络应用程序时替代 VPN)。
我担心它们的实施是否真的安全。
BeyondCorp 背后的想法是,当受保护的应用程序服务器没有任何公共 IP 并且无法直接从互联网访问时,服务器应该位于网络的“边缘”。
如果是 Cloudflare 实施 - 应用程序服务器必须具有公共 IP(与其其余 CDN 服务一样),并且它被其自己的 IP“隐藏”。
隐藏 IP 可能会被错误地暴露(甚至通过某些 JavaScript)或被其他一些技术检测到。即使您的应用程序有防火墙,仅限制来自 Cloudflare IP 的流量 - 这些 IP 也可能被欺骗。
我是否遗漏了什么?
希望 Cloudflare 的某个人能够解决这些问题。
谢谢
答案1
解决此问题的最佳方法是使用 Cloudflare 的阿尔戈隧道将您的服务器连接到 Cloudflare。使用 Argo Tunnel,您的服务器连接到 Cloudflare,而不是 Cloudflare 连接到您的服务器。因此,您的服务器不需要有公共 IP 地址或完全暴露在互联网上——它只需要能够进行传出连接。
如果 Argo Tunnel 不适合您,另一个选择是配置您的服务器,使其仅接受来自 Cloudflare 的连接。您可以通过将防火墙配置为仅接受来自以下来源的连接来实现此目的:Cloudflare 的 IP 地址或通过启用经过身份验证的 Origin Pulls然后将您的服务器配置为需要 HTTPS 连接来使用 Cloudflare 的客户端证书进行身份验证。警告:在这些非 Argo-Tunnel 解决方案中,重要的是您的服务器仅接受标Host
头包含您的域的 HTTP 请求。否则,攻击者可以注册自己的 Cloudflare 帐户并在其 DNS 设置中输入您的 IP 地址,从而导致请求“从 Cloudflare”发送到您的服务器 - 但他们会将攻击者的域包含在Host
标头中。要验证Host
标头,您可以例如nginx
在服务器前面设置反向代理,并将其配置为default_server
始终返回 404。但是,如果您使用 Argo Tunnel,则无需担心标Host
头。
答案2
如果您决定选择此选项,请不要忘记验证请求标头中的 json webtoken,并将 cloudflare 源 IP 列入白名单。仅启用白名单并不能保证安全性,因为如果其他 cloudflare 用户以某种方式获取有关您的原始 IP 地址的信息,他们可能会使用 cloudflare webworker 来访问您暴露的端点。