summarylogtreecommitdiffstats
path: root/rules.json
diff options
context:
space:
mode:
Diffstat (limited to 'rules.json')
-rw-r--r--rules.json62
1 files changed, 62 insertions, 0 deletions
diff --git a/rules.json b/rules.json
new file mode 100644
index 000000000000..487b61c9ef48
--- /dev/null
+++ b/rules.json
@@ -0,0 +1,62 @@
+[
+ {
+ "name": "Search request",
+ "filters": ["Param:q", "Path=^(/|/search)$"],
+ "interval": 5,
+ "limit": 1,
+ "subrules": [
+ {
+ "name": "Robo-agent limit",
+ "interval": 5,
+ "limit": 1,
+ "filters": ["Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"],
+ "actions": [
+ { "name": "block",
+ "params": { "message": "Rate limit exceeded" } }
+ ]
+ },
+ {
+ "name": "Bot limit",
+ "limit": 0,
+ "stop": true,
+ "filters": ["Header:User-Agent=(Googlebot|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ11bot|AhrefsBot|archive.org_bot|msnbot|MJ11bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT)"],
+ "actions": [
+ { "name": "block",
+ "params": { "message": "Rate limit exceeded" } }
+ ]
+ },
+ {
+ "name": "IP limit",
+ "interval": 5,
+ "limit": 1,
+ "stop": true,
+ "aggregations": ["Header:X-Forwarded-For"],
+ "actions": [
+ { "name": "block",
+ "params": { "message": "Rate limit exceeded" } }
+ ]
+ },
+ {
+ "name": "RSS/JSON limit",
+ "interval": 5,
+ "limit": 1,
+ "stop": true,
+ "filters": ["Param:format=(csv|json|rss)"],
+ "actions": [
+ { "name": "block",
+ "params": { "message": "Rate limit exceeded" } }
+ ]
+ },
+ {
+ "name": "User-agent limit",
+ "interval": 5,
+ "limit": 1,
+ "aggregations": ["Header:User-Agent"],
+ "actions": [
+ { "name": "block",
+ "params": { "message": "Rate limit exceeded" } }
+ ]
+ }
+ ]
+ }
+]