有哪些技术和/或模块可用于在apache中实现强大的速率限制(请求|字节/ ip /单位时间)?
最好的
mod_evasive(更多关注减少DoS暴露)
mod_cband(最佳"正常"带宽控制功能)
其余的
mod_limitipconn
mod_bw
mod_bwshare
如本博客文章所述,似乎可以使用mod_security来实现每秒的速率限制.
配置是这样的:
SecRuleEngine OnSecAction 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 ErrorDocument 509 "Rate Limit Exceeded"
有许多方法,包括Web应用程序防火墙,但如果使用Apache mod,最容易实现.
我想推荐的一个mod是mod_qos.这是一个免费的模块,对于certin DOS,Bruteforce和Slowloris类型的攻击非常有效.这将缓解您的服务器负载.
它非常强大.
mod_qos模块的当前版本实现了管理的控制机制:
对位置/资源(URL)或虚拟主机的最大并发请求数.
带宽限制,例如每秒允许的最大请求数到URL或每秒下载的kbytes的最大/最小值.
限制每秒请求事件的数量(特殊请求条件).
限定在定义的时间段内请求事件的数量.
它还可以检测非常重要的人(VIP),这些人可以在没有或没有更少限制的情况下访问Web服务器.
通用请求行和标头过滤器,以拒绝未经授权的操作.
请求正文数据限制和过滤(需要mod_parp).
限制单个客户端(IP)的请求事件数.
TCP连接级别的限制,例如,来自单个IP源地址或动态保持活动控制的最大允许连接数.
当服务器用完空闲TCP连接时,优先选择已知的IP地址.
这是您可以使用它的示例配置.有数百种可能的配置可满足您的需求.访问该网站以获取有关控件的更多信息.
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/
在Apache 2.4中,有一个名为mod_ratelimit的新库存模块.要模拟调制解调器速度,可以使用mod_dialup.虽然我不明白你为什么不能将mod_ratelimit用于一切.
遗憾的是,mod_evasive
在非prefork配置中使用时将无法按预期工作(最近的apache设置主要是MPM)