【问题标题】:Getting amazon network IP's and not actual client IP's behind ALB (Xforward proto)获取亚马逊网络 IP 而不是 ELB 后面的实际客户端 IP(X 转发原型)
【发布时间】:2018-11-28 01:46:47
【问题描述】:

社区成员您好,

我正在为我的电子商务网站使用 ALB(应用程序负载均衡器)。在负载均衡器后面有两个 ec2-linux 实例,它们通过 ALB 获取客户端流量(两个 ec2 实例上都有 web 服务器 tomcat7)。

我正在使用 X-Forwarded-For 标头来获取我的 ec2 实例上的实际客户端 IP,这在获取客户端 IP 方面工作正常。 我 70% 的客户端 IP 是访问我网站的支付页面的实际客户端 IP(我正在我的电子商务网站上进行产品销售。)

30% 的 IP 是 AWS 网络运营 IP,就像下面的 ip 那些 Ec2 网络 IP 也访问我网站的付款页面(但我没有从这些亚马逊网络 IP 获得任何生产销售)

https://www.whois.com/whois/54.175.230.41
https://www.whois.com/whois/34.234.97.242
https://www.whois.com/whois/52.91.159.209
https://www.whois.com/whois/34.224.173.149

请在此处查看以上 4 个示例 URL 组织名称:Amazon Technologies Inc.

OrgTechName:Amazon EC2 网络运营


所以我很困惑为什么我得到亚马逊网络 IP(这些亚马逊 ec2 网络 IP 是实际客户端和亚马逊 ALB 之间的路由器还是这些 Ip 是负载均衡器的 IP 而不是客户端 IP:我的 java 代码在下面给出获取客户端IP) 我是否应该在亚马逊 ALB 上使用 aws waf 阻止他们。 如果我阻止他们,我最终会失去实际的客户流量吗?

或 为什么我在使用 x-forward-for 标头时没有为所有流量的 30% 获得客户端真实 IP? 我的java代码是:

public static String getClientIpAddr(HttpServletRequest request) {
    String ip = request.getHeader("X-Forwarded-For");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("HTTP_CLIENT_IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getRemoteAddr();
    }
    return ip;
}

我只想保存实际访问我网站的真实客户端 IP(使用 x-forward 标头)。 X-Forward 标头是否提供空值??

问候, 尤格迪普

【问题讨论】:

  • 您可能应该尝试捕获 complete 请求,这里...例如,User-Agent 标头可能会让您了解流量的性质。在我合作的一个组织中,他们的大部分 Internet 访问流量通过一条私有线路到达 AWS,然后通过 EC2 代理实例的出站连接实际到达外部站点(这违反直觉,但它是出于审计、合规性和出口控制目的)...因此,如果该办公室的某人连接到您的站点,这正是您所看到的。
  • 谢谢迈克尔..我阻止了那个特定的用户代理。

标签: amazon-web-services amazon-ec2 tomcat7 amazon-elb x-forwarded-for


【解决方案1】:

这 4 个 IP 是亚马逊拥有的 IP。我在这里看到了两种可能性:

  1. 它们不是您的 ELB。我相信如果他们是您的 ELB,您应该从您的 VPC CIDR 块中看到一个 IP(例如,检查 IP 显示的健康检查请求)。您可以在控制台的 EC2 > Network Interfaces 中查看 ELB 当前的 IP。在这里,您将找到所有东西的网络接口,包括负载均衡器。将显示他们的公共和私有 IP。验证这些 IP 不会显示在该列表中的任何位置,以确认它们不是您自己的。
  2. 如果它们是您的 ELB IP,那么您的代码可能会获取您的 ELB 健康检查的公共 IP,请仔细检查您的健康检查所访问的页面。

【讨论】:

  • 感谢 Brandon.. 是的,这些不是 ELB IP 或 ELB 健康检查。我阻止了那个特定的用户代理。
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 2011-10-31
  • 1970-01-01
  • 2020-08-23
  • 2012-08-19
  • 2016-01-06
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多