什么技术和/或模块可实现强大的速率限制(请求|字节/ IP /单位时间)的阿帕奇?
Answer 1:
最好的
- mod_evasive (更多地集中在降低的DoS曝光)
- mod_cband (最佳为特色“正常”带宽控制)
其余
- mod_limitipconn
- mod_bw
- mod_bwshare
Answer 2:
正如指出这个博客帖子似乎有可能使用的mod_security实现每秒的速度极限。
配置是这样的:
SecRuleEngine On
<LocationMatch "^/somepath">
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>
ErrorDocument 509 "Rate Limit Exceeded"
Answer 3:
有包括Web应用防火墙,但如果使用Apache国防部最容易实现的事情很多方式。
一个这样的MOD我想推荐的是mod_qos 。 这是一个免费的模块是针对certin DOS,猜解和Slowloris型攻击veryf有效。 这会缓解你的服务器的负载相当多。
这是非常强大的 。
在mod_qos模块的当前版本实现控制机制来管理:
并发请求到位置/资源(URL)或虚拟主机的最大数量。
带宽限制诸如每秒请求的URL或每秒下载千字节的最大/最小的最大允许数目。
限制请求事件的每秒(特殊请求条件)的数目。
- 限制在规定的时间周期内请求的事件的数量。
- 它也可以检测可能没有或有较少限制访问Web服务器非常重要人物(VIP)。
通用请求线和头滤波器来拒绝未授权的操作。
请求体数据限制和过滤(要求mod_parp)。
限制为单个客户端(IP)请求事件的数量。
在TCP连接的水平,例如,从一个单一的IP源地址或动态保活控制允许的连接的最大数量的限制。
- 倾向于已知的IP地址时,服务器耗尽可用的TCP连接。
这是一个你可以使用它的一个示例配置。 有上百种可能的配置,以满足您的需求。 访问该网站的上的控件更多信息。
Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate 120
# limits the connections for this virtual host:
QS_SrvMaxConn 800
# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose 600
# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP 50
# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10.
http://opensource.adnovum.ch/mod_qos/
Answer 4:
在Apache的2.4,有一个新的名为库存模块mod_ratelimit 。 对于模拟调制解调器速度,你可以使用mod_dialup 。 虽然我不明白为什么你只是不能使用mod_ratelimit的一切。
Answer 5:
可悲的是, mod_evasive
非prefork的配置(最近的Apache设置主要是MPM)使用时,将不会按预期工作
Answer 6:
多一个选择 - mod_qos
不是简单的配置 - 但功能强大。
http://opensource.adnovum.ch/mod_qos/
Answer 7:
要看你为什么要进行速率限制。
如果是,以防止服务器过载,它实际上是有意义的把NGINX在它前面,并配置速率限制在那里。 这是有道理的,因为NGINX使用较少的资源,像每万个连接数MB。 所以,如果服务器被淹没,NGINX会做(使用资源很小的量),只允许通信传递到Apache的速率限制。
如果所有你后是简单,然后使用类似mod_evasive。
像往常一样,如果它以防止DDoS攻击或DoS攻击,使用像CloudFlare的一个服务,也有速率限制。
Answer 8:
有一个在Apache的2.4 mod_ratelimit 。
提供了一个名为RATE_LIMIT限制客户端带宽滤波器。 而将其转移到客户端,并在IP /客户端级别没有聚集节流被施加到每个HTTP响应。 要模拟的连接速度被指定时,在KIB / s时,使用环境变量速率限制。
<Location "/downloads">
SetOutputFilter RATE_LIMIT
SetEnv rate-limit 400
SetEnv rate-initial-burst 512
</Location>