@@ -39,6 +39,10 @@ an installation and the maintenance of, use our script :ref:`filtron.sh`.
3939Sample configuration of filtron
4040===============================
4141
42+.. sidebar:: Tooling box
43+
44+ - :origin:`/etc/filtron/rules.json <utils/templates/etc/filtron/rules.json>`
45+
4246An example configuration can be find below. This configuration limits the access
4347of:
4448
@@ -50,100 +54,100 @@ of:
5054
5155.. code:: json
5256
53− [{
54− "name":"search request",
55− "filters":[
56− "Param:q",
57− "Path=^(/|/search)$"
58− ],
59− "interval":"<time-interval-in-sec (int)>",
60− "limit":"<max-request-number-in-interval (int)>",
61− "subrules":[
62− {
63− "name":"roboagent limit",
64− "interval":"<time-interval-in-sec (int)>",
65− "limit":"<max-request-number-in-interval (int)>",
66− "filters":[
67− "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
68− ],
69− "actions":[
70− {
71− "name":"block",
72− "params":{
73− "message":"Rate limit exceeded"
74− }
75− }
76− ]
77− },
78− {
79− "name":"botlimit",
80− "limit":0,
81− "stop":true,
82− "filters":[
83− "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)"
84− ],
85− "actions":[
86− {
87− "name":"block",
88− "params":{
89− "message":"Rate limit exceeded"
90− }
91− }
92− ]
93− },
94− {
95− "name":"IP limit",
96− "interval":"<time-interval-in-sec (int)>",
97− "limit":"<max-request-number-in-interval (int)>",
98− "stop":true,
99− "aggregations":[
100− "Header:X-Forwarded-For"
101− ],
102− "actions":[
103− {
104− "name":"block",
105− "params":{
106− "message":"Rate limit exceeded"
107− }
108− }
109− ]
110− },
111− {
112− "name":"rss/json limit",
113− "interval":"<time-interval-in-sec (int)>",
114− "limit":"<max-request-number-in-interval (int)>",
115− "stop":true,
116− "filters":[
117− "Param:format=(csv|json|rss)"
118− ],
119− "actions":[
120− {
121− "name":"block",
122− "params":{
123− "message":"Rate limit exceeded"
124− }
125− }
126− ]
127− },
128− {
129− "name":"useragent limit",
130− "interval":"<time-interval-in-sec (int)>",
131− "limit":"<max-request-number-in-interval (int)>",
132− "aggregations":[
133− "Header:User-Agent"
134− ],
135− "actions":[
136− {
137− "name":"block",
138− "params":{
139− "message":"Rate limit exceeded"
140− }
141− }
142− ]
143− }
144− ]
145− }]
146−
57+ [
58+ { "name": "search request",
59+ "filters": [
60+ "Param:q",
61+ "Path=^(/|/search)$"
62+ ],
63+ "interval": "<time-interval-in-sec (int)>",
64+ "limit": "<max-request-number-in-interval (int)>",
65+ "subrules": [
66+ {
67+ "name": "roboagent limit",
68+ "interval": "<time-interval-in-sec (int)>",
69+ "limit": "<max-request-number-in-interval (int)>",
70+ "filters": [
71+ "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"
72+ ],
73+ "actions": [
74+ { "name": "log"},
75+ { "name": "block",
76+ "params": {
77+ "message": "Rate limit exceeded"
78+ }
79+ }
80+ ]
81+ },
82+ {
83+ "name": "botlimit",
84+ "limit": 0,
85+ "stop": true,
86+ "filters": [
87+ "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)"
88+ ],
89+ "actions": [
90+ { "name": "log"},
91+ { "name": "block",
92+ "params": {
93+ "message": "Rate limit exceeded"
94+ }
95+ }
96+ ]
97+ },
98+ {
99+ "name": "IP limit",
100+ "interval": "<time-interval-in-sec (int)>",
101+ "limit": "<max-request-number-in-interval (int)>",
102+ "stop": true,
103+ "aggregations": [
104+ "Header:X-Forwarded-For"
105+ ],
106+ "actions": [
107+ { "name": "log"},
108+ { "name": "block",
109+ "params": {
110+ "message": "Rate limit exceeded"
111+ }
112+ }
113+ ]
114+ },
115+ {
116+ "name": "rss/json limit",
117+ "interval": "<time-interval-in-sec (int)>",
118+ "limit": "<max-request-number-in-interval (int)>",
119+ "stop": true,
120+ "filters": [
121+ "Param:format=(csv|json|rss)"
122+ ],
123+ "actions": [
124+ { "name": "log"},
125+ { "name": "block",
126+ "params": {
127+ "message": "Rate limit exceeded"
128+ }
129+ }
130+ ]
131+ },
132+ {
133+ "name": "useragent limit",
134+ "interval": "<time-interval-in-sec (int)>",
135+ "limit": "<max-request-number-in-interval (int)>",
136+ "aggregations": [
137+ "Header:User-Agent"
138+ ],
139+ "actions": [
140+ { "name": "log"},
141+ { "name": "block",
142+ "params": {
143+ "message": "Rate limit exceeded"
144+ }
145+ }
146+ ]
147+ }
148+ ]
149+ }
150+ ]
147151
148152
149153Route request through filtron