AWS ec2实例从私有IP地址收到许多请求



我在AWS上有一个网站,最近我决定运行一个php函数来跟踪哪里/谁在请求我的网站。我收到3个私人IP地址对我主页的持续请求。它们相隔20秒,每30秒发生一次
172.31.44.xxx
172.31.xxx
272.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的错误?或者还有其他我不知道的事情发生了。让我知道你的想法,
谢谢!
EDIT-来自请求的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
}
}

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

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

本教程可能会对您有所帮助。这一讨论也可能有所帮助。

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

您可以通过登录ec2机器并执行ifconfig来验证这一点。使用基本网络配置,您可能会看到inet地址为172.31.xx.yy的eth0和lo(环回(。因此,您收到172.31.yy.zz的请求并不奇怪——这些请求来自AWS云中。

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

如果您仍然希望阻止来自其他内部机器的此类请求,您可能希望考虑AWS虚拟私有云(VPC(,它允许您的ec2机器在逻辑隔离的云中自行关闭,从而将您的机器与来自其他内部计算机的讨厌请求隔离开来。我认为使用专有网络不需要额外收费。有一次,一个客户要求它,我们就是这样发现的。事实证明,我们可以在几分钟内轻松设置它。

最新更新