限速单个URL请求
我有一个正在开发的Flask应用程序,该应用程序在很大程度上依赖于外部网站的交互,并由最终用户启动。如果我离开该应用程序时没有任何带宽控制/速率限制,那么此行为者可能出于恶意的目的而滥用该应用程序。 我的目标是一个相当简单的两阶段方法: 对单个IP源的速率进行限制x,以使其每分钟执行的连接数不会超过此数量。使用可以轻松实现iptables。 这是与我的目标相似的示例: iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 \ --connlimit-mask 32 -j REJECT --reject-with tcp-reset 速率限制了应用程序执行每个URLx的查找数量以上的能力。例: APP ---- 10 pps ---> stackexchange.com PERMIT APP ---- 25 pps ---> google.com DENY / 15 SECOND BACKOFF 据我所知,iptables它无法跟踪单独的URL。只能对整个连接进行速率限制。这似乎也不是我要实现的唯一限制。如果可以通过这种方式进行设置iptables,则由于我的请求是由用户发起的,因此它可能会给我的Web应用程序带来一些问题。 我正在使用Flask,一个可行的选择可能是使用before_request钩子,并使用数据存储(例如Redis)手动跟踪这些目的地。但是,以这种方式处理连接在堆栈中相当高。我真正需要的(或认为我需要的)是一个智能防火墙应用程序,可以以自定义的方式剖析请求并在达到某些断点时关闭连接。 有什么方法可以实现我的目标吗? 如果是这样,怎么办?