Amazon Web Services,VPC 托管 ELB 后面的 mod_remoteip 偶尔会发送 IPv6 地址

Amazon Web Services,VPC 托管 ELB 后面的 mod_remoteip 偶尔会发送 IPv6 地址

在 Amazon Web Services 上,我有一个运行 Apache 和 mod_remoteip 的 EC2 实例。该实例位于虚拟私有云 (VPC) 托管的 Elastic Load Balancer (ELB) 后面。

在 mod_remoteip 配置文件中,我有:

远程IPTrustedProxy 172.22.64.0/20

远程IPTrustedProxy 172.22.80.0/20

这些是 ELB 可以驻留在 us-west-1a 和 us-west-1c 子网中。

在 Amazon Route 53 中,对于 MyDomain.com 和 www.MyDomain.com,我都有指向 ELB 的 A-IPv4 别名记录(例如:dualstack.my-load-balancer-1-251757805.us-west-1.elb.amazonaws.com。)托管区域没有 AAAA-IPv6 记录。

这个设置效果很好,允许我的代码轻松访问用户的 IP 地址。

但是,mod_remoteip 偶尔会将 IPv6 地址填入为用户的 IP 地址。这个 IPv6 地址在我的设置中造成了问题,因为我使用的一些外部服务不接受 IPv6 地址。我必须将 IP 地址限制为 IPv4。

我的印象是,由于我在托管区域中没有我的域的 AAAA-IPv6 别名记录,并且因为 VPC 中的 ELB 仅使用 IPv4 地址(http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-internet-facing-load-balancers.html) mod_remoteip 永远不应该向我的代码传递 IPv6 地址。显然情况并非总是如此。

我的问题是:使用标准的 Amazon Web Services 基础设施或 Apache/mod_remoteip 配置,是否有某种方法可以仅允许访问者使用 IPv4 连接到 ELB?

答案1

dualstack.my-load-balancer-1-251757805.us-west-1.elb.amazonaws.com

这是一个混合记录,能够返回AAAAA响应,无论(据我所知)您在托管区域中如何配置它,但测试表明,如果您将其用作别名目标,它将仅返回别名匹配的 RR 类型的记录。当然CNAME,作为,它将导致返回任一类记录。

我之前建议删除dualstack.前缀,但正如您所说,使用别名记录,您无法删除它 - 但进一步的测试表明它不会造成任何伤害。

使用CNAME,您可以选择省略它,或者如果出于某种原因您想要 ipv6-only,您可以添加前缀ipv6.而不是dualstack.。但是,我不会建议这样做有什么区别,因为A别名在指向dualstack.条目时会正确运行,只返回A而不是AAAA,即使您询问。

如果如您所指出的,指向此 ELB 的域名没有AAAA配置别名,并且 Route 53 没有对AAAA您的主机名请求做出任何记录,那么很可能是 IPv6 传入的请求X-Forwarded-For:毫无理由地传入 - 它们是蜘蛛、机器人等,并且可能因此被阻止。

我经常看到传入请求的标头中包含我的 ELB 的 IP 地址之一Host:(而不是来自我的某个域的正确主机名),或者主机标头中包含 ELB 主机名本身。这些不是合法请求,我会使用503 Service UnavailableHAProxy 中的规则阻止它们,我通常在 ELB 后面运行 HAProxy 以实现更精细的 http 路由控制。

如果有合法的站点访问者通过 IPv6 访问您的网站,则需要进行调查和解释,但我怀疑您看到的流量不是“真实”流量。

我还没有找到在 ELB“内部”真正阻止它的方法。

相关内容