我有一条路径(例如,mysite.com / myapiendpoint)既需要大量资源来服务,又非常容易被机器人滥用。我需要将对特定路径的访问速率进行限制,例如每个客户端IP地址每分钟10个请求。该怎么办?
我托管了一个EC2实例,其中CloudFront和AWS WAF位于前面。我启用了标准的“基于费率规则”,但是对于我的应用程序来说,每个IP地址最低每分钟2,000个请求是绝对无法使用的。
我一直在考虑使用API网关,并且在过去使用过它,但是据我了解,它的速率限制不是基于IP地址,因此漫游器会简单地用完该限制,而合法用户将被不断拒绝。端点的用途。
我的网站不使用任何类型的会话,因此我认为我无法对服务器本身进行任何类型的速率限制。另外请记住,我的网站是单人操作,对于AWS来说我是新来的:)
如何将每个IP的使用限制为每分钟10个请求,最好是在WAF中?
经过更多研究,我想知道是否可以将标头转发到源(运行节点/表达式)并使用速率限制程序包。这是可行的解决方案吗?
答案 0 :(得分:2)
我不知道这是否对您仍然有用-但是我只是从AWS支持中获得了一个提示。如果多次添加速率限制规则,则可以有效地减少每次请求的数量。基本上,每次添加规则都会发生一次,它会为每个IP计算一个额外的请求。所以说IP发出一个请求。如果您应用了2个速率限制规则,则请求将被计数两次。因此,基本上,IP不需要2000个请求,而只需阻塞1000个即可。如果您添加3条规则,它将对每个请求计数3次-因此IP将在667个请求时被阻止。
他们澄清的另一件事是“窗口”是5分钟,但是如果总数在该窗口的任何地方被破坏,它将被阻止。我认为WAF仅会在5分钟后评估请求。例如。假设您对5分钟内的2000个请求有一条规则。假设IP在第一分钟发出2000个请求,然后在接下来的4分钟内仅发出10个请求。我最初了解到,该IP仅在第5分钟后才会被阻止(因为WAF评估为5分钟的窗口)。但是很明显,如果IP超出该窗口中任何地方的限制,它将立即被锁定。因此,如果该IP在第1分钟发出2000个请求,则实际上将在第2、3、4和5分钟被阻止,但是从第6分钟开始将再次被允许。 这为我澄清了很多。话虽如此,我还没有测试过。我认为AWS支持技术人员知道他在说什么-但绝对值得首先进行测试。
答案 1 :(得分:1)
AWS现在终于发布了一个更新,该更新允许速率限制每5分钟降低到100个请求。
公告:README
答案 2 :(得分:0)
两次使用规则将不起作用,因为基于WAF速率的规则将基于云监视日志,两个规则将分别计算2000个请求,因此它对您不起作用。 您可以使用AWS-WAF自动化云前端模板,然后选择lambda / Athena解析器,这样,请求计数将以s3日志为基础执行,您还可以阻止SQL,XSS和错误的bot请求。