Это статья про то, как заблокировать ботов на сайте.
Если в Метрике резко возросли Прямые заходы, и вообще, их количество больше 10% общего трафика, пора бить тревогу.
Ниже опишу схему, какие настройки делаю сам. Это комбинация советов с https://vc.ru/seo/477451-nastraivaem-cloudflare-dlya-filtracii-botov , поста Ивана Хей Манимейкера https://t.me/heymoneymaker/1469 и опыт некоторых вебмастеров из чатиков телеграм.
Contents
Шаг 1. Подключаем сайт к CloudFlare
Как добавить домен в CloudFlare — тема отдельной статьи. Будем считать, что сайт вы уже добавили.
Далее нужно обязательно включить проксирование DNS, чтобы можно было настроить блокировку нежелательных ботов на стороне Клауда.
Шаг 2. Отключаем ipv6
Отключается ipv6 только через API. Сделать это в три клика можно по ссылке:
В России, отключая ipv6 в Клауде, мы не блокируем трафик, а просим пользователей перейти на ipv4. Реальные юзеры это проходят, а боты отсеиваются. То есть живой траф не теряем.
Шаг 3. Настраиваем файервол WAF в Клауд Флере
Финальный аккорд — настроить правила блокировки трафика в разделе Security / WAF для нашего домена в CloudFlare.
Я делаю 5 правил, одно из которых не активно (его заменяет отключение ipv6),- у себя можете это правило не создавать.
Порядок правил важен, поэтому нажимаем кнопку «+ Create rule» и делаем их строго в следующей последовательности.
При создании правила WAF надо задать: название (Rule name), само правило (Expression) и действие (Action). Удобно само правило копировать/вставить в текстовом виде — для этого нажимаете Edit expression и вставляете туда нужный текст.
Правило 1. Блокируем плохих ботов
- Название (Rule name): bad bots & biterika
- Expression: (http.request.uri contains «xmlrpc.php») or (http.user_agent contains «zgrab») or (http.user_agent contains «PetalBot») or (http.user_agent contains «Subscribe.Ru») or (http.user_agent contains «Twitterbot») or (http.user_agent contains «newspaper») or (http.user_agent contains «CCBot») or (http.user_agent contains «Dotbot») or (http.user_agent contains «Seekport Crawler») or (http.user_agent contains «oBot») or (http.user_agent contains «Barkrowler») or (http.user_agent contains «AhrefsBot») or (http.user_agent contains «SemrushBot») or (http.user_agent contains «MJ12bot») or (http.user_agent contains «bingbot») or (http.user_agent contains «msnbot») or (http.user_agent contains «serpstatbot») or (http.user_agent contains «Bytespider») or (http.user_agent contains «keys-so-bot») or (http.user_agent contains «VKRobotRB») or (http.user_agent contains «getintent.com») or (http.user_agent contains «awario.com») or (http.user_agent contains «applebot») or (http.user_agent contains «Censys») or (http.user_agent contains «DataForSeoBot») or (http.user_agent contains «python-requests») or (http.user_agent contains «openai.com») or (http.user_agent contains «Discordbot») or (http.user_agent contains «Amazon») or (http.user_agent contains «amazonbot») or (http.user_agent contains «ClaudeBot») or (http.user_agent contains «ImagesiftBot») or (ip.geoip.asnum eq 35048)
- Action: Block
Тут блокируется постинг ВордПресс через xmlrpc.php (можно деактивировать правило на время заливки постов, если вы пользуютесь хмл рпц), блокируются юзер агенты всяких ненужных ботов и краулеров (если в списке нужный вам бот — удалите самостоятельно) и блокируется ip подсеть битерики (рассадник ботоферм).
Правило 2. Разрешаем хороших ботов
- Название (Rule name): good bots & yandex
- Expression: (cf.client.bot) or (http.user_agent contains «Mail.RU_Bot») or (http.user_agent contains «StackRambler») or (http.user_agent contains «Pinterestbot») or (http.user_agent contains «letsencrypt») or (ip.geoip.asnum eq 13238) or (ip.geoip.asnum eq 208722) or (ip.geoip.asnum eq 208398) or (ip.geoip.asnum eq 15169) or (ip.src in {*.*.*.*})
- Action: Skip / All remaining custom rules
Внимание! В строке (ip.src in {*.*.*.*}) вместо звездочек обязательно пропишите ip адрес (или несколько адресов через пробел) своего сервера (серверов), где хостится ваш сайт. Это нужно, чтобы работал cron ВордПресса и все такое.
Тут мы разрешаем заходить на сайт ботам Яндекса, Гугл, Маил.ру, Рамблера, Пинтереста, открываем доступ для ip подсетей Яндекса и открываем запросы со своего же сервера.
Правило 3. (ВЫКЛЮЧЕНО) Фильтруем заходы с IPV6 и HTTP
- Название (Rule name): капчу всем, кто ломится по IPV6 или HTTP
- Expression: (ip.src in {::/0}) or (not ssl)
- Action: Managed Challenge
Это правило я не активирую. Его заменяет блокировка ipv6 через API — о чем рассказано выше в шаге 2.
Кстати, это правило и отключение ipv6 через API работают по-разному:
- правило 3 пропускает ботов, если они разгадали капчу от Клауда (при это Клауд показывают капчу выборочно, кому захочет)
- блокировка ipv6 через API просит юзера показать свой ipv4, и тогда уже пропускает. Боты на ipv6 отваливаются, а реальные юзеры проходят эту проверку.
В общем, не создавайте правило 3, а настройте блокировку из шага 2.
Правило 4. Фильтруем траф с устаревших протоколов
- Название (Rule name): протокол ниже HTTP/2
- Expression: (not http.request.version in {«HTTP/2» «HTTP/3» «SPDY/3.1»})
- Action: Managed Challenge
По таким протоколам ходят всякие парсеры и боты. Им мы и показываем капчу Клауда (на его усмотрение).
Правило 5. Фильтруем прямые заходы
- Название (Rule name): прямые заходы
- Expression: (http.referer eq «»)
- Action: Managed Challenge
Люди с биг кахуносами могут вместо капчи (Managed Challenge) делать блокировку прямых заходов (Action = Block).
Я же более лоялен к посетителям и оставляю шанс зайти на сайт тайп-ином в адресную строку браузера (сам так часто захожу).
Правила настроены. Смотрим результат
После настройки на второй день проверьте Источники трафика по Метрике — прямые заходы должны уменьшиться.
Также на странице Security / WAF в Клауде показывается статистика работы правил:

Обратите внимание, по последним двум правилам CSR на уровне 0-2%. Это доля тех, кто проходит капчу. Нормальный показатель — до 10%.
Добавьте в комментах, где я что-то пропустил или сделал не так.


