如果可以从我的 Apache2 服务器接收到的数据包中检索远程 IP(也许通过自定义插件),它是否总是能保证准确?或者这个值是否像引用标题一样容易被欺骗?
我的预期用例是对未经身份验证的 API 调用进行速率限制。
如果可以从我的 Apache2 服务器接收到的数据包中检索远程 IP(也许通过自定义插件),它是否总是能保证准确?或者这个值是否像引用标题一样容易被欺骗?
我的预期用例是对未经身份验证的 API 调用进行速率限制。
它不可靠。不仅因为它可以被欺骗,还因为一个网络元素可以让你的服务器看到不同的 IP 地址。
例如,在公司中通过代理访问 Internet 是非常典型的。根据配置,从您的服务器的角度来看,所有不同的用户都来自同一个 IP 地址。
在任何情况下,您都可以在许多情况下使用过滤器。例如,当您检测到来自同一 IP 地址的登录请求过多时,显示验证码。
如果它是一个 TCP 数据包,那么它对于发送主机将是准确的。除非您控制了相关的路由器,否则 TCP 数据包中的 IP 不能被欺骗。对于欺骗的源数据包,只有最初的 SYN 数据包会返回,然后来自服务器的 SYN+ACK 响应将发送到欺骗地址,而不是伪造的地址 - 例如,您不能进行完整的 3 次握手,除非您可以控制来自目标机器的数据包路由。
另一方面,UDP 数据包可以很容易地被伪造,你不能相信任何关于它们的东西。
同样,即使是代理服务器和 NAT 网关之类的简单事物也可以掩盖数据包起源的“真实”IP。您将获得一个 IP,但它将是网关/代理的 IP,而不是原始机器的 IP。
如果您打算对无效 API 调用进行速率限制,您可能需要考虑使用spamhaus 之类的服务。他们列出了可能是机器人和探测器的 IP。还有其他公司和名单。但是,如果您的意图是识别“坏人”,则源 IP 不太可能是正确的。