Антифрод-система — это не просто список заблокированных IP. Это многоуровневый анализ, который работает быстрее, чем бот успевает кликнуть второй раз. Разбираем архитектуру NoFraud изнутри.
Почему один список IP не работает
Самое простое решение — вести список плохих IP и блокировать их. Проблема в том, что профессиональные ботнеты постоянно меняют адреса: используют прокси, VPN, выходные ноды Tor, арендованные серверы. Список устаревает быстрее, чем его обновляют.
Поэтому современная антифрод-система работает на трёх уровнях: поведенческом анализе в реальном времени, исторических данных об активности и верификации через внешние базы.
Уровень 1: частотный анализ в Redis
Каждый клик по рекламе попадает в трекер NoFraud в момент перехода на сайт. Первое, что проверяет система — как часто этот IP обращался к этому сайту за последний час.
Для хранения счётчиков используется Redis — in-memory база данных, которая работает за микросекунды. Каждый IP получает счётчик с 60-минутным окном жизни. Если за час IP кликнул более 5 раз — он автоматически помечается как подозрительный.
Почему 5? Это пороговое значение основано на реальных данных: даже самый активный покупатель редко возвращается на одну и ту же рекламную страницу больше двух раз за час. Пять кликов за 60 минут с одного IP — статистическая аномалия.
Уровень 2: поведенческий анализ
Если IP прошёл первый уровень (меньше 5 кликов за час), система переходит к анализу поведения на сайте. Скрипт NoFraud собирает три ключевых сигнала:
- Время на странице. Если пользователь провёл на лендинге меньше 3 секунд — он либо мгновенно закрыл вкладку, либо это бот. Это добавляет +15 к счёту подозрительности.
- Глубина прокрутки. Если страница не прокручивалась вообще (scroll depth = 0) — ещё один маркер бота. Реальный человек всегда хотя бы немного прокрутит страницу. Ещё +15.
- Движения мыши. Отсутствие событий мыши за всё время визита — сильный сигнал. Люди двигают мышью даже бессознательно. Боты этого не делают, если не запрограммированы специально. Ещё +15.
Три совпавших сигнала дают счёт подозрительности 45 из 100. Этого достаточно, чтобы перейти к третьему уровню.
Уровень 3: верификация через IPQS
Если суммарный счёт подозрительности достиг 30 и выше, NoFraud обращается к IPQS (IP Quality Score) — крупнейшей коммерческой базе данных о репутации IP-адресов. База содержит информацию о миллиардах адресов: является ли IP выходной нодой Tor, прокси, VPN, принадлежит ли он известному ботнету.
IPQS возвращает fraud score от 0 до 100. Если значение выше 75 — это практически гарантированно мошеннический трафик. NoFraud добавляет ещё +50 к счёту подозрительности.
Момент блокировки
Если итоговый счёт подозрительности достиг 70 и выше — IP блокируется:
- Запись о заблокированном IP сохраняется в PostgreSQL с временной меткой, сайтом и причиной блокировки.
- Событие записывается в ClickHouse для аналитики и отчётов в личном кабинете.
- IP публикуется в очередь обработки, откуда Blocker Worker вызывает API Яндекс.Директ или Google Ads и добавляет адрес в список исключений рекламного кабинета.
Весь цикл — от первого подозрительного клика до добавления в исключения рекламного кабинета — занимает меньше 60 секунд. За это время бот успевает кликнуть 1–2 раза вместо десятков.
Анонимность данных
NoFraud не хранит полные IP-адреса. Для IPv4 последний октет заменяется нулём: вместо 85.192.34.178 хранится 85.192.34.0. Этого достаточно для идентификации источника атаки, но не позволяет персонально идентифицировать пользователя. Все данные хранятся на серверах Яндекс.Облако в России в соответствии с 152-ФЗ.
Трёхуровневая защита NoFraud работает автоматически — без вашего участия. Подключите сайт и посмотрите, кто кликает на вашу рекламу.
Подключить NoFraud →