2017-07-29 234 views
0

我想设置一个安全组,它只允许我的静态IP访问EC2服务器,但因为我使用Cloudflare,它使用了一些IP /反向代理魔术,AWS安全组只能看到Cloudflare IP,而不是我的实际静态IP。我看了一遍,也找不到如何做到这一点的任何答案。有没有人知道这一点?在使用Cloudflare时在AWS安全组中设置静态IP

回答

2

您无法使用安全组设置进行此操作。

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

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

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

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

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

你必须做两件事,因为如果不限制流量的CloudFlare的IP地址范围与您的安全组,然后从交通别处(不通过的CloudFlare)可以伪造包含IP报头地址。

完成这两件事后,您几乎完成了您的目标,但并不完全......因为Cloudflare会缓存响应。

因此,接下来的问题是,您还需要在Cloudflare中禁用缓存,因为一旦您抓取页面,它可能位于Cloudflare缓存中,其他人可能会访问它。

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

真的,因为你需要限制访问单个IP(或一小部分)的情况下,通常不会做出很大的意义,通过CloudFlare的发送流量。

+0

如果我们设置了适当的安全组,为什么我们需要配置我们的Web服务器来检查CF-Connecting-IP头?安全组是否会负责过滤非cf流量? –

+0

@geek_guy是的,安全组将阻止非Cloudflare流量,但这里涉及的问题只允许某个查看器IP地址访问该网站。安全组会看到Cloudflare IP,因此应用程序需要检查每个请求以查看Cloudflare报告其来源的IP地址。 –

0

您可以设置一个lambda函数来解析Cloudflare中的IP file并动态更新您的安全组。 AWSlabs on github有一个用于CloudFront的示例lambda函数。您遇到的两个问题是,您必须安排lambda函数来运行,因为您无法像示例中那样订阅队列,并且可能会用尽安全组规则,即50 is the limit