我想设置一个安全组,只允许我的静态IP命中EC2服务器,但由于我使用Cloudflare而且它使用了一些IP /反向代理魔法,因此AWS安全组只能看到Cloudflare IP而不是我的实际静态IP。我看了一遍,找不到任何答案如何做到这一点。有没有人想到这个?
答案 0 :(得分:2)
您无法使用安全组设置执行此操作。
像Cloudflare这样的缓存代理使用其中一个IP地址创建与原始服务器的单独连接。
您需要在安全组中使用这些地址,并在Cloudflare更改列表时维护规则。但是,这份名单是公开的。
https://www.cloudflare.com/ips/
接下来,当CF-Connecting-IP
HTTP标头不包含您的IP地址时,您需要将Web服务器配置为拒绝请求。
您必须同时执行这两项操作,因为如果您不限制使用安全组的Cloudflare IP地址范围的流量,那么来自其他地方的流量(不是通过Cloudflare)可能会伪造包含IP地址的标头。
做完这两件事之后,你几乎已经完成了你的目标,但并不完全......因为Cloudflare缓存了回应。
因此,下一个问题是,您还需要在Cloudflare上禁用缓存,因为一旦您获取页面,它可能位于Cloudflare缓存中,其他人可能会访问它。
https://support.cloudflare.com/hc/en-us/articles/200168306-Is-there-a-tutorial-for-PageRules-
实际上,对于需要限制访问单个IP(或一小组)的情况,通过Cloudflare发送流量通常没有多大意义。
答案 1 :(得分:0)
您可以设置一个lambda函数来解析Cloudflare中的IP file并动态更新您的安全组。 AWSlabs on github有一个示例lambda函数,可以为CloudFront执行此操作。您将遇到的两个问题是您必须安排lambda函数运行,因为您无法订阅示例中的队列,并且可能会运行安全组规则50 is the limit。