基于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 -

参考资料

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark生态圈

[spark] Standalone模式下Master、WorKer启动流程

而Standalone 作为spark自带cluster manager,需要启动Master和Worker守护进程,本文将从源码角度解析两者的启动流程。Mas...

2682
来自专栏FreeBuf

浅谈WAF绕过技巧

waf分类 掌握绕过各类WAF可以说是渗透测试人员的一项基本技能,本文将WAF分为云WAF、硬件WAF、软件WAF、代码级WAF,分别从各自的特性来谈一些相关的...

1.1K10
来自专栏james大数据架构

资源等待类型sys.dm_os_wait_stats

动态管理视图  sys.dm_os_wait_stats  返回执行的线程所遇到的所有等待的相关信息。可以使用该聚合视图来诊断 SQL Server 以及特定查...

2237
来自专栏熊二哥

快速入门系列--WebAPI--01基础

ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的...

5287
来自专栏小古哥的博客园

HTML5-本地存储与cookies

一、H5的几种存储形式 1、本地存储(localstorage和sessionstorage) 存储形式:key-->value 过期策略:localstora...

3285
来自专栏闻道于事

quartz定时任务,已过期的内容自动下线

概念: Quartz是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间运行。Quartz可以用来创建简单或复杂的日程安排执行几十,几百,甚至是...

4465
来自专栏JavaEdge

从servlet容器说起1 Servlet容器的启动过程2 Web 应用的初始化工作

33612
来自专栏游戏杂谈

Node.js + WebSocket 实现的简易聊天室

Firefox 7-9 (Old) (Protocol Version 8) Firefox 10+ (Protocol Version 13) ...

4472
来自专栏酷玩时刻

支付宝Wap支付你了解多少?

为了方便开发者生成一对RSA密钥支付宝提供一键生成工具,具体如何生成与配置密钥详见签名专区。

3292
来自专栏菩提树下的杨过

Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室

先来看客户端fla的构成: 第一帧:登录界面 ? 第一帧的代码: import flash.events.MouseEvent; import com.adob...

2089

扫码关注云+社区

领取腾讯云代金券