宇宙主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

欧基零壹微头条IP归属甄别会员请立即修改密码
楼主: smyz

[已解决] AMH面板防CC攻击模块已发布。

[复制链接]
发表于 2013-5-24 17:22:09 | 显示全部楼层
$binary_remote_addr 规则 3r/s 太小了,遇到页面含很多图片就会出错
最好是$request_uri 严格限制,$binary_remote_addr 宽松规则
并且配置时$binary_remote_addr在上,$request_uri在下
 楼主| 发表于 2013-5-24 17:45:28 | 显示全部楼层
lazyzhu 发表于 2013-5-24 17:22
$binary_remote_addr 规则 3r/s 太小了,遇到页面含很多图片就会出错
最好是$request_uri 严格限制,$binar ...


3r/s 是小了些
$request_uri  是当前请求url
$binary_remote_addr 是客户端地址
现在那两条规则区别不大……
@Zeraba 发了下个版本再改改好拉
发表于 2013-5-24 18:36:08 | 显示全部楼层
本帖最后由 lazyzhu 于 2013-5-24 18:38 编辑
smyz 发表于 2013-5-24 17:45
3r/s 是小了些
$request_uri  是当前请求url
$binary_remote_addr 是客户端地址




区别大了

一个页面有5个图片,假设访问时图片同时加载
此时$binary_remote_addr是6,$request_uri都是1
$binary_remote_addr的规则就会导致后面图片加载不了

另外Zeraba肯定没动参数的区别

 楼主| 发表于 2013-5-24 19:03:43 | 显示全部楼层
lazyzhu 发表于 2013-5-24 18:36
区别大了

一个页面有5个图片,假设访问时图片同时加载

是说已发的这个模块的两条规则区别不大。
发表于 2013-5-24 19:05:31 | 显示全部楼层
lazyzhu 发表于 2013-5-24 18:36
区别大了

一个页面有5个图片,假设访问时图片同时加载

嗯 是没懂 $binary_remote_addr 和 $request_uri
举个栗子
一个页面 如果html有10个<a href></a>
加载了5个css  3张图片
那么
$binary_remote_addr  是 4
$request_uri 是 1  
对么?
对于html中的link  和   a href  应该是不算在里面的?
因为我测试的页面图片都是外链  所以真没发现问题  一直以为$binary_remote_addr 是在定义客户端

怎么才能对$binary_remote_addr和$request_uri  计数并输出哪?
貌似这样瞎整也不好   有输出这样我就能理解点了
求带
发表于 2013-5-24 19:08:04 | 显示全部楼层
smyz 发表于 2013-5-24 17:45
3r/s 是小了些
$request_uri  是当前请求url
$binary_remote_addr 是客户端地址

嗯 我再多看看文档 多学学
发表于 2013-5-24 19:10:29 | 显示全部楼层
本帖最后由 Zeraba 于 2013-5-24 19:12 编辑
lazyzhu 发表于 2013-5-24 18:36
区别大了

一个页面有5个图片,假设访问时图片同时加载


对了 虽然这两行 limit_req2_zone 在http段里  img php *  超过3r/s 都会被判定到
但是
在vhost的conf里  我只在php段加了 limit_req2 zone  那这样是不是只影响php?
发表于 2013-5-24 19:28:48 | 显示全部楼层
本帖最后由 lazyzhu 于 2013-5-24 19:40 编辑
Zeraba 发表于 2013-5-24 19:05
嗯 是没懂 $binary_remote_addr 和 $request_uri
举个栗子
一个页面 如果html有10个


$binary_remote_addr是客户端IP,每个请求都一样,所以相当于9r/s
$request_uri是被请求链接,供9个,每个都是1r/s
$binary_remote_addr $request_uri 如果放在一起,就是每个IP的请求

$request_uri 和 $uri 有区别
比如三个$request_uri
http://lazyzhu.com/123456.html
http://lazyzhu.com/123456.html?q=1
http://lazyzhu.com/123456.html?q=2
其$uri都是http://lazyzhu.com/123456.html
所以可以看出$request_uri 更具体




所以最佳方案可以设置这样三条

#  同一链接的请求限制在50次/秒,防止多IP的CC
limit_req2_zone $request_uri zone=one:3m rate=50r/s;
# 同一IP最多同时20个请求,保证正常的浏览要求
limit_req2_zone $binary_remote_addr zone=two:3m rate=20r/s;
#  同一IP相同的请求限制在3次/秒,防止单IP的CC
limit_req2_zone $binary_remote_addr $request_uri zone=three:3m rate=3r/s;


上面参数需根据实际情况调节




发表于 2013-5-24 19:29:33 来自手机 | 显示全部楼层
jjabc,我的心在等待,永远在等待。
发表于 2013-5-24 20:08:34 | 显示全部楼层
lazyzhu 发表于 2013-5-24 19:28
$binary_remote_addr是客户端IP,每个请求都一样,所以相当于9r/s
$request_uri是被请求链接,供9个,每 ...

嗯 谢谢啊

#  规则 one 所有的ip发起的请求数(包括参数)超过50/秒。可防止多IP的CC
limit_req2_zone $request_uri zone=one:3m rate=50r/s;
# 规则 two 同一IP最多同时发起20个请求,保证正常的浏览要求。可防止过多请求)
limit_req2_zone $binary_remote_addr zone=two:3m rate=20r/s;
#  规则three 同一IP发起的请求(包括参数)在3次/秒。可防止单IP的CC
limit_req2_zone $binary_remote_addr $request_uri zone=three:3m rate=3r/s;

我原来的参数
limit_req2_zone $binary_remote_addr $uri zone=one:3m rate=3r/s;
limit_req2_zone $binary_remote_addr $request_uri zone=two:3m rate=3r/s

应该都是同一ip发起的请求了 就是有参数和没参数的区别而已了  设置的很差
你给的好很多啊

再然后只要在vhost的配置中加入
three rewrite mjj.html
two retrun 502
one return 400
就挺好了?



对了
three rewrite mjj.html
two retrun 502
one return 400
这三个能设置时效吗?  return 400  30s 之类的
月妹妹博客 和 你之前loc 都提到用lua写?

有栗子吃么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宇宙主机交流论坛

GMT+8, 2024-10-30 11:32 , Processed in 0.061736 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表