apache - Apache modsecurity:限制每秒每个资源的请求
问题描述
我正在尝试为 Apache 配置 modsecurity 以限制每单位时间对同一资源的请求数:无论请求哪个 IP 地址,每个资源每秒 10 次命中。最好不要阻止额外的调用,而是重定向到给定的页面。
我包含模块并将下一个代码放在 httpd.conf 中:
<LocationMatch "(.*)\.dimg(.*)">
SecDebugLogLevel 9
SecAction phase:2,initcol:resource=%{REQUEST_URI},pass,nolog,id:132
SecRule RESOURCE:COUNT "@gt 10" "phase:2,pause:300,deny,status:503,setenv:RATELIMITED,skip:1,nolog,id:102"
SecAction "phase:2,setvar:resource.count=+1,pass,nolog,id:103"
SecAction "phase:5,deprecatevar:resource.count=10/1,pass,nolog,id:104"
Header always set Retry-After "10" env=RATELIMITED
ErrorDocument 503 "Service Unavailable"
然后我运行压力测试来模拟高负载。但不会阻止额外的请求。来自日志:记录的原始集合变量:resource.count = "0"
因此,SecRule RESOURCE:COUNT "@gt 10" 对任何请求都返回 false。
这里有什么问题?
解决方案
推荐阅读
- google-cloud-firestore - Firestore 数据库是否适合这种时间序列数据,还是我应该实现其他东西?
- c - 用于 qsort 结构的多种类型字段的自定义比较功能
- mysql - 通过忽略列中的 0 值来计算平均值
- rest - ActiveMQ Artemis 上的 REST 接口
- asp.net-core-mvc - ASP .NET Core MVC 使用登录的用户外键将文本文件上传到现有数据库
- amazon-web-services - 尝试通过 terraform 设置 cloudwatch 日志过滤器时出现 InvalidParameterException
- java - 如何获取显示名称“电子邮件”?
- reactjs - 如何在函数中键入异步提取?
- azure - 如何根据自定义图表中 Azure 仪表板中的选定时间段计算时间粒度
- python - 如何在 PySimpleGUI 中美化结果