有哪些出站 HTTP 限制解决方案?

有哪些出站 HTTP 限制解决方案?

我正在寻找一种以尊重站点策略的方式灵活地管理出站 HTTP/HTTPS 流量的方法,并且可以部署在我们的数据中心网络的“边缘”。

例如,我们使用了几个具有节流率的 Web API,如“每秒不超过 4 个请求”或“每天最多 50K 个请求”等。我们公司有很多人使用各种此类服务,因此我无法在软件中集中管理所有请求。人们以不同的时间表和不同的强度运行这些服务。我们对此没有意见(它满足了内部需求),但我们意识到 - 总的来说 - 我们可能会遇到生成过多并发流量的情况,以至于被网站阻止。(尽管这不是故意的)

我期望/希望的是,我们可以利用网络硬件世界中已经存在的带宽管理/流量整形解决方案,并且随后可以在数据中心网络的边缘部署这样的东西。

理想情况下,我可以编写 L4 或 L7 路由规则,确保我们的数据中心产生的出站请求不超过 4 个/秒。理想情况下,其余请求将由硬件排队一段合理的时间,队列容量过大将被拒绝。我知道天下没有免费的午餐,节流并不能解决根本的固有需求(请求)与供应(站点政策)问题。但是,节流可以让我们在某个时间段(比如一天)内“平滑”请求,这样我们就可以以适当限制的方式使用外部服务,同时最大限度地利用我们的资源。

有人知道这样的网络级带宽管理解决方案吗?如果有,它是否还支持不仅基于 HTTP 请求中的 URL 之类的规则,还支持一些其他 HTTP 标头的规则?

答案1

的能力网络过滤器几乎是无限的。对于这一点,我将使用 iptables 中的限制模块。请注意:在 TCP/IP 中,没有办法在不丢弃数据包的情况下限制速率。您可以将数据包排队,但最终当队列已满时,数据包会被丢弃。所以我们将丢弃 SYN 包。到目前为止我还没有尝试过这个,可能是因为重试超时时间太长,没有人这样做,即浏览器可能会被锁定。

限制

此模块使用令牌桶过滤器以有限的速率进行匹配。使用此扩展的规则将一直匹配,直到达到此限制(除非使用“!”标志)。例如,它可以与 LOG 目标结合使用,以提供有限的日志记录。

--limit rate 最大平均匹配率:指定为数字,带有可选的“/秒”、“/分钟”、“/小时”或“/天”后缀;默认值为 3/小时。

--limit-burst number 要匹配的最大初始数据包数量:每当未达到上面指定的限制时,此数字就会重新增加一,直到达到此数字;默认值为 5。

  1. 我们设置了一条新的链来限制连接。每秒 4 条连接将返回到调用者链,其余的将被丢弃。
  2. 到端口 80 的新连接将被发送到该新链。
iptables -N CONNRATELIMIT
iptables -A CONNRATELIMIT -m limit --limit 4/sec -j RETURN
iptables -A CONNRATELIMIT -j DROP

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j CONNRATELIMIT

我使用辅助链只是为了展示这个概念。您也可以在路由器上执行此操作,然后您必须为每个要限制的服务器或实体创建一个链。并使用 FORWARD 而不是 INPUT。

排队

在这个解决方案中,没有“长时间”排队。你可以玩限制限制突发参数。还可以将 SYN 数据包发送到排队规则:设置要复杂得多,我看不出它如何改善 SYN 数据包的丢弃情况。

URL 匹配

URL 匹配也是可能的,在这种情况下,你会丢弃该数据包并通过等待重新传输来延迟连接,我已经用模块做过这样的事情最近的,但我用它来防止暴力攻击和端口扫描。所以我不关心我限制的连接。正确处理连接会变得困难!

相关内容