Как антифрод-системы маркетплейсов детектят IPv6-прокси по паттернам ASN и подсетей
Содержание
- Почему IPv6 меняет правила игры
- Что такое ASN и почему он важнее IP
- Паттерны, которые ловят прокси
- Как выглядит проверка на стороне сервера
- Сравнение типов IPv6-источников
- Почему «чистый» /64 не спасает
- Кейс: маркетплейс с 40k RPS и IPv6-пул
- Кейс: мобильный CGNAT и ложные срабатывания
- Кейс: ротация /128 внутри /64
- Как проверить свои адреса перед запуском
- Что делать, если пул уже шумит
- Итог
Маркетплейсы научились смотреть не на IP, а на то, что вокруг него. Один адрес ничего не говорит. А вот /64, /48 и номер автономной системы — говорят много. Разберём, как антифрод строит профиль и почему IPv6-прокси палится чаще, чем принято думать.
Почему IPv6 меняет правила игры
В IPv4 прокси-пул из 500 адресов раскидать по разным сетям — целая история. В IPv6 провайдер выдаёт клиенту /64, а то и /48. Это 18 квинтиллионов адресов в одной подсети. Казалось бы — рай для скрытности. На деле — ловушка.
Антифрод давно перестал считать IP уникальным идентификатором. Он группирует адреса по префиксам. /64 — базовая единица для residential-подсети. /48 — для организации. И если 200 «разных» пользователей сидят в одном /64, никакая ротация внутри пула не спасёт. Система видит одну сеть.
Есть и вторая сторона. Живые ISP выдают клиентам динамические /64, которые меняются при переподключении. Прокси-фермы держат статичные префиксы месяцами. Поведение префикса во времени — отдельный сигнал, и он весомее, чем сам адрес.
Что такое ASN и почему он важнее IP
ASN — номер автономной системы. Грубо говоря, «владелец блока адресов» с точки зрения BGP. У каждого IP есть origin AS. Антифрод смотрит на него через базы RIR (RIPE, ARIN, APNIC) и через BGP-фиды вроде Team Cymru или IPinfo.
Ключевой момент: ASN residential-провайдера и ASN хостинга — это два разных мира. Если запрос на оформление заказа приходит с адреса, чей origin AS — DigitalOcean, антифрод напрямую понимает: это VPS. Никакой человек из дома так не выйдет в интернет.
Хуже для прокси другое. Многие IPv6-провайдеры покупают адреса у крупных транзитов и анонсируют их как «residential». Формально — да, residential. Но ASN у них свежий, без истории, без трафика от обычных пользователей. Антифрод такие сети помечает как «suspicious ASN» и даёт им пониженный trust score с первого дня.
Паттерны, которые ловят прокси
Антифрод не ищет «прокси». Он ищет аномалии в распределении. Вот что реально работает.
**Плотность адресов в префиксе.** Если за сутки из одного /64 пришло 300 сессий с разных «устройств» — это не дом. Это ферма. Живой /64 в среднем даёт 2–5 активных устройств за сутки. Порог чувствительности у крупных маркетплейсов — 20–30 уникальных fingerprint'ов на /64 в сутки.
**Однородность fingerprint'ов.** Прокси-пул часто крутит одну и ту же сборку браузера. Canvas hash, WebGL vendor, шрифты — совпадают у десятков «разных» пользователей. Антифрод кластеризует по fingerprint и смотрит, как кластеры распределены по префиксам.
**Временные паттерны.** Резидентский трафик имеет суточный ритм. Прокси-ферма работает 24/7 с ровной нагрузкой. Если /48 показывает постоянные 40 RPS в 4 утра — вопросов больше нет.
**Скорость смены адресов.** Ротация /128 внутри /64 каждые 30 секунд — сигнал. Живые пользователи так не делают. Даже мобильные операторы с CGNAT меняют адрес раз в часы, а не в минуты.
Как выглядит проверка на стороне сервера
Типичный антифрод-пайплайн на входе берёт IP, прогоняет через обогащение и складывает в профиль. Упрощённо это выглядит так:
```python
import ipaddress
import requests
def enrich_ip(ip: str) -> dict:
addr = ipaddress.ip_address(ip)
if addr.version == 6:
prefix64 = ipaddress.ip_network(f"{ip}/64", strict=False)
prefix48 = ipaddress.ip_network(f"{ip}/48", strict=False)
else:
prefix64 = ipaddress.ip_network(f"{ip}/24", strict=False)
prefix48 = ipaddress.ip_network(f"{ip}/16", strict=False)
asn_info = requests.get(
f"https://api.ipinfo.io/lookup/{ip}",
headers={"Authorization": "Bearer TOKEN"},
timeout=2,
).json()
return {
"ip": ip,
"asn": asn_info.get("asn"),
"as_name": asn_info.get("as_name"),
"as_type": asn_info.get("as_type"), # isp / hosting / business
"prefix64": str(prefix64),
"prefix48": str(prefix48),
"country": asn_info.get("country"),
}
```
Дальше профиль попадает в скоринг. Считается не «плохой ли IP», а «насколько его окружение похоже на реальное». Если ASN hosting — минус. Если /64 свежий и уже шумит — минус. Если страна ASN не совпадает с billing-адресом — минус.
Отдельно маркетплейсы смотрят на BGP-историю префикса. Новый анонс, который появился 3 дня назад, — красный флаг. Легитимные ISP анонсируют блоки годами. Прокси-провайдеры часто переезжают с префикса на префикс, и это видно в публичных MRT-фидах.
Сравнение типов IPv6-источников
| Источник | ASN-тип | Плотность в /64 | Средний trust score |
|---|---|---|---|
| Домашний ISP | isp | 1–5 устройств | 80–95 |
| Мобильный оператор (CGNAT) | isp | 50–200 устройств | 60–80 |
| Датацентр | hosting | 1–10 (VPS) | 5–20 |
| Коммерческий IPv6-прокси | hosting / business | 100–500 | 10–35 |
| Резидентский прокси-пул | isp (аренда) | 20–80 | 40–65 |
Цифры усреднённые по публичным отчётам anti-fraud вендоров за 2024. Разброс большой, но порядок величин показателен: коммерческий IPv6-прокси на чистом хостинге почти не имеет шансов пройти проверку на маркетплейсе с серьёзным антифродом.
Почему «чистый» /64 не спасает
Многие думают: возьму /64, который не засвечен, и всё будет хорошо. Не будет. Проблема в том, что антифрод смотрит не на конкретный /128, а на весь /64 как на одну сущность. Если в пуле 500 адресов и все они в одном /64 — вы уже скомпрометированы с точки зрения плотности.
Второй момент — репутация ASN. Даже если префикс чистый, но ASN принадлежит известному прокси-провайдеру (а такие списки ведутся годами), score падает сразу. Антифрод-вендоры продают базы «proxy ASN» по подписке. Попасть туда легко — достаточно, чтобы несколько клиентов провайдера наследили.
Третий — поведенческий след. Даже с идеальным ASN и чистым /64 прокси-пул выдаёт себя однотипным трафиком. Время загрузки страницы, порядок запросов, отсутствие мышиных движений — всё это собирается и кластеризуется. IPv6-адрес тут уже не главный сигнал, но он связывает кластеры в один профиль.
Кейс: маркетплейс с 40k RPS и IPv6-пул
Пример из практики аудита. Маркетплейс, nginx 1.24, средняя нагрузка 40k RPS на пике, антифрод на собственной модели. Клиент запустил пул IPv6-прокси на 2000 адресов из трёх /48, купленных у европейского провайдера с ASN, зарегистрированным 8 месяцев назад.
Первые сутки — 92% успешных сессий. На вторые антифрод начал резать: 60% запросов на регистрацию уходили в manual review. Причина оказалась в плотности: 2000 адресов на три /48 — это ~660 адресов на префикс, и все они долбили одни и те же эндпоинты.
Дополнительно сработал ASN-флаг: провайдер уже был в базе как «commercial proxy» у двух вендоров. Score упал до 18. Решение — раскидать пул по 40 разным /48 в ASN жилых ISP, ограничить 5–10 адресов на префикс и добавить суточный ритм нагрузки. После этого доля manual review упала до 11%.
Кейс: мобильный CGNAT и ложные срабатывания
Обратная история. Крупный оператор выдаёт IPv6 через CGNAT: сотни абонентов делят один /64. Антифрод маркетплейса настроил порог в 30 устройств на /64 — и начал массово банить реальных покупателей в вечерние часы.
Диагностика показала: в 19:00–23:00 плотность в отдельных /64 доходила до 400 уникальных fingerprint'ов. Это нормальный вечерний трафик жилого района. Порог был откалиброван по датацентровым данным и не учитывал мобильные сети.
Фикс — отдельная политика для ASN мобильных операторов: порог плотности поднят до 500 на /64, добавлен вес по поведенческим сигналам. Ложные баны упали с 8% до 0.4%. Урок: ASN-тип (isp vs hosting) важнее, чем абсолютные числа плотности. Один порог на все сети — грабли.
Кейс: ротация /128 внутри /64
Пул из 800 IPv6-адресов, все в одном /64, ротация каждые 45 секунд. Владелец рассчитывал, что антифрод не свяжет адреса между собой. Связал за два дня.
Механика простая. Антифрод логирует каждый запрос с полным IPv6 и префиксом /64. Через сутки видит: 800 адресов, один /64, 12 fingerprint'ов, ровный RPS круглосуточно. Кластер готов. Дальше — блок по префиксу целиком, все 800 адресов в чёрном списке.
Спасает только смена подхода: разные /48, разные ASN, разное поведение. И даже тогда остаётся риск по BGP-истории — если префиксы анонсируются с одного upstream, антифрод может связать их через AS-path.
Как проверить свои адреса перед запуском
Перед тем как гнать трафик, стоит прогнать пул через публичные источники. Минимум — origin ASN, тип ASN, дата регистрации префикса. Что смотреть:
```bash
curl -s "https://api.bgpview.io/ip/2a01:4f8:1c1c:1234::1" \
| jq '{asn: .data.prefixes[0].asn.asn, name: .data.prefixes[0].asn.name, prefix: .data.prefixes[0].prefix}'
curl -s "https://stat.ripe.net/data/prefix-overview/data.json?resource=2a01:4f8::/32" \
| jq '.data.asns'
```
Первая команда даёт origin ASN и анонсируемый префикс. Вторая — все ASN, которые анонсируют блок, и их относительный вес. Если префикс анонсируется десятком ASN с непонятными именами — это тревожный знак.
Дальше — проверка на утечки. Если адрес уже светился в публичных anti-fraud базах, его стоит выкинуть. Такие базы есть у IPQualityScore, IPinfo, MaxMind minFraud. Часть проверок бесплатна, часть — по подписке. Для пула в 1000+ адресов дешевле заплатить за API, чем терять конверсию.
И последнее — тест на живом трафике с малой нагрузкой. Запустите 5% пула на реальные действия и смотрите на долю manual review и блокировок. Если выше 15% — пул шумный, надо чистить. Если ниже 5% — можно масштабировать.
Что делать, если пул уже шумит
Ситуация типовая: пул работал, потом антифрод ужесточил правила, и половина адресов ушла в серую зону. Первое — не паниковать и не менять всё сразу. Второе — сегментировать.
Разделите пул по ASN и /48. Прогоните каждый сегмент через проверку плотности и репутации. Сегменты с высоким review rate — на карантин, минимум на 2 недели без трафика. За это время префиксы «остывают» в поведенческих моделях.
Параллельно — распределите нагрузку. Не больше 10 адресов на /64, не больше 100 на /48. Если провайдер даёт только один /48 — меняйте провайдера или докупайте префиксы. Это дороже, но дешевле, чем терять 60% заказов.
И третье — поведенческая маскировка. Ротация не по таймеру, а по событиям. Разные fingerprint'ы на разных адресах. Суточный ритм нагрузки. Это не делает прокси невидимыми, но снижает вероятность попасть в кластер.
Итог
Антифрод маркетплейсов давно сместил фокус с отдельного IP на префикс и ASN. IPv6-прокси в этом смысле — обоюдоострый инструмент: адресов много, но и группировать их проще. Плотность в /64, тип ASN, BGP-история и поведенческие паттерны — четыре сигнала, которые решают исход.
Один технически оправданный пример: если нужен пул с разнообразием ASN и префиксов без ручной сборки, посмотрите, как устроены пулы на lexic.ml — там адреса раскиданы по разным /48 и ASN, что как раз снижает плотность на префикс. Это не панацея, но правильная отправная точка.
Главное — не гнаться за размером пула. 200 адресов в 20 разных /48 проживут дольше, чем 2000 в одном /48. Проверяйте ASN до запуска, карантиньте шумные сегменты, следите за плотностью. И помните: антифрод не ищет прокси. Он ищет несоответствия между тем, кем вы представляетесь, и тем, как выглядит ваше окружение.