发布
社区首页 >问答首页 >HAProxy速率限制-禁止滥用30分钟

HAProxy速率限制-禁止滥用30分钟
EN

Server Fault用户
提问于 2016-07-21 05:59:55
回答 1查看 8.3K关注 0票数 6

我有以下的配置,这对速率限制连接的工作正常。如果对滥用者进行了身份验证,并且他还以每分钟30次以上的方式访问所定义的regex位置,则启动速率限制,并将其转发到rate_limiting后端,在那里他收到一条错误消息:

代码语言:javascript
代码运行次数:0
复制
frontend http_in

bind xx.xx.xx.xx:80
mode http
default_backend backend_nodes
tcp-request inspect-delay 5s
acl location_request path_reg ^/(.*)/(.*)/
acl too_many_requests sc0_gpc0_rate ge 30
acl mark_seen sc0_inc_gpc0 gt 0
stick-table type string size 100k store gpc0_rate(60s)
tcp-request content track-sc0 cookie(authValidation) if location_request
use_backend rate_limiting if mark_seen too_many_requests


backend backend_nodes

mode    http
balance roundrobin
option  http-server-close
server  srv1 192.168.0.1:80 weight 5
server  srv2 192.168.0.2:80 weight 5

backend rate_limiting

mode http
timeout tarpit 2s
errorfile 500 /etc/haproxy/errorfiles/429.http
http-request tarpit

这种配置确保施虐者每分钟不能发出超过30个请求,但是它不会在超过一分钟内完全阻止他。现在,我想要达到的下一步是完全阻止施暴者1小时后,他得到了限速,但据我的研究显示,我甚至不知道这个额外的步骤是否是可能的。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2017-06-04 16:18:01

安迪,诀窍是添加另一个后端,你只使用额外的棍子表。每个后端只能有一个棍子表--但是你可以在任何前端/后端使用它们.因此,我只是添加了一个叫做滥用,然后你可以作为一个60分钟的全球禁令,任何后端.您将需要更改我的示例,但请尝试如下所示:

代码语言:javascript
代码运行次数:0
复制
# ABUSE SECTION works with http mode dependent on src ip
tcp-request content reject if { src_get_gpc0(Abuse) gt 0 }
acl abuse src_http_req_rate(Abuse) ge 10
acl flag_abuser src_inc_gpc0(Abuse) ge 0
acl scanner src_http_err_rate(Abuse) ge 10

# Returns a 403 to the abuser and flags for tcp-reject next time
http-request deny if abuse flag_abuser
http-request deny if scanner flag_abuser

backend Abuse
stick-table type ip size 1m expire 60m store conn_rate(3s),conn_cur,gpc0,http_req_rate(10s),http_err_rate(20s)
票数 6
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/791086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档