使用 Cloudflare 时在 AWS 安全组中设置静态 IP

Setting up a static IP in AWS Security Group while using Cloudflare

我想设置一个只允许我的静态 IP 访问 EC2 服务器的安全组,但是因为我使用 Cloudflare 并且它使用了一些 IP/reverse 代理魔法,AWS 安全组只能看到Cloudflare IP 而不是我的实际静态 IP。我环顾四周,找不到如何执行此操作的任何答案。有人解决了吗?

您不能使用安全组设置执行此操作。

Cloudflare 等缓存代理使用其 IP 地址之一创建到原始服务器的单独连接。

您需要在您的安全组中使用这些地址,并在 Cloudflare 更改列表时维护规则。但是,列表是 public.

https://www.cloudflare.com/ips/

接下来,您需要配置您的 Web 服务器以在 CF-Connecting-IP HTTP header 不包含您的 IP 地址时拒绝请求。

https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-

您必须同时执行这两项操作,因为如果您不使用您的安全组限制流量到 Cloudflare IP 地址范围,那么来自其他地方(不是通过 Cloudflare)的流量可能会伪造包含 IP 的 header地址。

完成这两件事后,您几乎已经完成了您的 objective,但还不完全...因为 Cloudflare 会缓存响应。

所以,下一个问题是,您还需要在 Cloudflare 禁用缓存,因为一旦您获取了一个页面,它可能在 Cloudflare 缓存中,其他人可能会访问它。

https://support.cloudflare.com/hc/en-us/articles/200168306-Is-there-a-tutorial-for-PageRules-

实际上,对于需要限制对单个 IP(或一小部分 IP)的访问的情况,通过 Cloudflare 发送流量通常意义不大。

您可以设置一个解析 IP file from Cloudflare and update your security groups dynamically. AWSlabs on github has an example lambda function that does it for CloudFront. Two problems you'll run into are that you'll have to schedule to lambda function to run since you can't subscribe to a queue like in the example and possible running out security group rules, 50 is the limit 的 lambda 函数。