AWS WAF 如何通过 IP 对路径进行速率限制,低于最小值 2000 requests/minute

AWS WAF How to rate limit path by IP below the minimum of 2000 requests/minute

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

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

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

我的站点不使用任何类型的会话,因此我认为我无法在服务器本身中进行任何类型的速率限制。另外请记住我的网站是 one-man-operation 并且我对 AWS 有点陌生:)

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

[编辑]

经过更多研究,我想知道我是否可以启用 header 转发到原点 (运行 node/express) 并使用 rate-limiter 包。这是可行的解决方案吗?

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

他们澄清的另一件事是 "window" 是 5 分钟,但如果在 window 中的任何地方违反了总数,它将被阻止。我认为 WAF 只会在 5 分钟后评估请求。例如。假设您有一条规则可在 5 分钟内处理 2000 个请求。假设一个 IP 在第一分钟发出 2000 个请求,然后在接下来的 4 分钟内只发出 10 个请求。我最初理解 IP 只会在第 5 分钟后被阻止(因为 WAF 评估 5 分钟 window)。但是显然,如果IP在window中的任何地方超过限制,它将立即被锁定。因此,如果该 IP 在第 1 分钟发出 2000 个请求,它实际上将从第 2、3、4 和 5 分钟开始被阻止。但从第 6 分钟开始再次被允许。 这让我明白了很多。话虽如此,我还没有测试过这个。我假设 AWS 支持技术人员知道他在说什么 - 但绝对值得先测试。

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

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

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