-
Notifications
You must be signed in to change notification settings - Fork 40
/
Koala配置文件样式.txt
241 lines (194 loc) · 12.8 KB
/
Koala配置文件样式.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
############################################
#
# Koala 配置文件
#
############################################
######################
# 词表文件
######################
[dicts]
global_qid_whitelist : /home/q/koala/data/global_qid_whitelist.dat
global_qid_blacklist : /home/q/koala/data/global_qid_blacklist.dat
global_ip_whitelist : /home/q/koala/data/global_ip_whitelist.dat
global_ip_blacklist : /home/q/koala/data/global_ip_blacklist.dat
######################
# 规则列表
######################
[rules]
#---------
# 基础
#---------
#全局白名单
rule : [count] [qid-IN-global_qid_whitelist] [time=1; count=0;] [result=1; return=101]
rule : [count] [ip-IN-global_ip_whitelist] [time=1; count=0;] [result=1; return=102]
#全局黑名单
rule : [count] [qid-IN-global_qid_blacklist] [time=1; count=0;] [result=2; return=103]
rule : [count] [ip-IN-global_ip_blacklist] [time=1; count=0;] [result=2; return=104]
#新注册用户提交强制出4位验证码
rule : [count] [act=add_ask,add_answer;is_new=1;qid=+ ] [time=1; count=0;] [result=3; return=110]
#每天,单个qid用户,提问和回答操作总数不能超过1000次
rule : [count] [act=add_ask,add_answer{*};qid=+] [time=86400; count=1000;] [result=2; return=111]
#每天,qid数字大于200000000的人,每天提问回答数量禁止超过10(可以解决某天以后注册用户的特殊操作)
rule : [count] [act=add_ask,add_answer{*};qid>200000000] [time=86400; count=10;] [result=2; return=112]
#提问,同ip用户在连续提问超过30次以后,每次提问间隔2秒
rule : [count] [act=add_ask,add_answer{*};qid>200000000] [time=86400; count=10;] [result=2; return=112]
#---------
# 提问
#---------
#提问,同qid,2秒内提问不能超过1次(每次提问间隔2秒)
rule : [count] [act=add_ask;qid=1-2147483647;] [time=2; count=1;] [result=2; return=201]
#提问,同qid,每天提问不超过500次
rule : [count] [act=add_ask;qid=1-2147483647;] [time=86400; count=500;] [result=2; return=202]
#定向提问,同qid一天最多20次
rule : [count] [act=add_ask;qid=+;is_at=1;] [time=86400; count=20;] [result=2; return=203]
#定向提问,向某人定向提问,同qid一天最多5次
rule : [count] [act=add_ask;qid=+;is_at=1;to_qid=+;] [time=86400; count=5;] [result=2; return=204]
#提问,同qid一天超过10次后出验证码
rule : [count] [act=add_ask;qid=+;] [time=86400; count=10;] [result=3; return=205]
#提问,同IP,每天提问不超过1000次
rule : [count] [act=add_ask;ip=+;] [time=86400; count=1000;] [result=2; return=220]
#提问,同IP,一天超过30次出验证码
rule : [count] [act=add_answer;ip=+;] [time=86400; count=30;] [result=3; return=221]
#提问,同IP,2秒内提问不超过30次
rule : [count] [act=add_ask ip=+;] [time=2; count=30;] [result=2; return=222]
#提问,同IP,10秒内提问不超过50次
rule : [count] [act=add_ask;ip=+;] [time=10; count=50;] [result=2; return=223]
#提问,同IP,超过30次后,每次提问间隔2秒
rule : [base] [act=add_ask;ip=+;] [base=30; time=2; count=1;] [result=2; return=224]
#提问,同IP,超过50次后,每次提问间隔10秒
rule : [base] [act=add_ask;ip=+;] [base=50; time=10; count=1;] [result=2; return=225]
#---------
# 回答
#---------
#回答,同qid每天2000
rule : [count] [act=add_answer;qid=+;] [time=86400; count=2000;] [result=2; return=301]
#回答,同一qid一天超过200次出验证码
rule : [count] [act=add_answer;qid=+;] [time=86400; count=200;] [result=3; return=302]
#回答,同一ip一天超过1000次出验证码
rule : [count] [act=add_answer;ip=+;] [time=86400; count=1000;] [result=3; return=320]
#专家回答,同qid每天200000
rule : [count] [act=add_answer;qid=+;is_at=1] [time=86400; count=200000;] [result=2; return=321]
#回答,同ip每天5000
rule : [count] [act=add_answer;ip=+;] [time=86400; count=5000;] [result=2; return=322]
#------------
# 有帮助
#------------
#有帮助,同ip一天50次
rule : [count] [act=add_help;ip=+;] [time=86400; count=50;] [result=2; return=420]
#有帮助,同ip对同1问题一天1次
rule : [count] [act=add_help;ip=+;ask_id=+] [time=86400; count=1;] [result=2; return=421]
#######################
# 返回结果配置
#######################
[result]
#默认规则 (默认是通过状态)
0 : { "ret_type":0, "ret_code" : 0, "err_no":0, "err_msg":"", "str_reason":"Allow", "need_vcode":0, "vcode_len":4, "vcode_type":0, "other":"", "version":0 }
#通过 (没有命中任何控制,通用规则)
1 : { "ret_type":1, "ret_code" : 0, "err_no":0, "err_msg":"", "str_reason":"Allow", "need_vcode":0, "vcode_len":4, "vcode_type":0, "other":"", "version":0 }
#不通过 (命中了频率控制,不出验证码,直接禁止操作)
2 : { "ret_type":2, "ret_code" : 0, "err_no":10, "err_msg":"", "str_reason":"Deny", "need_vcode":0, "vcode_len":4, "vcode_type":0, "other":"", "version":0 }
#出4位验证码
3 : { "ret_type":3, "ret_code" : 0, "err_no":20, "err_msg":"", "str_reason":"Vcode", "need_vcode":1, "vcode_len":4, "vcode_type":0, "other":"", "version":0 }
#出6位验证码
4 : { "ret_type":4, "ret_code" : 0, "err_no":21, "err_msg":"", "str_reason":"Vcode", "need_vcode":1, "vcode_len":6, "vcode_type":0, "other":"", "version":0 }
###################################### 配置说明分割线 ########################################
#
# 【Koala 配置文件使用说明】
#
# 配置主要分为三个部分:
# [dicts] : 词表配置
# [rules] : 规则配置
# [result]: 返回结果配置
#
# [dicts]词表配置:
# 主要就是通过冒号 : 区分的左右两侧,左侧的是数据文件的的名字,主要是提供给rule规则使用的,文件内容必须是一行一条的内容,主要是跟某个参数进行比对,右侧出现的是文件路径,主要是这个词表文件实际在当前服务器的路径。
# 示例:
# global_qid_whitelist : /home/q/koala/data/global_qid_whitelist.dat
# 是说一个叫做 global_qid_whitelist 的词表文件,路径是 /home/q/koala/data/global_qid_whitelist.dat
#
#
# [rules]规则配置:
# !!注意:整个规则运行是从上到下,排在前面的规则优先级高于后面的规则,如果前面规则命中就直接返回,不顾及后面的规则。!!
#
# rule配置比较复杂,主要也是分为三块。
# 冒号左侧的 rule 是代表这是一条规则配置,冒号右侧是4组依赖 [] 进行区分的的数据集。
# 第一组[]: 主要是表示这条规则是什么类型的,目前支持 [count] 和 [base] 两种类型
# [count] 类型就是一般标准的计数类型
# [base] 这种是特殊类型,一般满足类似“提问操作超过30次以后,用户每隔2秒才能提交”这种控制,另外在第三组字段中还需要增加base字段
# 第二组[]:中间的是客户端传递参数集合,基本结构是:key=value; 的形式,每个参数中间使用分号区分。这个value的取值包括如下几种:
# 绝对取值:
# 比如 act=add_answer,就是说这个key是act的,值是固定是add_answer才算命中本key,否则不命中
# 比如 act!=add_answer, 就是说只要这个操作包含了act字段,并且不等于 add_answer 都算命中
#
# 范围值:范围值包括 区间、逗号切割的单独多条数据,
# qid=10,23,45 : 就是说这个qid包含这3个数字才算命中,不支持字符串类型,字符串类型需要放在词表文件中
# qid=1-2147483647 : 就是说qid的取值范围从 1 ~ 2147483647 命中都算
# qid>10000 : 是说qid大于10000的所有范围命中
# ip=192.168.0.* : 是说前面三段地址一致就算命中,等同于:192.168.0.1-192.168.0.256,也可以使用 192.168.*.* 这种更大范围的
# ip=192.168.0.1/24 : 这种使用ip地址区段的方式也是支持的(子网掩码形式)
# ip=192.168.0.1-192.168.0.256 : 这是一个IP地址的范围值,代表这个ip地址范围,ip地址范围还可以用*来通配
# qid-IN-global_qid_whitelist : 这个配置是说上面配置的文件列表,只要当前qid包含在其中,就算命中,等同于 qid=10,23,45 这种配置,只是可以增加很多
# ip=192.168.0.1-192.168.0.256,10.0.24.*,202.106.34.21/24 是说这三段范围内的ip都命中本操作
#
#
# 操作符类型:
# 井号 # : 代表本行内容是被注释的,一般出现在行首
# 中括号 [] : 主要是作为某大段操作的表示,跟[rule]这种固定的group中括号不同
# 分号 ; : 代表两个参数直接结束了
# 等号 = : 代表key、value结构的等于赋值的操作
# 不等于 != : 代表不满足这个value就是命中这个key,是个比较操作
# 逗号 , : 代表有多个数值或者范围值,需要使用逗号一一描述,是一个“或”操作
# 加号 + : 代表本参数字段包含,具体值是什么不重要,就是一定要包含本值
# 星号 * : 主要是在IP地址等数据里面通配符的操作
# 冒号 : : 主要是在赋值大块字段区分的用途
# 特殊 {*} : 这一个特殊操作符,主要是用在value后面,针对 act=add_answer,add_ask{*} 这样一个操作,是把这两个操作合并成一个计数,我们叫做统一计数操作,对于 act=add_answer,add_ask 我们是分成两个计数的,使用{*} 就能够合并成一个计数了,解决某些特殊需要的计数场合
# 减号 - : 目前主要是用在范围操作里,比如 1-100,是说1到100这个区间命中,或者是 qid-IN-xxx_list 也是说qid在xxx_list这词表中命中
# 大于 > : 范围命中,一般用在数字范围里面,比如 qid>100000,是说qid范围大于100000都命中
# 小于 < : 范围命中,类似大于,不过是小于的操作,比如 qid<10000,是说qid小于10000的都命中
# 包含 IN : 主要是会有一个词表,如果用户命中这个词表,说明包含在这个词表内算是命中。语句类似:qid-IN-xxx_list
# 不包含 NOTIN : 也是有一个词表,不过这句是说如果用户没有命中这个词表,说明通过这个规则。语句类似:qid-NOTIN-xxx_list
#
#
# (注意,只有整形和IP地址类型才支持范围,字符串必须是在一个词表文件才行)
#
# 第三组[]: 配置是代表我们操作的判断条件,格式是固定的。
#
# 比如 [time=86400; count=50;] [result=2; return=401]
# base : 一般配置问[base]类型的rule才需要本条件,这是一个基础条件,就是说满足了base,然后才回去进行后面的这些条件判断。应用场合类似:提问操作超过30次以后,用户每隔2秒才能提交。如果本选项值是0或者没有配置,则按照普通操作进行。
# time : 是时间,单位是秒
# count : 是本规则上限的操作次数,0是代表无限,正整数是操作次数。
#
# 第四组[]:配置的是满足我们判断条件的返回结果,格式是固定的
# result : 是说返回我们在[result]中配置的哪个结果
# return : 是说当前这个规则返回给调用方的一个规则号码结果整数,这个数据会压在我们 result 里返回给调用方
#
# #示例:提问,同一qid一天超过10次后出验证码
# rule : [count] [act=add_ask;qid=+;] [time=86400; count=10;] [result=3; return=208]
#
# #示例:提问,同IP,超过30次后,每次提问间隔2秒
# rule : [base] [act=add_ask;ip=+;] [base=30; time=2; count=1;] [result=2; return=204]
#
#
#
# [result]返回结果配置:
# 返回结果配置比较简单,主要也是分为2块。
# 冒号左侧的 数字 是代表这是一条返回结果配置,冒号右侧是我们返回给前端的json格式数据。
# 右侧json格式数据是固定的,类似格式:
# 0 : { "ret_type":0, "ret_code" : 0, "err_no":0, "err_msg":"", "str_reason":"Allow", "need_vcode":0, "vcode_len":4, "vcode_type":0, "other":"", "version":0 }
#
# 字段描述:
# ret_type : 是result 的数字
# ret_code : 是规则最后配置 return 的整数,前端可以在获取后做一些提示操作,或者记录操作
# err_no : 错误号(一般有错误的情况)
# err_msg : 错误信息(一般有特殊错误信息)
# str_reason : 操作结果信息(参考使用)
# need_vcode : 是否出验证码,0不出,1出
# vcode_len : 验证码长度,一般是4位(预留字段,需要看验证码是否支持)
# vode_type : 验证码类型,比如是普通验证码、中文验证码、语音验证码、九宫格验证码等
# other : 预留字段
# version : 当前返回信息的版本,预留字段
#
#
#
#
###################################### 配置说明结束线 ########################################