CNMCDN防护系统
网站配置
CDN报错排查
CC规则
ACL管理
其他更多设置
新增转发
转发编辑
宝塔的Nginx防火墙自动同步CDN节点IP列表
套餐价格
新购续费CDN赠送服务器
本文档使用 MrDoc 发布
-
+
home page
CC规则
规则主要由三部分组成匹配器,过滤器,动作。 匹配器: 用来匹配用户的请求,可以匹配用户IP,Host,req_uri(带参数),uri(不带参数),user_agent和referer。一个匹配器可以有多个匹配项,添加多个匹配项时,此匹配器所有的匹配项都满足时,这个匹配器才为真。如果匹配了请求,就使用下面的过滤器来对请求进行验证。 过滤器: 用来对客户请求进行验证,比如统计请求数是否超限,是否输入对验证码,是否跳转到正确的URL等,如果验证次数超过指定次数,那么就执行下面指定的动作来拦截。 动作: 当请求无法通过过滤器时,执行相应的动作。 匹配器 匹配器由匹配项,操作符,匹配值组成。比如匹配项是IP,操作符是=,匹配值是192.168.0.1,表示客户端IP是192.168.0.1才算匹配。 ## 匹配项 ![](/media/202405/2024-05-08_065831_9245780.5950077490167645.png) IP地址 - 客户端IP地址 域名 - 客户请求的域名 请求URI - 请求的url,如/123.php?a=1,保留参数匹配。 请求URI(不带参数) - 去除参数的url,如原始/123.php?a=1,经处理变成/123.php再去匹配 请求方法 - 如GET, POST等 浏览器UA - 浏览器名称,如Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 请求来源 - 如http://demo.cdnfly.cn/console/index.html 国家代码 - 由于两位字母表示某个国家的IP地址,比如CN表示在中国网络下请求网站的客户,完整的国家代码列表https://www.iban.com/country-codes ## 操作符 ![](/media/202405/2024-05-08_065916_1681560.1439139622251553.png) 等于 - 即与匹配值完全匹配条件才成立 不等于 - 参考等于 包含- 要匹配的值包含有匹配值条件就成立,如请求URI为/index.php,匹配值为php的话,条件成立 不包含 - 参考包含 前缀匹配 - 即从前面开始匹配,如请求URI为/api/index,当匹配值为/api时,条件成立,值为index时,条件不成立 后缀匹配 - 即从尾部开始匹配,如请求URI为/api/index,当匹配值为index时,条件成立,匹配值为/api时,条件不成立 正则匹配 - 如^/[0-9]+,即匹配以/开头,后面接数字的URI ## 过滤器 ![](/media/202405/2024-05-08_065932_7105980.6124942463542098.png) ![](/media/202405/2024-05-08_065942_6223010.25728354614626336.png) 限制客户在一定时间内的总请求次数。可以限制总的URL请求数,也可以限制同一个URL累积的请求数。 ## 302跳转 当客户请求cdnfly节点时,cdnfly会302返回一个url,客户跟随访问这个URL才算验证通过,否则算失败。 ## 浏览器识别 客户请求cdnfly节点时,cdnfly返回一段带跳转功能的js代码,客户跟随访问这个URL才算验证通过,否则算失败。 ## 滑动验证 客户请求cdnfly节点时,cdnfly返回一个滑动条,客户需要拖动滑动条才算验证通过,否则算失败。 ## 验证码 客户请求cdnfly节点时,cdnfly返回一个验证码,客户需要输入正确的验证码提交才算验证通过,否则算失败。 ## URL鉴权 url鉴权过滤器适用时API类防cc攻击。需要与客户端配合,cdn定义一个密钥,客户端md5如uri,时间戳,随机数,密钥,得出的值传给cdn验证,验证失败到一定次数将拉黑这个IP。URL鉴权提供两种鉴权方式,A和B。 方式A URL格式为http://DomainName/img/FileName?sign=md5hash&t=timestamp timestamp为当前时间戳,如1598342331(签名用的时间戳与参数t的时间戳需要一致),md5hash为md5(密钥uri时间戳),其中密钥为在cdn定义好的密钥,uri为不带参数的路径,且要转为小写再做md5,如/img/filename,时间戳为1598342331(精确到秒就行) 方式A的设置如下 ![](/media/202405/2024-05-08_065959_4099890.16915015018372026.png) n秒内,最大失败次数 - 即如果在60秒内,验证失败超过5次的话,拉黑IP 鉴权方式 - 这里选TypeA 密钥 - 与其它数据一起md5得到的hash,客户端同样使用这里定义的密钥来md5 签名参数名 - 默认为sign 时间戳参数名 - 默认t 最大时间相差(秒) - 允许上下相关多少秒,超过此范围签名认为无效 签名使用次数 - 带同一个签名的url允许访问的次数,0为不限制,越过限制则拉黑IP javascript示例代码: // 获取时间戳 let timeStamp = Date.parse(new Date()) / 1000; // 将要请求的原始url let url = "http://for-test.cdnfly.cn/index.php?model=abc" // 从原始url中获取其路径 let urlObj = new URL(url) let path = urlObj.pathname // cdn后台配置的密钥 let key = "KRcz58Wn4yBprtc2" // 对密钥、路径、时间戳md5签名 let sign = md5(key+path+timeStamp) // 生成新的请求url if (urlObj.search == "") { let newUrl = url+"?sign=" + sign+"&t="+timeStamp } else { let newUrl = url+"&sign=" + sign+"&t="+timeStamp } console.log(newUrl) 方式B URL格式为http://DomainName/img/Filename?sign=timestamp-rand-uid-md5hash timestamp为当前时间戳,如1598342331,rand为随机字符串(只需要取一次,之后都是用这个),uid用户id暂时不用,设置为0,md5hash为md5(uri-时间戳-随机字符串-uid-密钥),uri转为小写再md5,md5的计算包含连接符- 方式B设置如下: ![](/media/202405/2024-05-08_070015_1454440.5776276655121033.png) 方式B与方式A的设置不一样的方式在于,方式B不需要传时间戳的参数,因为已经包括在签名参数里了。 其中的设置与方式A一样。 ## 规则 规则由匹配器,过滤器,动作组成。 ![](/media/202405/2024-05-08_070129_8277410.908655503064577.png) 这里需要说明的是可以指定一个或两个过滤器。 当指定一个过滤器时,当这个过滤器验证失败时,直接执行动作; 当指定两个过滤器时,即指定过滤器1和过滤器2,那么当过滤器1验证失败,这时还不会执行动作,而是继续使用过滤器2验证,只有当两个过滤器都验证失败时,才执行动作。这样可以有效减少误封,比如过滤器1使用请求频率,过滤器2使用滑动验证,这样可以防止误封请求量比较大的客户。 ## 规则组 一个或多个规则组成一个。网站就是绑定的规则组。
admin
May 8, 2024, 7:01 a.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password