使用 AWS WAF 阻止 IP,以便只有连接到 VPN 的用户才能访问 CloudFront

Blocking IP's using AWS WAF so that only users connected to a VPN can access CloudFront

目标: 使用 AWS WAF 过滤掉到达 CloudFront 的流量,以便只有连接到 OpenVPN 网络的用户才能访问 Web 应用程序。

OpenVPN 将任何连接的用户分配到 172.xx.yyy.z/a 网络范围内的 IP。
因此,我通过 Web ACL 的 WAF 规则将此范围列入白名单,并将任何其他 IP 列入黑名单。
但是,我无法访问该站点。

查看 CloudWatch,很明显这是因为 VPN 分配的 IP 实际上并未用于访问 Web 应用程序。它是修改后的 IP,与我设备的 Public IP 非常相似。

据我所知,我无法确定这些 'custom' IP 的范围。鉴于此,我如何确保只有 VPN 连接的用户才能访问该站点?

我是不是漏掉了什么重要的东西?

172.16.0.0/12 IP 地址是 private addresses (172.16.0.0 -- 172.31.255.255),无法在 public 互联网上路由。

如果您引用的 IP 在此范围内,则这是专用网络上的地址,即 VPN 隧道。 VPN 远端的设备将可以访问互联网并拥有 public IP 地址,可在 public 互联网上路由,以及 CloudFront 所见。

您需要知道您的访问者使用的 VPN 服务的所有 Public IP CIDR 块,否则您无法按 IP 块。

尽管您可以通过 HTTP-header 进行限制。如果您检查通过的连接(没有 WAF),您可以从请求中了解这一点。

最终解决方案是确保所有流量都强制通过 OpenVPN。

这意味着连接到 VPN 的任何人都将拥有分配给 VPN 服务器的 public IP。

因此,此 IP 是唯一允许通过 WAF 访问该站点的 IP。

请注意,最好在内部路由流量

根据上面的评论:

sounds like you are using a 3rd party service. "It is a modified IP that is very similar to the Public IP of my device."

这似乎是因为 VPN 用户正在访问资源的外部寻址(通过 CloudFront 或其他方式),并且该外部地址可能会通过第三方解决,例如 Cloudflare 或通过 AWS 服务本身进行屏蔽。它可能是通过 AWS 服务(所以技术上 不是 “第 3 方”)但结果是相同的 => 屏蔽寻址。我相信这就是 OP 指出的问题存在的原因。

AWS 刚刚在过去几周推出了 CloudFront-Viewer-Address headerhelps 根据您的选择解决了该问题。

我建议(强烈)不要使用 public IP 作为您的 VPN 网络的出口节点,而是考虑改进您的 VPN 的路由和相关资源,以便通过引入或改进您的路由并转向主要基于 VPC 的方法,“内部”流量不会进入开放的互联网。也许从亚马逊的 an introduction to the VPC 开始。