基于Cookie的Haproxy防止过速请求的方法

在网上找一些关于Haproxy对于过速防御的解决办法,大致上就找到两种:

  1. 对于整体请求速度的控制
  2. 对于某个IP的请求速度的控制

这两种方式都不太好,第一种太过粗粒度,第二种容易误伤(如果多个客户端从同一台路由设备过来)。

设想一种基于Cookie的防御方法,因为Cookie里有记录SESSIONID这样的数据,如果针对SESSIONID进行过速请求防御,那么粒度就足够精细了。

下面是配置文件样例:

frontend http-in
  
  ...    
  # 创建stick-table,记录 cookie value -> 最近30秒内http请求次数
  stick-table type string len 50 size 1m expire 10m store http_req_rate(30s)
  
  # 将cookie(SESSION)作为key,存到stick-table中,并且计数
  http-request track-sc0 req.cook(SESSION)
  
  # 定义ACL,请求次数是否超过100
  acl abuse sc0_http_req_rate gt 100
  
  # 如果ACL为true,则拒绝http请求,响应429
  http-request deny deny_status 429 if abuse

如果你在haproxy里启用了如下配置:

stats socket /var/run/haproxy/haproxy.sock mode 0600 level admin

那么可以通过Socket Command在Haproxy运行时查看stick-table中的数据:

echo 'show table http-in' |  sudo socat  /var/run/haproxy/haproxy.sock -

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值