9

我有一条路径(例如 mysite.com/myapiendpoint),它既是服务资源密集型的,又很容易被机器人滥用。我需要将对该特定路径的访问速率限制为每个客户端 IP 地址每分钟 10 个请求。如何才能做到这一点?

我正在托管一个前面有 CloudFront 和 AWS WAF 的 EC2 实例。我启用了标准的“基于速率的规则”,但对于我的应用程序,每个 IP 地址每分钟至少 2,000 个请求绝对不可用。

我正在考虑为此使用 API Gateway,并且过去曾使用过它,但据我所知,它的速率限制不是基于 IP 地址,因此机器人会简单地用完限制,而合法用户将不断被拒绝使用端点。

我的站点不使用任何类型的会话,因此我认为我不能在服务器本身中进行任何类型的速率限制。另外请记住,我的网站是单人操作的,我对 AWS 有点陌生 :)

如何将每个 IP 的使用限制为每分钟 10 个请求,最好是在 WAF 中?

[编辑]

经过更多研究,我想知道是否可以将标头转发到源(运行节点/快递)并使用速率限制器包。这是一个可行的解决方案吗?

4

3 回答 3

14

我不知道这对您是否仍然有用 - 但我刚刚从 AWS 支持人员那里得到了一个提示。如果多次添加限速规则,可以有效减少每次请求的数量。基本上,每次添加规则时,都会为每个 IP 计算一个额外的请求。所以说一个IP发出一个请求。如果您应用了 2 个速率限制规则,则该请求将被计算两次。所以基本上,IP 只需要发出 1000 次请求,而不是 2000 次请求,就会被阻止。如果添加 3 条规则,它将对每个请求计数 3 次 - 因此 IP 将在 667 个请求时被阻止。

他们澄清的另一件事是“窗口”是 5 分钟,但如果在该窗口的任何地方突破总数,它将被阻止。我认为 WAF 只会在 5 分钟后评估请求。举个例子。假设您在 5 分钟内有 2000 个请求的单一规则。假设一个 IP 在 1 分钟内发出 2000 个请求,然后在接下来的 4 分钟内只发出 10 个请求。我最初了解到 IP 只会在第 5 分钟后被阻止(因为 WAF 会评估 5 分钟的窗口)。但显然,如果 IP 在该窗口中的任何位置超过限制,它将立即被锁定。因此,如果该 IP 在第 1 分钟发出 2000 个请求,它实际上会从第 2、3、4 和 5 分钟被阻止。但从第 6 分钟开始将再次被允许。这让我明白了很多。话虽如此,我还没有测试过。

于 2019-01-14T09:00:31.580 回答
4

AWS 现在终于发布了一个更新,允许速率限制低至每 5 分钟 100 个请求。

公告帖:https ://aws.amazon.com/about-aws/whats-new/2019/08/lower-threshold-for-aws-waf-rate-based-rules/

于 2019-08-29T08:41:38.053 回答
-1

使用规则两次将不起作用,因为基于 WAF 速率的规则将基于云监视日志,这两个规则将分别计算 2000 个请求,因此对您不起作用。您可以使用 AWS-WAF 自动化云前端模板,并选择 lambda/Athena 解析器,这样,请求计数将基于 s3 日志执行,您也将能够阻止 SQL、XSS 和不良机器人请求。

于 2019-08-22T09:30:17.640 回答