使用ModSecurity对Apache进行速率限制

时间:2018-05-16 10:20:23

标签: apache mod-security

我试图用Apache对我的API进行速率限制,以便不必在每次调用时加载我的框架并连接到我的数据库,但我很难做到我想做的事。

我找到了一些关于如何限制不同IP调用的示例,如下所示,并且效果很好:

SecAction id:1,initcol:IP=%{REMOTE_ADDR}
SecAction "id:2,deprecatevar:IP.CALLS_LIMIT=1/10
SecRule IP:CALLS_LIMIT "@gt 1" "id:3,phase:2,pause:300,deny,status:429,setenv:RATELIMITED,skip:1"
SecAction id:4,setvar:IP.CALLS_LIMIT=+1

但是,我能做的是通过Apache env变量进行分组调用,而不是通过IP进行分组。 所以我尝试了类似的东西:

SecAction id:1,initcol:ACTOR=%{env.actor}
SecAction "id:2,deprecatevar:ACTOR.CALLS_LIMIT=1/10
SecRule ACTOR:CALLS_LIMIT "@gt 1" "id:3,phase:2,pause:300,deny,status:429,setenv:RATELIMITED,skip:1"
SecAction id:4,setvar:ACTOR.CALLS_LIMIT=+1

但是,它并没有像SecRule一样工作,它不会识别演员:

  

创建规则时出错:未知变量:ACTOR

我看了但是找不到任何人在e SecRule中使用由ModSec设置的自定义var。

我也尝试过将var传递给env,但我的env var似乎仍然是空的......:/

SecAction id:1,initcol:ACTOR=%{env.actor}
SecAction "id:2,deprecatevar:ACTOR.CALLS_LIMIT=1/10,setenv:CALLS_LIMIT=%{ACTOR.CALLS_LIMIT}
SecRule ACTOR:CALLS_LIMIT "@gt 1" "id:3,phase:2,pause:300,deny,status:429,setenv:RATELIMITED,skip:1"
SecAction id:4,setvar:ACTOR.CALLS_LIMIT=+1,setenv:CALLS_LIMIT=%{ACTOR.CALLS_LIMIT}
Header set Test "expr=%{env:CALLS_LIMIT}"

所以我不知道如何在我的SecRule中使用我的自定义变量。 有谁知道我怎么做?

感谢。 ;)

0 个答案:

没有答案