Перейти к содержимому

Фильтрация трафика

На этой странице описано, как slimTDS определяет и классифицирует входящих посетителей перед маршрутизацией — а именно обнаружение ботов и обработка трафика, не совпавшего ни с одним потоком.

BotDetector выполняется при обработке каждого клика, сразу после GeoLookup. Он проверяет посетителя по пяти слоям сигналов по порядку:

  1. Явный список IP (core.bot_ips) — отдельные IP известных поисковых краулеров из списка live-веб-краулеров myip.ms.
  2. CIDR-диапазоны (core.bot_cidrs) — блоки IP датацентров и VPN из X4BNet/lists_vpn (output/datacenter/ipv4.txt и output/vpn/ipv4.txt). Postgres использует GiST-индекс по колонке inet для субмиллисекундного поиска по точке.
  3. Блоклист ASN (core.bot_asns) — номера ASN известных хостинг- и датацентр-провайдеров из brianhama/bad-asn-list. Применяется только когда GeoLookup успешно определил ASN посетителя.
  4. Regex по имени ISP — запасное сопоставление по regex с распознанным именем ISP для известных поисковиков (Google, Yandex, Bing, Mail.ru, Baidu, Yahoo), когда этап ASN не дал совпадения.
  5. Паттерны User-Agent — сопоставление по regex с известными сигнатурами UA ботов, включая Googlebot, YandexBot, bingbot, Baiduspider, HeadlessChrome, wget, curl, python-requests, а также общие паттерны bot/crawler/spider/scraper.

Если срабатывает любой этап, ctx.isBot устанавливается в true, а ctx.botName фиксирует совпавшую категорию. Клики ботов всё равно логируются в stats.clicks с is_bot = true — они не отбрасываются, чтобы качество трафика было видно в админке.

Список IP обновляется cron-задачей bots:update (ежедневно). Списки ASN и CIDR обновляются cron-задачей bots:update-extra (тоже ежедневно).

Трэш — это трафик, попавший на активную кампанию, но не совпавший ни с одним потоком — например, посетитель из гео, на которое не нацелен ни один поток, или не прошедший все группы фильтров. Поле кампании trash_mode управляет ответом:

ЗначениеПоведение
0Вернуть HTTP 200 с пустым телом (пустая страница)
1HTTP 302 редирект на trash_url (откат до 204, если trash_url не задан)
2HTTP 403 Forbidden
3HTTP 404 Not Found
4HTTP 301 постоянный редирект на trash_url (откат до 204)
5HTTP 307 редирект на trash_url (сохраняет метод запроса; откат до 204)
6Редирект через meta-refresh на trash_url (откат до 204)
7JavaScript-редирект на trash_url (откат до 204)

Трэш-клики всегда логируются в stats.clicks с фактически отправленным HTTP-статусом, а для редирект-режимов (1, 4, 5, 6, 7) поле out_url устанавливается в trash_url, чтобы во вкладке кликов админки было видно, куда был отправлен посетитель.