Как написать свое правило фильтрации трафика WAF в Killbot

Защита сайта от поведенческих ботов

Защита сайта от всех видов поведенческих ботов. Интеграция через изменение DNS записи домена. Защита от скликивания контекстной рекламы Яндекс Директ.
ПОПРОБОВАТЬ БЕСПЛАТНО  =>

Фильтрация трафика в Killbot возможна не только через слепки браузера, но и через гибкие правила фильтрации, которые задаются вручную. Это значит, что вы получаете прямой контроль над логикой фильтрации, настраивая её под свои реальные задачи. Правила, в зависимости от параметров браузера, параметров Киллбота, IP пользователя и других параметров, позволяют выполнять нужное действие (блокировка, капча, зацикливание, скрытие метрики).

Правила этого раздела работают на странице верификации (проверочном экране KillBot). Т.е. пользователь попадает на страницу верификации, а уже там срабатывает правило. Если вам нужно чтобы страница верификации вообще не срабатывала (например, колбеки платежных систем, соединения от сервера 1C), то для этой цели в настройках скрипта (настройках сайта) есть параметры: белый список IP, белый список user-agent, и список страниц, для которых защита вообще отключена.

Структура интерфейса создания правил

Официальная документация KillBot, описание которой вы найдете ниже, содержит полное руководство по созданию собственных WAF-правил фильтрации трафика. Правила создаются в личном кабинете KillBot на странице Правила [WAF] - Создать правило.

Страница содержит 3 основных поля:

  1. Название правила
  2. PHP код правила. Сюда вы пишете логику правила на PHP.
  3. Данные для отладки визита JSON. Тестовые данные визита для проверки вашего правила (копируется из карточки визита, нужно подвести мышку к вопросику в интересующем вас визите).

Чуть ниже вы найдете список опций:

  • Кем считать визит при срабатывании правила - пользователем или ботом.
  • Какие действия применять.
  • Скрывать или показывать метрику.

Тестовые данные копируются целиком из всплывающего окна из ленты визитов, вставляются в поле для отладки.

Подробное описание всех параметров в блоке JSON

Блок killbot

  • UserID — Уникальный идентификатор пользователя, не зависящий от cookie. Используется для отслеживания визитов одного пользователя даже. UserID пользователя не изменится при использовании режима инкогнито и очистке куков. UserID условно-уникальный, т.е. KillBot берёт всевозможное браузерное окружение и генерирует UserID. Т.е. могут существовать и разные реальные пользователи у которых UserID совпадает. Цифру уникальности для каждого UserID я предоставлю позже - как сделаю соответствующие эксперименты.
  • bot — Является ли визит ботом (true/false), выставляется системой до применения правил по логике выставленной в настройках скрипта килбот на основании слепков.
  • capt - это какой тип капчи показан. capt = false - капча не показана, capt = 2 - слайдер, capt = 3 - ALERT CANSEL , capt=31 - ALERT OK , capt=4 - зациклить
  • deny - запретить заход. если deny=true, то заход на сайт запрещён - будет показан просто белый экран.
  • solved_early — если solved_early = true значит, что пользователь уже решил капчу ранее, по умолчанию таким пользователям капча не показывается. solved_early = false это значит, что ранее и пользователь капчу не решал.
  • vpn — Используется ли VPN (1 — да, 0 — нет). Определяется, по доступности сайтов, заблокированных в РФ (например, Instagram).
  • snsht — Слепок (snapshot) браузера, используется для сравнения с слепками известных браузеров и ботов.
  • snsht_hd — Слепок детализированный, можно использовать если бот повторяет слепок реального браузера.
  • net_id — Внутренний идентификатор сети KillBot, определяет какое именно у пользователя сетевое окружение. Описание идентификатора сети в параметре net_t.
  • net_t — Тип сети:
    • corp — корпоративная сеть или VPN  (на IP пользователя открыт один из портов: 80,443,22,3389)
    • mobile — мобильная сеть (все порты закрыты)
    • home — домашняя сеть (IP только пингуется)
  • bl — Слепок визита находится ли визит в чёрном списке (blacklist).
  • wl — Слепок визита есть в списке системных или пользовательских браузерах (whitelist).
  • ffp — Font fingerprint браузера - фингерпринт того, как именно браузер отрисовывает шрифты. Если слепок бота повторяет слепок реального браузера, то можно по этому параметру создать правило.

Блок user

  • timezone — Временная зона пользователя (например, Europe/Moscow, UTC).
  • locale — Локаль пользователя (язык системы, например, ru-RU, en-US).

Блок net

  • ip — IP-адрес пользователя.
  • webrct_ip —  WEBrtc IP-адрес пользователя.
  • host — Имя хоста, на который резолвится IP-адрес (к IP адресу может быть привязан домен, если значение пустое, то домен не привязан).
  • asn — Autonomous System Number — номер автономной системы, к которой принадлежит IP (можно использовать для определения интернет провайдера). Есть провайдеры через которых прогоняется только бот трафик, например Biterika.
  • country — Страна, определённая по IP.
  • ports — Список открытых портов на данном IP (обычно пуст для мобильных/домашних сетей).
  • ping — Пингуется ли IP пользователя (true/false).
  • ttlOS — Операционная система, определённая по TTL пакета (например, Linux, Windows).
  • ttl — Значение TTL пакета (например, 52, 64, 128 — косвенно указывает на ОС и тип трафика).

Блок request

  • user-agent — User-Agent браузера (можно использовать для поиска ботов и парсеров).
  • referer — С какого сайта пришел пользователь (реферер).
  • url — Запрошенный URL.

Блок browser

  • name — Название браузера (Chrome, Firefox и т.д.).
  • language — Язык, установленный в браузере (например, en-US, ru-RU).
  • webdriver — Программно управляется браузер или нет (true — браузер управляется программой, это 100% боты).

Блок device

  • width/height — Физическая ширина/высота экрана устройства.
  • os — Операционная система устройства (например, Mac OS X, Windows, Linux).

Как писать PHP-правила фильтрации трафика в KillBot

Доступные переменные: $data - содержит JSON-структуру визита (например, $data['user']['locale']). Используйте только $data. Все другие переменные - запрещены.

Разрешённые функции: strpos, stripos, strstr, stristr, str_contains, substr, preg_match, in_array, isset, empty, count, strlen, array_key_exists.

Разрешённые операторы: &&, ||, !, ==, ===, !=, !==, <, >, <=, >=.

Разрешённые конструкции: if, else, elseif, return, true, false, null.

Что запрещено:
Опасные функции - eval, exec, system, shell_exec, fopen, file_get_contents, include, require, и т.п.
Создание классов/функций - нельзя использовать function, class, namespace, new.
Глобальные переменные - $_GET, $_POST, $_SERVER и т.п.
Вывод - echo, print, die, exit.

Сколько правил можно создать в Killbot

В KillBot можно создать много правил для фильтрации. Для визита правила проверяются по порядку (по номеру / весу). Первое выполненное правило считается примененным - остальные правила игнорируется. Если ни одно правило не выполнено, то визит считается ботом или пользователем по умолчанию - на основе настроек выставленных в скрипте KillBot.

Пример создания правила

Ниже правило, которое будет считать ботом все визиты, в user agent которых есть слово Bot:

В правиле:

  • $data['request']['user-agent'] - UserAgent визита
  • stripos - функция, которая ищет подстроку "Bot", stripos (через "i") - это значит без чувствительности к регистру, т.е. "bot" и "Bot" - одно и тоже.
  • stripos($data['request']['user-agent'], 'bot') - найдёт позицию первого вхождения подстроки "bot" и вернет false - если подстроки "bot" нет в строке $data['request']['user-agent']
  • if (stripos($data['request']['user-agent'], 'bot') !== false) - это означает, что условие выполнено, если подстрока bot содержится в $data['request']['user-agent']

Вам необходимо заполнить все необходимые поля: название, код правила. JSON можно оставить стандартный, либо вставить в поле тестовые данные для отладки. После чего - сохранить правило.
В этот момент чекер Киллбота проверит синтаксис правила на валидность и выдаст результат применения правила к тестовым данным.

Если Киллбот выдал сообщение "Результат выполнения правила: FALSE - правило НЕ сработало, тестовые данные не удовлетворяют требованиям правила" - это значит что в User Agent нет подстроки Bot.
Если вы измените User Agent в тестовых данных на содержащий слово Bot, сохраните, правило вернет TRUE.

Действия при срабатывании правила

В трех полях ниже выбираются необходимые действия при срабатывании правила.

Бот/Польз. Как обработать визиты которые подходят под правило (если PHP код правила вернул TRUE). Если По умолчанию, то решение, бот или нет, будет приниматься на основе настроек слепков.

Доступные параметры:

  • По умолчанию
  • Пользователь
  • Бот

Действие. Как реагировать на визиты которые подходят под правило (если PHP код правила вернул TRUE). Если По умолчанию то решение как действовать будет приниматься на основе настроек слепков.

Доступные параметры:

  • По умолчанию
  • Капча-слайдер
  • Показать Alert [CANCEL]
  • Показать Alert [OK]
  • Заблокировать
  • Без капчи
  • Зациклить

Метрика и Аналитика. Пропускать или нет ботов в Гугл Аналитику и Яндекс Метрику. Стоит иметь в виду, что использование Гугл Аналитикс - это трансграничная передача данных, и для ее использование требуется уведомление РКН.

Доступные параметры:

  • По умолчанию
  • Скрыть
  • Показать

Как применить правило к сайту

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

Примеры правил WAF для KIllbot

Примеры ниже помогут вам разобраться более подробно, понять как это работает.

Host (резолв IP-адреса)

Один из самых показательных признаков - это host, к которому имени домена резолвится IP-адрес посетителя.

Если IP уходит, например, на *.amazonaws.com, digitalocean.com или другие облачные платформы, это почти всегда сервер, а не домашний пользователь.
Такие хосты часто используются либо для работы ботов, либо как выходные узлы VPN.
Если таких заходов много с одного диапазона, это почти точно бот-сеть. Если единичный визит — возможно, VPN.

Часовой пояс / география

Следующее, что стоит проверить — это соответствие часового пояса (timezone) географическому положению IP-адреса:

Пользователь из России, у которого выставлен часовой пояс, например, UTC+0, вызывает подозрения.
Это может указывать на заход с сервера, где часовой пояс установлен по умолчанию, или бот это просто бот, который не подменяет системные настройки.

Язык браузера и локаль
Еще один важный индикатор — это язык браузера (navigator.language) и локаль:

Например, если часовой пояс России, а язык браузера — русский (ru-RU), а локаль английская, это не является стопроцентным индикатором, но для российского трафика это редкость - т.е. если много визитов с таким паттерном - то все их под капчу, например.
В совокупности с другими параметрами это усиливает подозрение, что трафик не живой.

Наличие открытых портов у IP-адреса

У обычного пользователя, будь то сотовый интернет или домашний Wi-Fi - внешний IP-адрес не имеет открытых портов: это значит что удаленно на компьютер пользователя не зайти и никакой внешний сайт на компьютере пользователя (роутере) не висит.

Если на IP-адресе открыты:

  • 80 или 443 порты — с высокой вероятностью на этом IP работает веб-сервер.
  • 22 (SSH) или 3389 (RDP) — это удалённое администрирование, типичное для серверов.

Такой IP может принадлежать VPN или серверу, с которого работает бот.

Анализ TTL (Time To Live)

TTL (Time To Live) - это параметр, содержащийся в каждом сетевом пакете, который определяет максимальное число маршрутизаторов (промежуточных серверов или IP), через которые этот пакет может пройти в интернете. Каждая операционная система устанавливает свой дефолтный (по умолчанию) TTL при отправке пакетов.

  • Windows - 128
  • Linux / Android / macOS - 64
  • Unix BSD - 255

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

Если мы знаем, что в заголовках запроса указано, что пользователь использует, например, Windows, но TTL у него 64, как у Linux, - это уже повод для подозрения. Такое несоответствие между User-Agent и TTL может указывать на:

  • использование прокси-сервера, который подменяет системный TTL;
  • работу через контейнер или облачный сервер, где ОС другая;
  • подделку User-Agent, когда бот маскируется под другую ОС.

TTL - не абсолютный признак, он может меняться в зависимости от сетевых условий, VPN и маршрутов. Но в связке с другими признаками (WebDriver, host, locale, WebRTC, и т.д.) TTL становится мощным индикатором нечестного трафика или бот-сетей.

100% признак бота: WebDriver = true

WebDriver - это программный интерфейс, который позволяет управлять браузером извне, автоматически эмулируя действия пользователя: клики, переходы, ввод текста и т.д. Он используется в инструментах автоматизации, таких как:

  • Selenium
  • Puppeteer
  • Headless Chrome/Firefox

Если KillBot зафиксировал этот параметр, это означает, что:

  • браузер запущен под программным управлением,
  • внутри браузера присутствует объект navigator.webdriver = true,
  • это прямое свидетельство, что браузером управляет бот-скрипт или антидетект-платформа.

Если webdriver==true - это 100% бот, визит может быть реальным только если администратор тестирует свою бот программу.

Признак бота: wl=false (нет в списке системных браузеров)

Wl - это параметр Килбота. Он может принимать два значения:

  • true — слепок браузера визита есть в системном списке браузеров (white list);
  • false — слепок не найден среди известных доверенных браузеров.

Если wl = false,  то, по умолчанию, KillBot считает такие визиты ботами. Если таких визитов много в трафике сайта - это 100% боты, если таких визитов в реальном трафике менее 5% - то тут могут быть и живые пользователи.

Запрещаем некоторые ASN

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

Запрещаем прямой трафик с определенным слепком

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

Разрешаем трафик с определенным URL

Зачастую нужно пропускать трафик с определенными метками в URL.

Резюме

Killbot - это активно развивающаяся система фильтрации бот трафика, идущая в ногу со временем. Правила фильтрации сейчас пишет ИИ, в автоматическом режиме, поэтому среднестатистическому пользователю системы достаточно всё запустить и произвести первоначальную настройку, дальше антибот будет работать сам, и всегда будет находиться в актуальном состоянии.
Если же вам нужно понимать, как что работает, лично контролировать процесс, то на основе примеров выше и изучения параметров, которые Killbot передает в JSON - вы сможете гибко настраивать все необходимое именно под свои задачи.

Российская альтернатива Cloudflare

Cloudflare окончательно заблокирован в РФ ещё летом 2025 года.
Функцию фильтрации ботов Cloudflare взял на себя российский антибот Killbot.
Принцип работы отличается от привычного, отслеживаются не знакомые всем при настройке других антибот решений параметры (входящие IP адреса, AS подсети ботов, User Agent и прочее, всё это легко подделывается), а уникальные для каждого набора браузеров слепки.
По отличию оригинального браузера от модифицированного, тот или иной заход определяется либо как заход реального посетителя, либо как заход бота.

Чтобы не повторяться - расписывал более подробно в статьях:

Попробовать бесплатно. При регистрации в Killbot введите промокод
promo13
и получите месяц тестирования платного тарифа Killbot (фильтрация трафика, 1000 руб) и Ads (отключение показа рекламы поведенческим ботам, 1000 руб) в качестве бонуса. Этого вам хватит на то, чтобы понять, подходит вам данное решение, или нет. На данный момент - в Рунете нет более достойной альтернативы, по соотношению цена-качество. Срок действия промокода ограничен по времени, куда-то записывать его нет смысла. В следующий раз промокод уже будет другой, поэтому использовать его нужно сейчас, когда вы читаете этот текст. Промокод действует только в форме регистрации. Если аккаунт уже создан - создайте новый, на другой почте, и при регистрации в последнем поле введите промокод.

Подпишитесь на Telegram канал / MAX для того, чтобы всегда быть в курсе последних новостей и обновленных настроек для защиты от ботов, а также оперативно получать новые материалы, выходящие на antibot24.ru

Автор: Сергей AntiDdos

Автор статей: Сергей (AntiBot24). Эксперт в области фильтрации поведенческого трафика, настройки антибот систем. Высший рейтинг на Kwork, более 680 отзывов, 100% заказов успешно сдано, 56% повторных заказов. Пишу подробные статьи, инструкции по фильтрации ботов в своем блоге antibot24.ru

Всегда нужно иметь в виду, что те советы, которые вы прочли в статьях - это лишь часть настроек, которые я делаю при профессиональной экспертной настройке фильтрации поведенческих ботов. Все остальное - это непубличные профессиональные секреты. Любая информация, становящаяся общедоступной - достаточно быстро устаревает и перестает быть эффективной.
Если вы столкнулись с повышенной роботностью в Яндекс метрике, увеличением числа прямых заходов, увеличением количества отказов - вы всегда можете заказать у меня настройку Killbot.

Услуги

База знаний

Блог

Портфолио

AntiBot24

АнтиБОТ, поведенческие факторы, защита от ботов, настройка КиллБот.
Быстрее всего отвечаю в Telegram или MAX.

Telegram

MAX messenger

Более 900 выполненных работ на Кворк, положительные отзывы, профессионально занимаюсь фильтрацией бот трафика.
Ссылка на кворк
Свяжитесь со мной, для согласования перечня работ и условий оплаты.
Контакты
Copyright © 2026, AntiBOT24. Копирование материалов сайта запрещено.
Политика конфиденциальности
menu-circlecross-circle