BotBan Защита сайта от ботов
Попробовать
Меню
BotBan Защита сайта от ботов
Тема оформления

Блокировка по IP: почему против ботов она почти не работает и кого задевает

Закрыть адрес из лога — самое очевидное действие и одно из самых бесполезных. Бот меняет адрес за минуту, а за одним адресом мобильного оператора сидят сотни людей. Разбираем, когда блок по IP всё-таки уместен и как не задеть своих.

7 мин чтения

Нашли в логе адрес, который за час сделал восемь тысяч запросов, дописали deny в конфигурацию nginx, перезагрузили. Через десять минут те же запросы идут с другого адреса. А через неделю менеджер пересылает письмо покупателя: «С телефона ваш сайт не открывается, с рабочего компьютера открывается». Оба события — последствия одной и той же строки в конфигурации.

Блокировка по IP исходит из того, что адрес — это примерно один человек или одна программа. Пятнадцать лет назад это было почти правдой. Сегодня обе половины этого допущения неверны.

Один адрес — это не один человек

Мобильные сети и CGNAT

Адресов IPv4 на всех давно не хватает, и операторы связи выкручиваются так: абонентам выдают внутренние адреса, а в интернет выпускают через общий шлюз. Это называется CGNAT, операторский NAT. Снаружи сотни, а то и тысячи абонентов выглядят как один адрес. Сегодня за ним жители одного района, завтра оператор перераспределит пулы, и за тем же адресом окажутся другие люди.

Мобильный интернет почти весь устроен именно так. Всё больше и домашних провайдеров делают то же самое. Закрыв такой адрес, вы закрываете сайт для всех абонентов оператора, которые в эту минуту за ним сидят. Они не напишут в поддержку: увидят ошибку и уйдут к конкуренту.

Офисы, университеты, общественный Wi-Fi

Сорок сотрудников офиса, общежитие, кафе, аэропорт — один внешний адрес. Если кто-то из них запустил расширение браузера, которое часто обращается к сайтам, частота с адреса вырастет у всех сразу.

IPv6

С IPv6 обратная проблема. Абоненту выдают не адрес, а целый диапазон, и адрес устройства в нём регулярно меняется ради приватности. Закрыть один адрес IPv6 бесполезно, человек получит соседний. Закрыть диапазон /64 — это обычно одна квартира, а /48 — сеть целой организации.

Один бот — это не один адрес

Домашние прокси

Резидентные прокси — пулы из миллионов адресов обычных абонентов: роутеры, телефоны, компьютеры, на которых стоит приложение, тайком торгующее их каналом. Аренда стоит недорого, адрес меняется на каждый запрос или раз в несколько минут. Для блокировки по IP такой бот невидим: каждый его адрес появляется у вас один раз. А закрытый вами адрес через час обслуживает обычного человека, которому не повезло с приложением.

Так выглядел рой, который вечером 19 октября пришёл на несколько подключённых к нам сайтов из Германии: сотни адресов, по одному запросу с каждого, обрезанная строка браузера, ни заголовка Accept-Language, ни Accept-Encoding. Ни один адрес не повторялся, банить было нечего. Ловится такой рой по рисунку: одинаковая строка браузера с сотен адресов и отсутствие заголовков, которые настоящий браузер шлёт всегда.

Облака

Новый виртуальный сервер в облаке поднимается за минуту, и вместе с ним бот получает новый адрес. Старый адрес возвращается в пул и через неделю достаётся кому-то другому, иногда вполне честному сервису. Чёрный список, который копился полгода, наполовину состоит из адресов, которые давно принадлежат не тем, кто их заслужил.

Кого задевает блок адреса

Покупателей на мобильном интернете — о них уже сказано.

Людей за VPN. Многие держат его включённым постоянно, и выходят они в интернет через адреса дата-центров, те же, что у ботов.

Ваши же службы. На сайте с 1С-Битриксом обмен с 1С поначалу выглядел как перебор паролей: частые обращения к странице авторизации обмена. Закрой владелец этот адрес по логу, обмен бы остановился. Скрипт по cron с чужого хостинга, запускавший wget, тоже выглядит в логе как бот. Его адрес надо не блокировать, а внести в белый список.

Роботов, без которых сайт не работает. Робот Яндекс Директа на одном магазине напольных покрытий делал около 10,8 тыс. запросов в сутки к тяжёлой странице. По частоте — идеальный кандидат на бан, но если его закрыть, Директ сочтёт сайт недоступным. Поисковые роботы тоже ходят часто, и диапазон Яндекса или Google в чёрном списке — это выпадение из выдачи.

Когда блокировка адреса всё-таки уместна

Не всегда она бесполезна. Есть случаи, где это правильный инструмент.

Конкретный сканер. Адрес из облака, который неделями перебирает /.env, /.git/config и wp-login.php. Это не общий адрес, за ним не сидят люди, и закрыть его в файрволе дешевле, чем каждый раз отвечать ему из PHP.

Автоматический список для файрвола со строгими условиями. Такой список должен собираться не из всех подозрительных, а только из тех, кто раз за разом оказывался программой, исключать общие адреса и сети поисковиков и сам забывать адрес, когда тот затихает. Как устроен наш — в статье «Список для файрвола и fail2ban».

Закрытый раздел для узкого круга. Если в панель управления заходят только из офиса, разумнее разрешить вход с адреса офиса, чем запрещать всех остальных по одному. Цена ошибки здесь низкая: тот, кого не пустили, знает, кому позвонить.

Временная мера во время атаки. Закрыть сеть на сутки, а потом вернуть. Любой блок адреса должен иметь срок, бессрочный бан — это мина, которая сработает на ком-нибудь через год.

Как это решено в BotBan

Общие адреса жёстко не блокируются на уровне движка: операторский NAT, сети мобильных операторов России и СНГ, CDN, частные диапазоны. Какой бы балл ни набрал такой посетитель и даже если владелец сам внёс адрес в чёрный список, он получает проверку браузера, а не отказ. Человек проходит её сам, программа без браузера — нет.

Сеть в чёрном списке не может быть шире /20 для IPv4 и /48 для IPv6 и не может быть служебным или операторским диапазоном: это проверяется при сохранении. Подтверждённый поисковый робот проходит даже из чёрного списка. Частота с одного адреса сама по себе даёт максимум проверку, и только при переходе на страницу: корзина и формы за общим адресом продолжают работать. Решение принимается по паре «адрес и строка браузера» с учётом десятков признаков, а не по адресу.

Лимит запросов с одного адреса, который владелец включает сам, общие адреса тоже не задевает. Не ограничивается и адрес, с которого за час пришло пять и больше разных браузеров: так выглядят офис или прокси, а не одна программа. Даже автооткат, который снимает блокировку при ошибке правила, считает долю заблокированных не по адресам, а по сетям: много адресов одной сети обычно оказываются одним участником — пулом прокси или облаком.

В список для файрвола, кроме записей вашего чёрного списка, попадают только адреса, которые за сутки не меньше трёх раз блокировались за явные признаки автоматизации: сканер, библиотека вместо браузера, поиск секретов, ловушка. Мобильных сетей, NAT, CDN, сетей поисковиков и адресов, с которых за последние сутки приходил кто-то похожий на человека, в нём не бывает. Через двое суток тишины адрес уходит из списка сам. Подробнее о том, кого мы не трогаем ни при каких условиях, — на странице «Кого не трогаем».

Что делать вместо ручного бана

  1. Прежде чем закрыть адрес, проверьте его: кому принадлежит сеть, не мобильный ли это оператор, не поисковый ли робот.
  2. Внесите свои службы в белый список: сервер 1С, cron, CRM, мониторинги.
  3. Смотрите на поведение и рисунок, а не на адрес: темп, порядок обхода, заголовки, одинаковую строку браузера с сотен адресов.
  4. Если всё же закрываете адрес, ставьте срок и не закрывайте сети шире, чем нужно.
  5. Повторяющихся явных ботов отдайте файрволу автоматически, по списку со строгими условиями, а не руками.

Похожая логика работает и с географией: закрытая страна задевает больше людей, чем ботов, — об этом статья о блокировке по странам.

Решение по теме

Термины из статьи

Как это настроить в BotBan

Читайте также