当前位置:  开发笔记 > 编程语言 > 正文

如何使用Apache实现速率限制?(每秒请求数)

如何解决《如何使用Apache实现速率限制?(每秒请求数)》经验,为你挑选了5个好方法。

有哪些技术和/或模块可用于在apache中实现强大的速率限制(请求|字节/ ip /单位时间)?



1> Vinko Vrsalo..:

最好的

mod_evasive(更多关注减少DoS暴露)

mod_cband(最佳"正常"带宽控制功能)

其余的

mod_limitipconn

mod_bw

mod_bwshare


我无法通过IP地址找到任何限制每天连接的内容.我整夜都在寻找,这是一种耻辱.
4年后,mod_evasive还是"最好的"吗?
备份您的声明.为什么_evasive和_cband最好?
`mod_evasive`获得了很多在线推荐,但截至2017年中期,它的作者似乎已经放弃了,[Jonathan Zdziarski](https://www.zdziarski.com/blog/?page_id=202)谁奇怪地从他的博客中删除了对它的所有引用 - 虽然源代码仍可作为[上传](https://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1. tar.gz的).其他项目都没有在过去6年中更新过(或者在"mod_limitipconn"的情况下为15年).

2> Diego F. Dur..:

如本博客文章所述,似乎可以使用mod_security来实现每秒的速率限制.

配置是这样的:

SecRuleEngine On


  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


ErrorDocument 509 "Rate Limit Exceeded"


这对我来说非常完美,modsec2已经运行了.只需要在规则中添加id以匹配modsec版本,如下所示: SecAction initcol:ip =%{REMOTE_ADDR},pass,nolog,id:10000001 SecAction"阶段:5,deprecatevar: ip.somepathcounter = 1/1,pass,nolog,id:10000002"SecRule IP:SOMEPATHCOUNTER"@gt 60""阶段:2,暂停:300,拒绝,状态:509,setenv:RATELIMITED,跳过:1,nolog, id:10000003"SecAction"阶段:2,传递,setvar:ip.somepathcounter = + 1,nolog,id:10000004"Header始终设置Retry-After"10"env = RATELIMITED
Apache 2.4会在ErrorDocument中抱怨509,一个选项是将它改为429(当然 - 在Apache 2.2中不支持).此外,所有SecAction和SecRule-s都需要一个自mod_security 2.7以来的id.
另请注意,您可以通过编辑"@gt 60"来更改允许的初始突发请求数,以及通过编辑ip.somepathcounter = 1/1位来"充电"​​限制的速度.1/1每秒允许一个额外的请求.1/2每2秒允许一个额外的请求,等等.

3> Panama Jack..:

有许多方法,包括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/



4> Janus Troels..:

在Apache 2.4中,有一个名为mod_ratelimit的新库存模块.要模拟调制解调器速度,可以使用mod_dialup.虽然我不明白你为什么不能将mod_ratelimit用于一切.



5> 小智..:

遗憾的是,mod_evasive在非prefork配置中使用时将无法按预期工作(最近的apache设置主要是MPM)

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有