gpt4 book ai didi

Apache modsecurity 限制每个 uri 每单位时间的命中

转载 作者:行者123 更新时间:2023-12-04 17:51:26 25 4
gpt4 key购买 nike

我正在尝试为 Apache 配置 modsecurity 以限制每单位时间可以访问给定资源的点击次数(假设每个资源每分钟 10 次点击,无论请求是哪个 IP 地址)。资源具有“https://myhost/my-resource/my-resource-id”形式的网址模式

# Limit the requests count by unit of time.
SecRuleEngine On

<LocationMatch "^.*/my-resource/.*">
# SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog,id:132
SecAction initcol:uri=%{REQUEST_URI},pass,nolog,id:232
SecAction "phase:5,deprecatevar:uri.counter=10/60,pass,nolog,id:332"
SecRule URI:COUNTER "@ge 10" "phase:2,pause:10,deny,status:429,setenv:RATELIMITED,skip:1,nolog,id:432"
SecAction "phase:2,pass,setvar:uri.counter=+1,nolog,id:532"
Header always set Retry-After "60" env=RATELIMITED
</LocationMatch>

ErrorDocument 429 "Too Many Requests"

据我了解这个片段,它告诉 modsecurity“为每个 request_uri 创建一个名为 uri 的变量并为每个变量关联一个计数器,然后每 60 秒将其递减 10。如果当前的 uri 计数器达到 10 的值,则失败并显示错误代码429,否则增加它”这就是我需要的。

此配置导致“未找到 uri 变量”错误,我不明白为什么。

如果我取消注释 1st SecAction 并更改其余配置以引用它,则它可以工作(在 10 次快速调用后返回 429),但显然没有考虑 uri(它对任何资源都失败,例如/my-resource/123 和/my-resource/456)

有人可以对此提供帮助吗?我所有的尝试都失败了,而且我对 Apache 的配置一般不太熟悉,所以我想我在这里遗漏了一些重要的概念。

PS:Apache 是 v2.4,mod-security 是 v2.9

谢谢!

最佳答案

有效的配置如下:

# Limit the requests count by unit of time.
SecRuleEngine On

<LocationMatch "^.*/my-resource/.*">
SecAction initcol:resource=%{REQUEST_URI},pass,nolog,id:132
SecRule RESOURCE:COUNTER "@ge 10" "phase:3,pause:10,deny,status:429,setenv:RATELIMITED,skip:1,nolog,id:232"
SecAction "phase:2,setvar:resource.counter=+1,pass,nolog,id:332"
SecAction "phase:2,deprecatevar:resource.counter=10/60,pass,nolog,id:432"
Header always set Retry-After "60" env=RATELIMITED
</LocationMatch>

ErrorDocument 429 "Too Many Requests"

ndlr:将集合名称从“uri”更改为“resource”并稍微调整阶段

然后它按预期工作(参见 modsecurity 邮件列表: https://sourceforge.net/p/mod-security/mailman/message/35889575/)

关于Apache modsecurity 限制每个 uri 每单位时间的命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44434836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com