
В сервисе Cloudflare есть удобный инструмент для фильтрации ботов - Firewall Rules.
Бот-фильтр особенно пригодится в случае, если не помогает режим Under Attack - с помощью Firewall Rules можно забанить ботов, которые обманули Javascript Challenge (например, как описано здесь).
На бесплатном тарифе дается всего 5 правил фильтрации, но на моей практике хватало 2-3 правил. К тому же, в одном правиле можно задать несколько условий и/или.
Инструмент предлагает 4 оператора:
И несколько полей для фильтрации:
Для каждого условия можно применить 4 действия: Allow (белый список), Block (банить), Challenge (показать капчу) и JS Challenge (яваскрипт капча).
Соответственно, для фильтрации хороших пользователей мы будем использовать Allow, а для ботов - Block и Challenge (JS Challenge не рекомендую, ненадежный метод). Рекомендую использовать Challenge вместо Block - пусть бот грузит капчу.
Поисковых ботов специально фильтровать не надо - они и так пропускаются сервисом Cloudflare.
Авторизованных пользователей можно отфильтровать по кукам, например, так (http.cookie contains "xf_session="). Назначаем для правила действие Allow - это гарантия того, что настоящий пользователь не попадет в бан.
Впрочем, боты могут подделывать куки, хотя ддосеры редко заморачиваются этим.
Ддос-ботов получится легко отфильтровать, если имеются какие-то серьезные аномалии в запросах. Например, если запросы передаются без User Agent, то их можно смело банить условием (http.user_agent eq "") .
Поле Value просто оставляем пустым.
Если ддосер использует сторонние сервисы, то значение User Agent может содержать дополнительную информацию.
Например, если в User Agent есть строчка FeedFetcher-Google, то создаем правило (http.user_agent contains "FeedFetcher-Google").
Куда больше возможностей дает фильтрация в сочетании с геолокацией.
Например, можно одним правилом ограничить доступ всем странам, кроме России: (ip.geoip.country ne "RU").
Если ддосят только главную страницу, то можно прописать такое правило: (ip.geoip.country ne "RU" and http.request.uri eq "/").
За поисковых ботов не переживайте - их не отфильтрует. Но все равно не забудьте через какое-то время правило отключить, чтобы не было отказов пользователей VPN.
Отдельного внимания заслуживает поле cf.threat_score (Threat Score).
Из документации:
Если IP был раньше замечен в ддосе, соответственно, его репутация плохая. Чем чаще ддосер будет использовать одних и тех же ботов против Cloudflare, тем легче их в последствии будет отфильтровать, в т.ч. владельцам других сайтов.
Вы можете, в принципе, задать правило только для этого поля. Например, всем, у кого репутация хуже 10, подсовывать каптчу. Если боты хорошо отфильтруются (см. журнал на вкладке Overview), то больше ничего подкручивать не надо.
Пишите ваши вопросы или делитесь опытом.
Бот-фильтр особенно пригодится в случае, если не помогает режим Under Attack - с помощью Firewall Rules можно забанить ботов, которые обманули Javascript Challenge (например, как описано здесь).
На бесплатном тарифе дается всего 5 правил фильтрации, но на моей практике хватало 2-3 правил. К тому же, в одном правиле можно задать несколько условий и/или.
Инструмент предлагает 4 оператора:
- equals - точное соответствие
- does not equals - не соответствует
- contains - содержит (никаких масок указывать не надо)
- does not contains - не содержит.
И несколько полей для фильтрации:
- http.cookie - содержит куки, позволяет добавить в исключение авторизованных пользователей
- http.host - содержит хост (домен), пригодится если ддос идет на поддомен вида subdomain.domain.com
- http.referer - содержит реферер, пригодится, если ддос идет через другие сайты (через взломанные сайты на wordpress, к примеру).
- http.request.full_uri - содержит полную ссылку, вида https:// domain.com/articles/index.php?param1=4.
- http.request.method - содержит метод отправки данных (GET, POST), пригодится, если ддосер субмитит форму, например.
- http.request.uri - эквивалент серверной переменной $_SERVER['REQUEST_URI'], пригодится, если ддос идет на внутренние страницы/ресурсы сайта.
- http.request.uri.path - ссылка без параметров GET вида /articles/index.php.
- http.request.uri.query - параметры GET, эквивалент серверной $_SERVER['QUERY_STRING'].
- http.user_agent - содержит информацию о клиенте
- ip.src - ip адрес
- ip.geoip.continent - содержит континент ip адреса: Африка, Антарктика, Азия, Европа, Южная Америка, Северная Америка, Океания.
- ip.geoip.country - содержит страну ip адреса (2-х символьный код).
- ip.geoip.is_in_european_union - проверяет, принадлежит ли IP-адрес к Евросоюзу (true - принадлежит).
- ssl - true, если обращаемся к сайту по https.
- cf.threat_score - определяет вероятность (0-100), что IP принадлежит боту (значение выше 10 могут означать ботов)
- cf.client.bot - определяет, принадлежит ли данный IP известному боту или сканеру
Для каждого условия можно применить 4 действия: Allow (белый список), Block (банить), Challenge (показать капчу) и JS Challenge (яваскрипт капча).
Соответственно, для фильтрации хороших пользователей мы будем использовать Allow, а для ботов - Block и Challenge (JS Challenge не рекомендую, ненадежный метод). Рекомендую использовать Challenge вместо Block - пусть бот грузит капчу.
Поисковых ботов специально фильтровать не надо - они и так пропускаются сервисом Cloudflare.
Авторизованных пользователей можно отфильтровать по кукам, например, так (http.cookie contains "xf_session="). Назначаем для правила действие Allow - это гарантия того, что настоящий пользователь не попадет в бан.
Впрочем, боты могут подделывать куки, хотя ддосеры редко заморачиваются этим.
Ддос-ботов получится легко отфильтровать, если имеются какие-то серьезные аномалии в запросах. Например, если запросы передаются без User Agent, то их можно смело банить условием (http.user_agent eq "") .
Поле Value просто оставляем пустым.
Если ддосер использует сторонние сервисы, то значение User Agent может содержать дополнительную информацию.
Например, если в User Agent есть строчка FeedFetcher-Google, то создаем правило (http.user_agent contains "FeedFetcher-Google").
Куда больше возможностей дает фильтрация в сочетании с геолокацией.
Например, можно одним правилом ограничить доступ всем странам, кроме России: (ip.geoip.country ne "RU").
Если ддосят только главную страницу, то можно прописать такое правило: (ip.geoip.country ne "RU" and http.request.uri eq "/").
За поисковых ботов не переживайте - их не отфильтрует. Но все равно не забудьте через какое-то время правило отключить, чтобы не было отказов пользователей VPN.
Отдельного внимания заслуживает поле cf.threat_score (Threat Score).
Из документации:
Это поле представляет оценку риска, 0 указывает на низкий риск. Значения выше 10 могут выявлять спаммеров или ботов, а значения выше 40 почти наверняка указывают на ботов. Редко можно увидеть значения выше 60.
Вы можете, в принципе, задать правило только для этого поля. Например, всем, у кого репутация хуже 10, подсовывать каптчу. Если боты хорошо отфильтруются (см. журнал на вкладке Overview), то больше ничего подкручивать не надо.
Пишите ваши вопросы или делитесь опытом.
Последнее редактирование: