on master help sign in
[fix] indentation of filtron's rules (json)
6ff20ceMarkus Heiser
docs/admin/filtron.rst+85−94
@@ -57,100 +57,91 @@ of:
57
57
58.. code:: json
58.. code:: json
59
59
60− [
60+ [
61+ {
61− { "name": "search request",
62+ "name": "search request",
62− "filters": [
63+ "filters": [
63− "Param:q",
64+ "Param:q",
64− "Path=^(/|/search)$"
65+ "Path=^(/|/search)$"
65− ],
66+ ],
66− "interval": "<time-interval-in-sec (int)>",
67+ "interval": "<time-interval-in-sec (int)>"
67− "limit": "<max-request-number-in-interval (int)>",
68+ "limit": "<max-request-number-in-interval (int)>",
68− "subrules": [
69+ "subrules": [
69− {
70+ {
70− "name": "roboagent limit",
71+ "name": "missing Accept-Language",
71− "interval": "<time-interval-in-sec (int)>",
72− "limit": "<max-request-number-in-interval (int)>",
73− "filters": [
74− "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
75− ],
76− "actions": [
77− { "name": "log"},
78− { "name": "block",
79− "params": {
80− "message": "Rate limit exceeded"
81− }
82− }
83− ]
84− },
85− {
86− "name": "botlimit",
87− "limit": 0,
88− "stop": true,
89− "filters": [
72+ "filters": ["!Header:Accept-Language"],
90− "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
73+ "limit": "<max-request-number-in-interval (int)>",
91− ],
74+ "stop": true,
92− "actions": [
75+ "actions": [
93− { "name": "log"},
76+ {"name":"log"},
94− { "name": "block",
77+ {"name": "block",
95− "params": {
96− "message": "Rate limit exceeded"
78+ "params": {"message": "Rate limit exceeded"}}
79+ ]
97− }
80+ },
98− }
81+ {
82+ "name": "suspiciously Connection=close header",
83+ "filters": ["Header:Connection=close"],
84+ "limit": "<max-request-number-in-interval (int)>",
85+ "stop": true,
86+ "actions": [
87+ {"name":"log"},
88+ {"name": "block",
89+ "params": {"message": "Rate limit exceeded"}}
99− ]
90+ ]
100− },
91+ },
101− {
92+ {
102− "name": "IP limit",
93+ "name": "IP limit",
103− "interval": "<time-interval-in-sec (int)>",
94+ "interval": "<time-interval-in-sec (int)>"
104− "limit": "<max-request-number-in-interval (int)>",
95+ "limit": "<max-request-number-in-interval (int)>",
105− "stop": true,
96+ "stop": true,
106− "aggregations": [
97+ "aggregations": [
107− "Header:X-Forwarded-For"
98+ "Header:X-Forwarded-For"
108− ],
99+ ],
109− "actions": [
100+ "actions": [
110− { "name": "log"},
101+ { "name": "log"},
111− { "name": "block",
102+ { "name": "block",
112− "params": {
103+ "params": {
113− "message": "Rate limit exceeded"
104+ "message": "Rate limit exceeded"
114− }
105+ }
115− }
106+ }
116− ]
107+ ]
117− },
108+ },
118− {
109+ {
119− "name": "rss/json limit",
110+ "name": "rss/json limit",
120− "interval": "<time-interval-in-sec (int)>",
121− "limit": "<max-request-number-in-interval (int)>",
122− "stop": true,
123− "filters": [
111+ "filters": [
124− "Param:format=(csv|json|rss)"
112+ "Param:format=(csv|json|rss)"
125− ],
113+ ],
114+ "interval": "<time-interval-in-sec (int)>"
115+ "limit": "<max-request-number-in-interval (int)>",
116+ "stop": true,
126− "actions": [
117+ "actions": [
127− { "name": "log"},
118+ { "name": "log"},
128− { "name": "block",
119+ { "name": "block",
129− "params": {
120+ "params": {
130− "message": "Rate limit exceeded"
121+ "message": "Rate limit exceeded"
131− }
122+ }
132− }
123+ }
133− ]
124+ ]
134− },
125+ },
135− {
126+ {
136− "name": "useragent limit",
127+ "name": "useragent limit",
137− "interval": "<time-interval-in-sec (int)>",
128+ "interval": "<time-interval-in-sec (int)>"
138− "limit": "<max-request-number-in-interval (int)>",
129+ "limit": "<max-request-number-in-interval (int)>",
139− "aggregations": [
130+ "aggregations": [
140− "Header:User-Agent"
131+ "Header:User-Agent"
141− ],
132+ ],
142− "actions": [
133+ "actions": [
143− { "name": "log"},
134+ { "name": "log"},
144− { "name": "block",
135+ { "name": "block",
145− "params": {
136+ "params": {
146− "message": "Rate limit exceeded"
137+ "message": "Rate limit exceeded"
147− }
138+ }
148− }
139+ }
149− ]
140+ ]
150− }
141+ }
151− ]
142+ ]
152− }
143+ }
153− ]
144+ ]
154
145
155
146
156.. _filtron route request:
147.. _filtron route request:
utils/templates/etc/filtron/rules.json+115−113
@@ -1,127 +1,129 @@
1[
1[
2 {
2 {
3− "name": "roboagent limit",
3+ "name": "roboagent limit",
4− "filters": [
4+ "filters": [
5− "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client|Ruby|UniversalFeedParser)"
5+ "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client|Ruby|UniversalFeedParser)"
6− ],
6+ ],
7− "limit": 0,
7+ "limit": 0,
8− "stop": true,
8+ "stop": true,
9− "actions": [
9+ "actions": [
10− { "name": "log"},
10+ { "name": "log"},
11− { "name": "block",
11+ { "name": "block",
12 "params": {
12 "params": {
13− "message": "Rate limit exceeded"
13+ "message": "Rate limit exceeded"
14 }
14 }
15− }
15+ }
16− ]
16+ ]
17 },
17 },
18 {
18 {
19− "name": "botlimit",
19+ "name": "botlimit",
20− "filters": [
20+ "filters": [
21− "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
21+ "Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"
22− ],
22+ ],
23− "limit": 0,
23+ "limit": 0,
24− "stop": true,
24+ "stop": true,
25− "actions": [
25+ "actions": [
26− { "name": "log"},
26+ { "name": "log"},
27− { "name": "block",
27+ { "name": "block",
28 "params": {
28 "params": {
29− "message": "Rate limit exceeded"
29+ "message": "Rate limit exceeded"
30 }
30 }
31− }
31+ }
32− ]
32+ ]
33 },
33 },
34+ {
34− { "name": "suspiciously frequent IP",
35+ "name": "suspiciously frequent IP",
35− "filters": [],
36+ "filters": [],
36− "interval": 600,
37+ "interval": 600,
37− "limit": 30,
38+ "limit": 30,
38− "aggregations": [
39+ "aggregations": [
39− "Header:X-Forwarded-For"
40+ "Header:X-Forwarded-For"
40 ],
41 ],
41− "actions":[
42+ "actions":[
42− {"name":"log"}
43+ {"name":"log"}
43 ]
44 ]
44 },
45 },
46+ {
45− { "name": "search request",
47+ "name": "search request",
46− "filters": [
48+ "filters": [
47− "Param:q",
49+ "Param:q",
48− "Path=^(/|/search)$"
50+ "Path=^(/|/search)$"
49− ],
51+ ],
50− "interval": 61,
52+ "interval": 61,
51− "limit": 999,
53+ "limit": 999,
52− "subrules": [
54+ "subrules": [
53− {
55+ {
54− "name": "missing Accept-Language",
56+ "name": "missing Accept-Language",
55− "filters": ["!Header:Accept-Language"],
57+ "filters": ["!Header:Accept-Language"],
56− "limit": 0,
58+ "limit": 0,
57− "stop": true,
59+ "stop": true,
58− "actions": [
60+ "actions": [
59− {"name":"log"},
61+ {"name":"log"},
60− {"name": "block",
62+ {"name": "block",
61− "params": {"message": "Rate limit exceeded"}}
63+ "params": {"message": "Rate limit exceeded"}}
62− ]
64+ ]
63− },
65+ },
64− {
66+ {
65− "name": "suspiciously Connection=close header",
67+ "name": "suspiciously Connection=close header",
66− "filters": ["Header:Connection=close"],
68+ "filters": ["Header:Connection=close"],
67− "limit": 0,
69+ "limit": 0,
68− "stop": true,
70+ "stop": true,
69− "actions": [
71+ "actions": [
70− {"name":"log"},
72+ {"name":"log"},
71− {"name": "block",
73+ {"name": "block",
72− "params": {"message": "Rate limit exceeded"}}
74+ "params": {"message": "Rate limit exceeded"}}
73− ]
75+ ]
74− },
76+ },
75− {
77+ {
76− "name": "IP limit",
78+ "name": "IP limit",
77− "interval": 61,
79+ "interval": 61,
78− "limit": 9,
80+ "limit": 9,
79− "stop": true,
81+ "stop": true,
80− "aggregations": [
82+ "aggregations": [
81− "Header:X-Forwarded-For"
83+ "Header:X-Forwarded-For"
82− ],
84+ ],
83− "actions": [
85+ "actions": [
84− { "name": "log"},
86+ { "name": "log"},
85− { "name": "block",
87+ { "name": "block",
86− "params": {
88+ "params": {
87− "message": "Rate limit exceeded"
89+ "message": "Rate limit exceeded"
88− }
90+ }
89− }
91+ }
90− ]
92+ ]
91− },
93+ },
92− {
94+ {
93− "name": "rss/json limit",
95+ "name": "rss/json limit",
94− "filters": [
96+ "filters": [
95− "Param:format=(csv|json|rss)"
97+ "Param:format=(csv|json|rss)"
96− ],
98+ ],
97− "interval": 121,
99+ "interval": 121,
98− "limit": 2,
100+ "limit": 2,
99− "stop": true,
101+ "stop": true,
100− "actions": [
102+ "actions": [
101− { "name": "log"},
103+ { "name": "log"},
102− { "name": "block",
104+ { "name": "block",
103− "params": {
105+ "params": {
104− "message": "Rate limit exceeded"
106+ "message": "Rate limit exceeded"
105− }
107+ }
106− }
108+ }
107− ]
109+ ]
108− },
110+ },
109− {
111+ {
110− "name": "useragent limit",
112+ "name": "useragent limit",
111− "interval": 61,
113+ "interval": 61,
112− "limit": 199,
114+ "limit": 199,
113− "aggregations": [
115+ "aggregations": [
114− "Header:User-Agent"
116+ "Header:User-Agent"
115− ],
117+ ],
116− "actions": [
118+ "actions": [
117− { "name": "log"},
119+ { "name": "log"},
118− { "name": "block",
120+ { "name": "block",
119− "params": {
121+ "params": {
120− "message": "Rate limit exceeded"
122+ "message": "Rate limit exceeded"
121− }
123+ }
122− }
124+ }
123− ]
125+ ]
124− }
126+ }
125− ]
127+ ]
126 }
128 }
127]
129]