免责声明:
本主题适用于 HTTP 流量(在 Linux 平台上)。对于以下问题,ELB(价格合理)可能有一个很好的解决方案。但到目前为止,我找不到任何。这就是为什么我需要专家建议。
问题:
多年来,我一直在使用 AWS Elastic Load Balancing (ELB)。突然意识到 ELB 有一个巨大的(对我来说至关重要的)缺点......这是通过IP阻止入站连接。
因为一旦你落后于ELB,你的服务器内部防火墙(如:iptables
)就已经毫无用处了,因为来自ELB的所有转发流量都被标记为ELB IP(而不是真正的客户端IP)。ELB 只转发 http 标头X-Forwarded-For
真实客户端 IP,这对 iptables
毫无用处。(除非你能建议有一个像iptables
这样的Linux防火墙,它也可以处理带有XFF(X-Forwarded-For)标头的HTTP流量。
我知道这是此类反向代理的正常行为,但我需要放置防火墙!我知道在 AWS 上,建议使用 VPC 和网络 ACL 规则按 IP 阻止入站连接。但是 NACL 有规则限制!(AWS 最多只允许 NACL 中的规则总数为 40 条)
想象一下,您正在运行一个高流量的公共网站,然后需要阻止每天检测到的大量不良IP。这40条规则将如何帮助?
需要建议:
我开始考虑使用 Nginx
作为负载均衡器(在单独的实例上)。我以前用过Nginx
,这是一个很有前途的。当然,可以取代ELB。然后:
- 使用该
Nginx
实例上的iptables
!(因此,该虚拟机将成为LB +防火墙)
但在我采取行动之前,
- 有没有更好的专家建议?
- 在这里不使用ELB的最大区别(影响)是什么?
谢谢大家的建议。
使用 ELB 仍然很有价值,因为冗余是服务的一部分。
使用Nginx作为负载均衡器将是单点故障,除非您还设置了备用服务器和类似heartbeat
自动故障转移到备用Nginx服务器。
考虑同时使用 ELB 和 Nginx 的分层方法。ELB 可以将流量转发到不同可用区中的两个或多个 Web 主机,每个主机都运行 Nginx。使用 Nginx 和 fail2ban,您仍然可以按 IP 地址阻止主机。一般方法的工作原理如下:
- 将 Nginx 配置为在日志文件中记录真实 IP,而不是 ELB IP。
- 配置 fail2ban 以监视 Nginx 访问日志并查找要阻止的 IP。
- 当fail2ban检测到它应该阻止的IP时,它会更新一个Nginx包含文件并重新加载Nginx以使规则生效。 fail2ban 以相同的方式使禁令过期。
您还可以排除 fail2ban 并手动维护要阻止的 IP 列表。
有关该方法的详细说明,请参阅"Nginx + Fail2ban Block IP behind AWS Load Balancer"。
这个问题问已经有一段时间了,但我认为值得指出的是,经典和下一代应用程序负载均衡器现在都支持安全组来限制对负载均衡器的访问 - http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-update-security-groups.html
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.elb.html
如果需要,可以将侦听器协议从 HTTP 更改为 TCP。 用于按原样转发请求的负载均衡器。这可以防止负载 从重写标头(包括 X-转发-For)的平衡器并执行 不适用于粘性会话。
为那些希望在带有apache,ELB和ACL的aws上使用Fail2Ban的人制作的工具: https://github.com/anthonymartin/aws-acl-fail2ban
它可用于检测和防止 DoS 攻击和 ec2 实例滥用。