Блокировка ботов через Cloudflare.

В прошлый раз мы блокировали ботов через NGINX, но бывают ситуации, когда блокировка на стороне веб сервера не способна решить проблему. Типичным примером является атака ботнета, когда безымянные боты с огромного количества различный IP адресов отправляют запросы на ваш сайт.

В такой ситуации защита от ботов от Cloudflare может спасти ваш хост от перегрузок и прочих негативных последствий. Чтобы работали функции указанные далее в Cloudflare для вашего домена должно быть включено проксирование. Именно за счет того, что трафик будет идти не напрямую к нашему хосту, а через сервера Cloudflare, по пути будет возможна фильтрация.

Если вы заметили на вашем хосте подозрительную активность, первый шаг увеличить уровень защиты. В настройках нашего домена переходим в раздел Security -> Settings и в выпадающем меню Security Level выбираем I’m Under Attack!

Алгоритмы Cloudflare успешно идентифицируют большую часть ботов. Однако, данный режим довольно агрессивный и может блокировать полезных ботов. Поэтому включайте его на некоторое время, например на час, и если за это время наплыв ботов прошел, возвращайте прежний уровень защиты. Дополнительно можно включить опцию Bot Fight Mode в Security -> Bots

Если автоматических мер оказалось недостаточно, добавим правила в файрволл WAF. Переходим в Security -> WAF вкладка Custom rules. Жмем Create rule, чтобы добавить новое правило.

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

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

Самая вариативная часть это само правило. В поле Field мы выбираем по какому параметру проверяем запрос, в Operator задаем равно или не равно, а в Value значение с которым мы сравниваем параметр.

Наиболее используемые для блокировки параметры:
IP Source Address — для блокировки по IP
User Agent — для блокировки по агенту
Country — для блокировки по стране

Так например, если ваш сайт направлен исключительно на внутреннего потребителя, можете ограничить доступ к нему для всех остальных стран. Для этого в поле Field выбираем Country, Operator выставляем does not equal, а в поле Value вашу страну. Действие устанавливаете на Block. Это надежно защитит ваш сайт от ботов со всего мира, но будьте осторожны со строгими ограничениями. Сбалансируйте их разрешающими правилами для поисковых ботов иначе ваш сайт выпадет из индексации.

В процессе администрирования, вы столкнетесь с разными ботами, и в зависимости от ситуации вам придется настраивать разные правила. Но есть одно правило которое хорошо иметь в запасе. Когда наваливается большой поток ботов, а автоматические алгоритмы Cloudflare не могут выявить ботов, включение проверки для всех поможет сильно проредить количество ботов, которые доберутся до вашего сайта.

Поле Field выставляем URI Path, Operator — contains, Value — /. Правило читается как, если в пути есть / Под это правило подпадает любое обращение к любой странице. И действие Managed Challenge — ручная проверка, наподобие капчи. С таким правилом, каждый посетитель должен будет пройти проверку, а в случае неудачи ему будет отказано в доступе к сайту.

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