Как лучше забанить ботов?

Ссылка скопирована
1 ответ

По вводным: увидел в логах поиска аномалию по запросам, разница между здоровым запросом и аномальным прослеживается в отсутствии GEO положения, сайт каждому пользователю сует в сессию Местоположение IP. У этих запросов вообще отсутствует переменная GEO

По вводным: какой-то бот через прокси зачем-то отправляет в форму поиска на сайте запросы.
Нужно понять: есть мысли как их банить?
Сейчас ситуация такая: у меня только такие мысли писать лог по всем запросам и натравить на него fail2ban, но проблема в том, что все IP разные и хз насколько раздуется firewall

,{"DATETIME":"31.10.2025 14:43:46","QUERY":"салатник","IP":"45.170.131.180"} ,{"DATETIME":"31.10.2025 14:43:49","QUERY":"нож§ion_id=1619","IP":"45.187.192.150"} ,{"DATETIME":"31.10.2025 14:43:54","QUERY":"кастрюля","IP":"14.230.175.224"} ,{"DATETIME":"31.10.2025 14:43:55","QUERY":"нерж§ion_id=1483","IP":"186.66.123.31"} ,{"DATETIME":"31.10.2025 14:43:58","QUERY":"кувшин","IP":"179.105.130.23"} ,{"DATETIME":"31.10.2025 14:44:00","QUERY":"кружка§ion_id=1571","IP":"177.54.161.13"} ,{"DATETIME":"31.10.2025 14:44:13","QUERY":"тарелка§ion_id=1723","IP":"201.0.122.5"} ,{"DATETIME":"31.10.2025 14:44:13","QUERY":"подставка","IP":"45.70.9.21"} ,{"DATETIME":"31.10.2025 14:44:19","QUERY":"тарелка§ion_id=121","IP":"123.24.177.126"} ,{"DATETIME":"31.10.2025 14:44:22","QUERY":"подставка","IP":"113.165.64.66"} ,{"DATETIME":"31.10.2025 14:44:24","QUERY":"блюдо","IP":"113.177.130.107"} ,{"DATETIME":"31.10.2025 14:44:25","QUERY":"тарелка§ion_id=122","IP":"189.141.53.100"} ,{"DATETIME":"31.10.2025 14:44:29","QUERY":"тарелка","IP":"14.169.176.78"} ,{"DATETIME":"31.10.2025 14:44:43","QUERY":"кувшин","IP":"168.227.160.143"} ,{"DATETIME":"31.10.2025 14:44:55","QUERY":"нож","IP":"201.71.4.143"} ,{"DATETIME":"31.10.2025 14:44:56","QUERY":"креманка§ion_id=1042","IP":"189.28.204.61"} ,{"DATETIME":"31.10.2025 14:44:59","QUERY":"рюмка","IP":"103.248.207.118"} ,{"DATETIME":"31.10.2025 14:45:12","QUERY":"бокал для пива","IP":"190.3.29.18"} ,{"DATETIME":"31.10.2025 14:45:17","QUERY":"салатник§ion_id=1688","IP":"45.184.57.128"} ,{"DATETIME":"31.10.2025 14:45:37","QUERY":"подставка","IP":"131.100.248.26"} ,{"DATETIME":"31.10.2025 14:45:40","QUERY":"блюдо§ion_id=672","IP":"14.254.104.243"} ,{"DATETIME":"31.10.2025 14:45:40","QUERY":"тарелка§ion_id=1572","IP":"212.35.169.251"} ,{"DATETIME":"31.10.2025 14:45:42","QUERY":"салатник§ion_id=120","IP":"103.57.22.52"} ,{"DATETIME":"31.10.2025 14:45:42","QUERY":"кастрюля§ion_id=971","IP":"45.187.200.68"} ,{"DATETIME":"31.10.2025 14:45:48","QUERY":"крышка","IP":"177.84.56.221"} ,{"DATETIME":"31.10.2025 14:45:58","QUERY":"ложка столовая§ion_id=1481","IP":"190.111.150.164"} ,{"DATETIME":"31.10.2025 14:46:02","QUERY":"винтаж§ion_id=233","IP":"37.112.29.238"} ,{"DATETIME":"31.10.2025 14:46:26","QUERY":"подставка","IP":"45.237.232.128"} ,{"DATETIME":"31.10.2025 14:46:27","QUERY":"салатник§ion_id=1873","IP":"45.5.39.255"} ,{"DATETIME":"31.10.2025 14:46:28","QUERY":"тарелка","IP":"14.189.166.162"} ,{"DATETIME":"31.10.2025 14:46:29","QUERY":"салатник§ion_id=142","IP":"187.62.202.73"} ,{"DATETIME":"31.10.2025 14:46:30","QUERY":"блюдо§ion_id=1573","IP":"206.43.98.4"} ,{"DATETIME":"31.10.2025 14:46:32","QUERY":"тарелка","IP":"177.197.236.61"} ,{"DATETIME":"31.10.2025 14:46:35","QUERY":"nizza","IP":"191.0.90.23"} ,{"DATETIME":"31.10.2025 14:46:37","QUERY":"тарелка","IP":"179.109.197.228"} ,{"DATETIME":"31.10.2025 14:46:38","QUERY":"кофе","IP":"190.5.6.206"} ,{"DATETIME":"31.10.2025 14:46:39","QUERY":"салатник§ion_id=174","IP":"45.163.153.6"} ,{"DATETIME":"31.10.2025 14:46:41","QUERY":"салатник§ion_id=1675","IP":"186.0.179.72"} ,{"DATETIME":"31.10.2025 14:47:02","QUERY":"креманка§ion_id=233","IP":"113.179.138.173"} ,{"DATETIME":"31.10.2025 14:47:04","QUERY":"black§ion_id=1421","IP":"179.125.38.122"} ,{"DATETIME":"31.10.2025 14:47:06","QUERY":"салатник§ion_id=120","IP":"113.183.167.222"} ,{"DATETIME":"31.10.2025 14:47:06","QUERY":"кофе","IP":"113.172.20.115"} ,{"DATETIME":"31.10.2025 14:47:06","QUERY":"соусник§ion_id=466","IP":"177.185.47.34"} ,{"DATETIME":"31.10.2025 14:47:07","QUERY":"подставка","IP":"80.233.53.170"} ,{"DATETIME":"31.10.2025 14:47:20","QUERY":"блюдо§ion_id=457","IP":"177.37.132.240"} ,{"DATETIME":"31.10.2025 14:47:24","QUERY":"блюдо","IP":"179.98.114.112"} ,{"DATETIME":"31.10.2025 14:47:41","QUERY":"кувшин","IP":"181.118.222.66"} ,{"DATETIME":"31.10.2025 14:47:41","QUERY":"салатник§ion_id=1402","IP":"45.237.116.187"} ,{"DATETIME":"31.10.2025 14:47:42","QUERY":"1883","IP":"177.190.216.120"} ,{"DATETIME":"31.10.2025 14:47:46","QUERY":"набор для специй§ion_id=1654","IP":"14.167.152.166"} ,{"DATETIME":"31.10.2025 14:47:46","QUERY":"тарелка","IP":"113.173.105.22"} ,{"DATETIME":"31.10.2025 14:47:48","QUERY":"тарелка","IP":"177.87.40.151"} ,{"DATETIME":"31.10.2025 14:47:48","QUERY":"тарелка","IP":"170.79.53.181"} ,{"DATETIME":"31.10.2025 14:47:53","QUERY":"блюдо","IP":"45.188.69.129"} ,{"DATETIME":"31.10.2025 14:48:13","QUERY":"подставка§ion_id=534","IP":"45.226.118.153"} ,{"DATETIME":"31.10.2025 14:48:16","QUERY":"питчер","IP":"131.255.46.32"} ,{"DATETIME":"31.10.2025 14:48:22","QUERY":"фуршет","IP":"191.179.116.144"} ,{"DATETIME":"31.10.2025 14:48:33","QUERY":"кастрюля","IP":"113.173.63.183"} ,{"DATETIME":"31.10.2025 14:48:38","QUERY":"нож§ion_id=1900","IP":"187.60.133.78"} ,{"DATETIME":"31.10.2025 14:48:52","QUERY":"подставка§ion_id=1555","IP":"113.172.212.174"} ,{"DATETIME":"31.10.2025 14:48:54","QUERY":"соусник","IP":"1.53.53.197"} ,{"DATETIME":"31.10.2025 14:49:10","QUERY":"тарелка§ion_id=164","IP":"143.255.205.142"} ,{"DATETIME":"31.10.2025 14:49:11","QUERY":"стойка§ion_id=1957","IP":"222.252.125.110"} ,{"DATETIME":"31.10.2025 14:49:14","QUERY":"тарелка§ion_id=1841","IP":"113.176.94.172"} ,{"DATETIME":"31.10.2025 14:49:16","QUERY":"тарелка§ion_id=1876","IP":"189.63.41.121"} ,{"DATETIME":"31.10.2025 14:49:19","QUERY":"нерж","IP":"113.170.245.129"} ,{"DATETIME":"31.10.2025 14:49:32","QUERY":"блюдо","IP":"113.184.61.165"} ,{"DATETIME":"31.10.2025 14:49:32","QUERY":"блюдо","IP":"190.134.254.118"} ,{"DATETIME":"31.10.2025 14:49:46","QUERY":"тарелка§ion_id=1640","IP":"14.191.90.62"} ,{"DATETIME":"31.10.2025 14:49:47","QUERY":"black raw stellar","IP":"177.205.123.201"} ,{"DATETIME":"31.10.2025 14:49:48","QUERY":"fo§ion_id=215","IP":"190.89.167.12"} ,{"DATETIME":"31.10.2025 14:50:17","QUERY":"подставка§ion_id=280","IP":"45.166.46.247"} ,{"DATETIME":"31.10.2025 14:50:24","QUERY":"ocean fusion","IP":"177.104.254.179"} ,{"DATETIME":"31.10.2025 14:50:26","QUERY":"подставка§ion_id=811","IP":"103.244.92.137"} ,{"DATETIME":"31.10.2025 14:50:28","QUERY":"тарелка§ion_id=1641","IP":"191.241.175.227"} ,{"DATETIME":"31.10.2025 14:50:48","QUERY":"тарелка","IP":"113.167.36.33"} ,{"DATETIME":"31.10.2025 14:50:49","QUERY":"нерж","IP":"186.224.135.22"} ,{"DATETIME":"31.10.2025 14:51:01","QUERY":"тарелка§ion_id=1159","IP":"177.234.223.158"} ,{"DATETIME":"31.10.2025 14:51:08","QUERY":"нож","IP":"113.173.10.79"} ,{"DATETIME":"31.10.2025 14:51:15","QUERY":"a santa morte","IP":"207.46.13.130"} ,{"DATETIME":"31.10.2025 14:51:16","QUERY":"поднос§ion_id=816","IP":"123.21.88.180"} ,{"DATETIME":"31.10.2025 14:51:21","QUERY":"соусник§ion_id=121","IP":"222.254.229.239"} ,{"DATETIME":"31.10.2025 14:51:31","QUERY":"тарелка§ion_id=1106","IP":"200.97.56.212"} ,{"DATETIME":"31.10.2025 14:51:41","QUERY":"поднос§ion_id=409","IP":"189.6.20.33"} ,{"DATETIME":"31.10.2025 14:52:03","QUERY":"нож","IP":"167.250.40.147"} ,{"DATETIME":"31.10.2025 14:52:03","QUERY":"тарелка§ion_id=1795","IP":"190.5.41.221"} ,{"DATETIME":"31.10.2025 14:52:07","QUERY":"соусник","IP":"179.130.167.62"} ,{"DATETIME":"31.10.2025 14:52:56","QUERY":"поднос","IP":"200.106.192.44"} ,{"DATETIME":"31.10.2025 14:53:03","QUERY":"подставка§ion_id=362","IP":"14.191.96.185"} ,{"DATETIME":"31.10.2025 14:53:45","QUERY":"блюдо прямоугольное§ion_id=1844","IP":"168.181.216.111"} ,{"DATETIME":"31.10.2025 14:53:55","QUERY":"нож§ion_id=939","IP":"113.163.250.117"} ,{"DATETIME":"31.10.2025 14:53:58","QUERY":"блюдо§ion_id=188","IP":"59.103.33.35"} ,{"DATETIME":"31.10.2025 14:54:04","QUERY":"кофе","IP":"14.191.179.74"} ,{"DATETIME":"31.10.2025 14:54:13","QUERY":"кастрюля","IP":"177.53.77.57"} ,{"DATETIME":"31.10.2025 14:54:23","QUERY":"крышка§ion_id=1571","IP":"191.99.15.226"} ,{"DATETIME":"31.10.2025 14:54:27","QUERY":"тарелки§ion_id=120","IP":"186.39.174.1"} ,{"DATETIME":"31.10.2025 14:54:36","QUERY":"тарелка§ion_id=1744","IP":"177.94.57.9"}
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Банить ботов только по отсутствию GEO-переменной рискованно: можно задеть реальных пользователей, у которых геолокация не определилась из-за базы GeoIP, IPv6, CDN, прокси оператора или ошибки вашего кода. Лучше использовать отсутствие GEO как один сигнал, а не единственный критерий блокировки.

Начните с логов. Соберите IP, user-agent, URL, частоту запросов, cookie/session id, код ответа и наличие GEO. Если видно, что один IP или подсеть делает сотни запросов в поиск, тогда можно писать правило.

Для nginx простая защита по rate limit:

limit_req_zone $binary_remote_addr zone=search_limit:10m rate=5r/m;
 
location /search/ {
    limit_req zone=search_limit burst=10 nodelay;
}

limit_req_zone $binary_remote_addr zone=search_limit:10m rate=5r/m; location /search/ { limit_req zone=search_limit burst=10 nodelay; }

Для fail2ban лучше банить по явному паттерну в access.log: частые обращения к поиску, одинаковый user-agent, отсутствие cookies или конкретные мусорные параметры. Пример фильтра зависит от формата логов, но идея такая: не “нет GEO”, а “много запросов к search за короткое время”.

Если сайт за Cloudflare/CDN, сначала убедитесь, что сервер видит реальный IP, а не IP CDN. Иначе fail2ban забанит Cloudflare, и вы сломаете доступ всем.

Также добавьте мягкие меры: robots.txt для нормальных ботов, noindex для мусорных search URL, кэширование, ограничение длины поискового запроса, captcha только после превышения лимитов.

Итог: отсутствие GEO используйте как сигнал для скоринга, но баньте по частоте и поведению. Сначала rate limit на поиск, потом fail2ban по логам, и обязательно проверьте реальный IP за CDN.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно