|
|
@@ -0,0 +1,62 @@ |
|
|
|
[ |
|
|
|
{ |
|
|
|
"name": "search request", |
|
|
|
"filters": ["Param:q", "Path=^(/|/search)$"], |
|
|
|
"interval": 60, |
|
|
|
"limit": 60, |
|
|
|
"subrules": [ |
|
|
|
{ |
|
|
|
"name": "roboagent limit", |
|
|
|
"interval": 60, |
|
|
|
"limit": 5, |
|
|
|
"filters": ["Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client)"], |
|
|
|
"actions": [ |
|
|
|
{"name": "block", |
|
|
|
"params": {"message": "Rate limit exceeded"}} |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"name": "botlimit", |
|
|
|
"limit": 0, |
|
|
|
"stop": true, |
|
|
|
"filters": ["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)"], |
|
|
|
"actions": [ |
|
|
|
{"name": "block", |
|
|
|
"params": {"message": "Rate limit exceeded"}} |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"name": "IP limit", |
|
|
|
"interval": 60, |
|
|
|
"limit": 15, |
|
|
|
"stop": true, |
|
|
|
"aggregations": ["Header:X-Forwarded-For"], |
|
|
|
"actions": [ |
|
|
|
{"name": "block", |
|
|
|
"params": {"message": "Rate limit exceeded"}} |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"name": "rss/json limit", |
|
|
|
"interval": 60, |
|
|
|
"limit": 15, |
|
|
|
"stop": true, |
|
|
|
"filters": ["Param:format=(csv|json|rss)"], |
|
|
|
"actions": [ |
|
|
|
{"name": "block", |
|
|
|
"params": {"message": "Rate limit exceeded"}} |
|
|
|
] |
|
|
|
}, |
|
|
|
{ |
|
|
|
"name": "useragent limit", |
|
|
|
"interval": 60, |
|
|
|
"limit": 15, |
|
|
|
"aggregations": ["Header:User-Agent"], |
|
|
|
"actions": [ |
|
|
|
{"name": "block", |
|
|
|
"params": {"message": "Rate limit exceeded"}} |
|
|
|
] |
|
|
|
} |
|
|
|
] |
|
|
|
} |
|
|
|
] |