0

如果可以从我的 Apache2 服务器接收到的数据包中检索远程 IP(也许通过自定义插件),它是否总是能保证准确?或者这个值是否像引用标题一样容易被欺骗?

我的预期用例是对未经身份验证的 API 调用进行速率限制。

4

3 回答 3

1

它不可靠。不仅因为它可以被欺骗,还因为一个网络元素可以让你的服务器看到不同的 IP 地址。

例如,在公司中通过代理访问 Internet 是非常典型的。根据配置,从您的服务器的角度来看,所有不同的用户都来自同一个 IP 地址。

在任何情况下,您都可以在许多情况下使用过滤器。例如,当您检测到来自同一 IP 地址的登录请求过多时,显示验证码。

于 2012-12-06T16:44:07.343 回答
1

如果它是一个 TCP 数据包,那么它对于发送主机将是准确的。除非您控制了相关的路由器,否则 TCP 数据包中的 IP 不能被欺骗。对于欺骗的源数据包,只有最初的 SYN 数据包会返回,然后来自服务器的 SYN+ACK 响应将发送到欺骗地址,而不是伪造的地址 - 例如,您不能进行完整的 3 次握手,除非您可以控制来自目标机器的数据包路由。

另一方面,UDP 数据包可以很容易地被伪造,你不能相信任何关于它们的东西。

同样,即使是代理服务器和 NAT 网关之类的简单事物也可以掩盖数据包起源的“真实”IP。您将获得一个 IP,但它将是网关/代理的 IP,而不是原始机器的 IP。

于 2012-12-06T16:55:56.503 回答
1

如果您打算对无效 API 调用进行速率限制,您可能需要考虑使用spamhaus 之类的服务。他们列出了可能是机器人和探测器的 IP。还有其他公司和名单。但是,如果您的意图是识别“坏人”,则源 IP 不太可能是正确的。

于 2012-12-07T00:10:28.157 回答