我一直在想,是否有一种技术可以根据给定 IP 发出请求的速率来中继(减慢)对给定 IP 的响应?
例如,我有一台 Apache 服务器,它提供“繁重”的 API 服务,如果服务器未满负荷,我想将其限制为 1 个请求/2 秒/IP,如果服务器满负荷,则采用“公平使用”策略。我可以选择使用特定 ID(例如 /req.php?id=157)来提升特定调用,并以“奖励率”例如 10 个请求/秒来提升特定调用。
此外,如果有人超过了例如每小时 100 个请求,他将被提示错误响应,提示他升级等。
对我来说,这听起来像是许多系统中的常见要求,我希望有一些相关的框架。您是否知道 php、python、java 或甚至 apache 模块中的任何内容?
答案1
答案2
减慢请求率就是 DDOS 的用途。
不要帮助 DDOSers 实现他们的目的。
答案3
在 Apache 级别执行此操作不仅不切实际,而且会带来巨大的开销。如果您需要对每个 IP 进行速率限制,最好的方法是在操作系统的防火墙内执行此操作(例如 FreeBSD 中的 IPFW)。
从长远来看,它不仅更加灵活,而且由于它在系统级别运行,因此过滤速度极快。
关于实际的 API 实现,您应该在 API 应用程序中处理,而不是在 Apache 中。将请求记录到 Memcache 等快速介质中,并让 cron 检索并将数据存储在数据库中以供处理。当用户 XYZ 达到阈值时,只需在握手或下一个请求中强加它即可。