rules.json 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. [
  2. {
  3. "name": "roboagent limit",
  4. "filters": [
  5. "Header:User-Agent=(curl|cURL|Wget|python-requests|Scrapy|FeedFetcher|Go-http-client|Ruby|UniversalFeedParser)"
  6. ],
  7. "limit": 0,
  8. "stop": true,
  9. "actions": [
  10. { "name": "log"},
  11. { "name": "block",
  12. "params": {
  13. "message": "Rate limit exceeded"
  14. }
  15. }
  16. ]
  17. },
  18. {
  19. "name": "botlimit",
  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)"
  22. ],
  23. "limit": 0,
  24. "stop": true,
  25. "actions": [
  26. { "name": "log"},
  27. { "name": "block",
  28. "params": {
  29. "message": "Rate limit exceeded"
  30. }
  31. }
  32. ]
  33. },
  34. { "name": "suspiciously frequent IP",
  35. "filters": [],
  36. "interval": 600,
  37. "limit": 30,
  38. "aggregations": [
  39. "Header:X-Forwarded-For"
  40. ],
  41. "actions":[
  42. {"name":"log"}
  43. ]
  44. },
  45. { "name": "search request",
  46. "filters": [
  47. "Param:q",
  48. "Path=^(/|/search)$"
  49. ],
  50. "interval": 61,
  51. "limit": 999,
  52. "subrules": [
  53. {
  54. "name": "missing Accept-Language",
  55. "filters": ["!Header:Accept-Language"],
  56. "limit": 0,
  57. "stop": true,
  58. "actions": [
  59. {"name": "block",
  60. "params": {"message": "Rate limit exceeded"}}
  61. ]
  62. },
  63. {
  64. "name": "suspiciously Connection=close header",
  65. "filters": ["Header:Connection=close"],
  66. "limit": 0,
  67. "stop": true,
  68. "actions": [
  69. {"name": "block",
  70. "params": {"message": "Rate limit exceeded"}}
  71. ]
  72. },
  73. {
  74. "name": "IP limit",
  75. "interval": 61,
  76. "limit": 9,
  77. "stop": true,
  78. "aggregations": [
  79. "Header:X-Forwarded-For"
  80. ],
  81. "actions": [
  82. { "name": "log"},
  83. { "name": "block",
  84. "params": {
  85. "message": "Rate limit exceeded"
  86. }
  87. }
  88. ]
  89. },
  90. {
  91. "name": "rss/json limit",
  92. "filters": [
  93. "Param:format=(csv|json|rss)"
  94. ],
  95. "interval": 121,
  96. "limit": 2,
  97. "stop": true,
  98. "actions": [
  99. { "name": "log"},
  100. { "name": "block",
  101. "params": {
  102. "message": "Rate limit exceeded"
  103. }
  104. }
  105. ]
  106. },
  107. {
  108. "name": "useragent limit",
  109. "interval": 61,
  110. "limit": 199,
  111. "aggregations": [
  112. "Header:User-Agent"
  113. ],
  114. "actions": [
  115. { "name": "log"},
  116. { "name": "block",
  117. "params": {
  118. "message": "Rate limit exceeded"
  119. }
  120. }
  121. ]
  122. }
  123. ]
  124. }
  125. ]