我有2个域名。 我需要允许某些IP地址如下所示:
我不是一个基础设施人员,但我带着这个想法来。
build议的解决scheme是一个好的设置,还是应该完全离开或调整它?
2平衡器解决scheme的问题是,他们中的任何一个都将不分青红皂白地接受任何Host头,并将请求转发给服务器。 将多个平衡器指向同一台服务器没有任何问题,但是如果恶意用户知道a.example.com ,则只需连接到a.example.com平衡器并注入,即可a.example.com绕过安全组设置Host: b.example.com在他们的请求,实例不能区分。
ALB为每个传入请求添加一个HTTP标头X-Forwarded-For 。 该头部中最右边的值表示连接客户端的实际IP地址,不能伪造。 最右边的值左边的任何地址都是由客户端(通常是代理或脚本小子)提供的,为了您的目的,这些地址是不可信的,毫无意义的。 但是右边的是准确的。
最简单的configuration是使用单个ALB,并且对于接受实例上的HTTP连接(例如Nginx,Apache)的任何情况,只要Host标头包含b.example.com,但是X-Forwarded-For不以可信的IP 结束 ,例如203.0.113.50。 错误可能是403 Forbidden但也许更好可能是503 Service Unavailable 。
通过设置两个平衡器和一个受安全组或NACL限制的平衡器,您的实例或平衡器需要通过a.example.com平衡器阻止对b.example.com请求。 实例不能,因为识别哪个平衡器发送请求是不实际的。 当他们缩放或者失败(并且恢复)时,他们的内部地址改变。
通过一个ALB,通过Host头或者path模式匹配,我们可以通过创build一个没有实例赋值的虚拟目标组来对特定请求进行黑洞,所以a.example.com平衡器可以使用这种configuration的黑客请求b.example.com。
或者,您可以将Amazon Web Application Firewall(WAF)与ALB一起使用,以阻止任何意外的请求。 无论如何,如果您计划使用WAF,这是一个不错的select。
但是,如果您使用WAF,那么您不需要两个平衡器…您可以为两个站点使用单个平衡器,并在WAF上添加规则以阻止对Host: b.example.com请求Host: b.example.com 除非客户端IP匹配允许列表。 WAF唯一的警告是,由于每次请求都会检查,这意味着WAF中断会导致您的站点中断…所以WAF被devise为失败。 WAF故障意味着所有的stream量都被允许,但不太可能出现这样的故障。 WAF是完全pipe理的,所以你没有必要维护。