rules.json 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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":"log"},
  60. {"name": "block",
  61. "params": {"message": "Rate limit exceeded"}}
  62. ]
  63. },
  64. {
  65. "name": "suspiciously Connection=close header",
  66. "filters": ["Header:Connection=close"],
  67. "limit": 0,
  68. "stop": true,
  69. "actions": [
  70. {"name":"log"},
  71. {"name": "block",
  72. "params": {"message": "Rate limit exceeded"}}
  73. ]
  74. },
  75. {
  76. "name": "IP limit",
  77. "interval": 61,
  78. "limit": 9,
  79. "stop": true,
  80. "aggregations": [
  81. "Header:X-Forwarded-For"
  82. ],
  83. "actions": [
  84. { "name": "log"},
  85. { "name": "block",
  86. "params": {
  87. "message": "Rate limit exceeded"
  88. }
  89. }
  90. ]
  91. },
  92. {
  93. "name": "rss/json limit",
  94. "filters": [
  95. "Param:format=(csv|json|rss)"
  96. ],
  97. "interval": 121,
  98. "limit": 2,
  99. "stop": true,
  100. "actions": [
  101. { "name": "log"},
  102. { "name": "block",
  103. "params": {
  104. "message": "Rate limit exceeded"
  105. }
  106. }
  107. ]
  108. },
  109. {
  110. "name": "useragent limit",
  111. "interval": 61,
  112. "limit": 199,
  113. "aggregations": [
  114. "Header:User-Agent"
  115. ],
  116. "actions": [
  117. { "name": "log"},
  118. { "name": "block",
  119. "params": {
  120. "message": "Rate limit exceeded"
  121. }
  122. }
  123. ]
  124. }
  125. ]
  126. }
  127. ]