【问题标题】:AWS ec2 instance getting many requests from private IP addresses?AWS ec2 实例从私有 IP 地址收到许多请求?
【发布时间】:2021-01-01 08:00:19
【问题描述】:

我在 AWS 上有一个网站,最近我决定运行一个 php 函数来跟踪在哪里/谁在请求我的网站。我从 3 个私有 IP 地址收到对我主页的持久请求。它们相隔 20 秒,每 30 秒发生一次。
172.31.44.xxx
172.31.8.xxx
172.31.29.xx
私有 IP 如何请求我的网站?我无法确定连接的来源。
我正在使用这个 PHP 代码来获取 IP。

if(!empty($_SERVER['HTTP_CLIENT_IP'])){
    $ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
    $ip = $_SERVER['REMOTE_ADDR'];
}

我的代码中是否有错误以正确检索 IP?或者还有其他我不知道的事情发生。让我知道你的想法,
谢谢!
编辑 - PHP $_SERVER 来自请求的响应

{
  "array": {
    "USER": "apache",
    "HOME": "/usr/share/httpd",
    "SCRIPT_NAME": "/index.php",
    "REQUEST_URI": "/",
    "QUERY_STRING": "",
    "REQUEST_METHOD": "GET",
    "SERVER_PROTOCOL": "HTTP/1.1",
    "GATEWAY_INTERFACE": "CGI/1.1",
    "REMOTE_PORT": "29208",
    "SCRIPT_FILENAME": "/var/www/html/index.php",
    "SERVER_ADMIN": "root@localhost",
    "CONTEXT_DOCUMENT_ROOT": "/var/www/html",
    "CONTEXT_PREFIX": "",
    "REQUEST_SCHEME": "http",
    "DOCUMENT_ROOT": "/var/www/html",
    "REMOTE_ADDR": "172.31.29.19",
    "SERVER_PORT": "80",
    "SERVER_ADDR": "172.31.22.151",
    "SERVER_NAME": "172.31.22.151",
    "SERVER_SOFTWARE": "Apache/2.4.46 ()",
    "SERVER_SIGNATURE": "",
    "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin",
    "HTTP_ACCEPT_ENCODING": "gzip, compressed",
    "HTTP_USER_AGENT": "ELB-HealthChecker/2.0",
    "HTTP_CONNECTION": "close",
    "HTTP_HOST": "172.31.22.151",
    "proxy-nokeepalive": "1",
    "UNIQUE_ID": "X@7byXAPCfpNYTyp8Hv5xAAAAAQ",
    "FCGI_ROLE": "RESPONDER",
    "PHP_SELF": "/index.php",
    "REQUEST_TIME_FLOAT": 1609489353.920435,
    "REQUEST_TIME": 1609489353
  }
}

【问题讨论】:

  • 回声'
    ; 'print_r($_SERVER);死;阵列上打印什么内容请检查是否找到 REMOTE_ADDR 后的第一步
  • 您是否有任何健康检查设置,例如负载均衡器、路由 53?
  • 我确实有一个负载均衡器和路由 53
  • 没错,就是健康检查器ELB-HealthChecker/2.0
  • 这是健康检查器,它将确保负载均衡器可以与主机通信。它将在内部执行此操作,它将根据您的健康检查配置按计划运行。

标签: php amazon-web-services server


【解决方案1】:

172.31.0.0/16 是默认 VPC 的 CIDR,如下所示,因此这些请求来自您的 VPC 内部。这就是为什么私有 IP 可以请求您的网站。
https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html

从您的请求中可以看出,您有 "HTTP_USER_AGENT": "ELB-HealthChecker/2.0",这意味着它来自 ELB 健康检查。您可以通过以下链接了解更多关于 ALB 健康检查的信息:
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html

【讨论】:

    【解决方案2】:

    您可以考虑在 ELB 中使用 X-Forwarded-For 标头来捕获您的客户端 IP 地址,而不是编写自己的代码来跟踪谁在请求您的网站。

    这个tutorial 可以帮助你。这个discussion 也可能有帮助。

    【讨论】:

      【解决方案3】:

      AWS 中的典型 ec2 机器将位于 AWS 公共网络中(在区域内的可用区内)。面对外部世界(AWS 之外),AWS 拥有外部/全局 IP 地址,可以分配给您的 ec2 机器的接口。但是,在 AWS 内部,您的机器和其他机器位于具有私有 IP 地址(如 172.31.xx.yy)的子网中。

      您可以通过 ssh 进入您的 ec2 机器并执行ifconfig 来验证这一点。通过基本的网络配置,您可能会看到 eth0 的 inet 地址为 172.31.xx.yy 和 lo(环回)。因此,您收到来自 172.31.yy.zz 的请求也就不足为奇了——这些请求来自 AWS 云内部。

      您的公共 IP 地址如何?这只是通过 AWS 配置与您的 ec2 机器相关联(您可以随时将分配更改为不同的 IP 地址),并且 AWS 具有 NAT/NAPT 技术来进行内部和外部 IP 地址之间的映射。

      如果您仍希望阻止来自其他内部机器的此类请求,您不妨考虑 AWS Virtual Private Cloud (VPC),它允许您的 ec2 机器在逻辑隔离的云中自行关闭,从而隔离您的机器) 来自其他内部机器的那些讨厌的请求。我认为使用 VPC 没有额外费用。有一次,一个客户要求它,这就是我们发现它的方式。事实证明,我们可以在几分钟内轻松完成设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-01
        • 2021-04-19
        • 1970-01-01
        • 2018-11-15
        • 2021-02-18
        • 2021-04-13
        • 2014-03-23
        • 1970-01-01
        相关资源
        最近更新 更多