← Назад в базу знаний

Как антифрод-системы палят IPv6-прокси по несовпадению ASN и геолокации: чек-лист самопроверки

Как антифрод-системы палят IPv6-прокси по несовпадению ASN и геолокации: чек-лист самопроверки

Прокси на IPv6 выглядит чистым снаружи. Антифрод смотрит внутрь. И видит расхождение между тем, что вы декларируете, и тем, что говорит routing table.

Разберём, где именно рвётся связка. И как проверить себя до того, как это сделает чужой скрипт.

Почему IPv6 прощает меньше, чем IPv4

IPv4-адрес живёт в блоке /24, где тысячи соседей размывают репутацию. Один плохой клиент тонет в общей массе. С IPv6 иначе: провайдер выдаёт /64 на абонента, а то и /128 на конкретную сессию. Антифрод видит не «кто-то из пула», а конкретный адрес с конкретной историей.

Плотность адресов в IPv6-блоках ниже. Значит, поведенческие аномалии вылезают резче. Если с /64 за неделю зашли на 40 разных аккаунтов с разных гео — это сигнал. В IPv4 такое списали бы на корпоративный NAT.

Плюс сам факт IPv6-подключения от пользователя, который по геолокации сидит в регионе с низким покрытием IPv6, — уже флаг. Особенно если браузер отдаёт IPv6, а DNS-резолвер ходит по IPv4 из другой страны.

Что именно сверяет антифрод

Типичный скоринг-пайплайн прогоняет IP через 5-6 источников и ищет несовпадения между ними.

| Проверка | Источник данных | Что ловит |

|---|---|---|

| ASN | RIPE/ARIN whois, Team Cymru | Прокси-хостинг вместо eyeball-провайдера |

| Гео | MaxMind, IP2Location, база антифрода | Страна/город не бьётся с профилем |

| Тип сети | Классификатор (hosting/isp/mobile) | Datacenter вместо residential |

| BGP-анонс | RouteViews, RIPEstat | Префикс анонсится не тем AS, что заявлен |

| rDNS | PTR-запись | Отсутствует или указывает на хостинг |

| Историческая репутация | Внутренняя база | Адрес уже светился в абьюзах |

Ключевое — сверка. Антифрод не смотрит на каждый параметр отдельно. Он строит граф согласованности. Если ASN говорит «Rostelecom», а MaxMind ставит адрес в Германию — расхождение. Если PTR указывает на `vps.hosting-provider.com`, а тип сети заявлен как residential — расхождение.

Два-три расхождения подряд, и транзакция уходит на ручную проверку или блокируется.

ASN — главный маркер

ASN выдаёт прокси быстрее всего. Хостинговые AS (DigitalOcean AS14061, Hetzner AS24940, OVH AS16276) в антифрод-базах помечены как `hosting`. Residential-провайдеры — как `isp`. Мобильные — `mobile`.

IPv6-блоки хостингов часто анонсируются /32 или /48. Антифрод видит префикс и сразу понимает: это не абонентский адрес. Даже если вы подделали геолокацию через MaxMind-фид, ASN остаётся хостинговым.

Проверить свой ASN можно так:

```bash

curl -s "https://stat.ripe.net/data/prefix-overview/data.json?resource=2a01:4f8:1c1c:abcd::1" | jq '.data.asns'

```

Ответ покажет AS и его описание. Если в описании `Hetzner Online GmbH` — антифрод уже знает, что это VPS.

Сложнее с провайдерами, которые арендуют IPv6-блоки у residential-AS. Тогда ASN формально чистый, но BGP-анонс идёт из датацентра. Антифрод сверяет анонсирующий AS с тем, что заявлен в whois. Расхождение — флаг.

Геолокация: где базы врут и где ловят

MaxMind GeoLite2 обновляется раз в неделю. IPv6-блоки попадают в базу с задержкой. Свежий /64, выданный провайдеру месяц назад, может числиться за страной регистрации AS, а не за фактическим местоположением сервера.

Антифрод это знает. Поэтому сверяет несколько баз и смотрит на консенсус. Если MaxMind говорит «Нидерланды», IP2Location — «Германия», а rDNS намекает на Франкфурт — берётся пересечение.

Проверить, что видят разные базы:

```python

import requests

ip = "2a01:4f8:1c1c:abcd::1"

sources = {

"ipapi": f"http://ip-api.com/json/{ip}?fields=country,regionName,city,isp,org,as,proxy,hosting",

"ipinfo": f"https://ipinfo.io/{ip}/json",

}

for name, url in sources.items():

r = requests.get(url, timeout=5).json()

print(name, r.get("country"), r.get("org") or r.get("isp"), r.get("hosting"))

```

Если `hosting: true` — вы уже помечены. Если `country` расходится с профилем пользователя — второй флаг.

Геолокация по IPv6 особенно ненадёжна для адресов, выданных меньше 90 дней назад. Антифрод это компенсирует поведенческим анализом: часовой пояс браузера, язык Accept-Language, TZ из JS. Если IP в Германии, а браузер рапортует `Asia/Tokyo` — неважно, что говорит MaxMind.

BGP-анонсы и rDNS

Антифрод продвинутого уровня смотрит RIPEstat и RouteViews. Задача — понять, кто реально анонсирует префикс.

Бывает так: префикс зарегистрирован на residential-AS в whois, но анонсируется из AS хостинга. Это классика «арендованных» IPv6-блоков. whois чистый, BGP грязный. Сверка ловит.

rDNS — второй маркер. Residential-провайдеры обычно ставят PTR вида `dynamic-ip-2a01-4f8-customer.isp.net`. Хостинги — `vps12345.hosting.com` или вообще ничего. Отсутствие PTR на IPv6 — подозрительно: большинство residential-провайдеров его настраивают.

```bash

dig -x 2a01:4f8:1c1c:abcd::1 +short

```

Пустой ответ на residential-адресе — красный флаг. Наличие PTR с `hosting`, `vps`, `cloud`, `server` в имени — тоже.

Чек-лист самопроверки перед запуском

Прогоните свой прокси по этим пунктам. Каждый «нет» — потенциальная утечка.

**ASN и тип сети.** Проверьте через Team Cymru или ipinfo. Если ASN хостинговый, а вы целитесь в residential-трафик — палево гарантировано. Нужен residential-AS или мобильный оператор.

**Геолокация в трёх базах.** MaxMind, IP2Location, ipapi. Все три должны давать одну страну. Город может расходиться — это нормально, но страна должна совпадать.

**BGP-анонс.** Через `stat.ripe.net` сверьте анонсирующий AS с whois-регистрантом. Расхождение — риск.

**PTR-запись.** Должна быть. Желательно с именем, похожим на residential-шаблон, а не на хостинг.

**Часовой пояс и язык.** Браузерный TZ должен совпадать с гео IP. Accept-Language — с языком страны. Это проверяется на стороне JS-фингерпринта, прокси тут ни при чём, но согласованность обязательна.

**DNS-резолвер.** Если браузер резолвит через IPv4-резолвер другой страны — WebRTC и DNS-leak тесты это покажут. Антифрод тоже.

**История адреса.** Свежий /128 без истории выглядит подозрительнее, чем адрес с 6-месячным следом. Это не всегда возможно, но учитывайте.

Кейс: SaaS с платежами из Восточной Европы

Сервис подписок, клиенты из Польши и Румынии. Прокси-пул на IPv6 от нидерландского хостера. 30% платежей уходили на manual review.

Причина: ASN хостинговый (AS60781, LeaseWeb), гео MaxMind — Amsterdam, браузер рапортовал `Europe/Warsaw`. Три расхождения. Плюс PTR вида `customer.leaseweb.com`.

Решение: перевели пул на residential-AS польского провайдера с арендой /64. Гео совпало с TZ браузера. PTR настроили через провайдера как `static-2a01-customer.isp.pl`. Manual review упал до 4%. Цифры: 30% → 4% за две недели, выборка 1200 транзакций.

Кейс: e-commerce и мобильный трафик

Магазин электроники, трафик с мобильных операторов. Прокси на IPv6 от облака. Антифрод Stripe помечал 18% транзакций как `high_risk`.

Причина: мобильный трафик должен идти с AS мобильного оператора (`mobile` тип сети). Шёл с `hosting`. Stripe сверяет тип сети с паттерном поведения: мобильный пользователь делает короткие сессии, часто меняет IP. Хостинговый IP с мобильным поведением — аномалия.

Решение: аренда IPv6-блоков у операторов через MVNO-партнёров. ASN мобильный, тип сети `mobile`, гео совпадает с вышкой. High-risk упал до 3%. Транзакций в выборке — 8600 за месяц.

Кейс: антифрод-база и устаревший whois

Финтех, клиенты из Германии. Прокси на IPv6 от немецкого хостера с residential-ASN (аренда). 12% логинов блокировались.

Причина: whois-регистрант префикса — residential-AS, но BGP-анонс шёл из AS хостинга. Антифрод сверял анонсирующий AS. Плюс MaxMind показывал страну регистрации AS (Австрия) вместо фактического ДЦ (Франкфурт). Гео расходилось с TZ браузера `Europe/Berlin`.

Решение: сменили провайдера на того, кто анонсирует из своего AS. MaxMind-фид обновился через 3 недели после смены префикса. Блокировки упали до 2%. Здесь помог сервис lexic.ml — стабильные IPv6-префиксы с корректным BGP-анонсом из одного AS, без расхождений между whois и routing table. Выборка: 5400 логинов, две недели наблюдения.

Как проверить себя скриптом

Соберите простой чекер. Он прогонит адрес по ключевым источникам и выдаст список расхождений.

```python

import requests

def audit(ip):

flags = []

r = requests.get(f"https://ipinfo.io/{ip}/json", timeout=5).json()

org = r.get("org", "")

country = r.get("country", "")

if any(x in org.lower() for x in ("hosting", "cloud", "vps", "server", "datacenter")):

flags.append(f"hosting ASN: {org}")

geo = requests.get(f"http://ip-api.com/json/{ip}?fields=country,hosting,proxy", timeout=5).json()

if geo.get("country") != country:

flags.append(f"geo mismatch: ipinfo={country} ipapi={geo.get('country')}")

if geo.get("hosting"):

flags.append("ipapi marks as hosting")

if geo.get("proxy"):

flags.append("ipapi marks as proxy")

ptr = requests.get(f"https://dns.google/resolve?name={ip}&type=PTR", timeout=5).json()

answers = ptr.get("Answer", [])

if not answers:

flags.append("no PTR record")

return flags

print(audit("2a01:4f8:1c1c:abcd::1"))

```

Запускайте перед выкаткой пула. Флаги — не приговор, но каждый требует объяснения. Если объяснить нечего — антифрод объяснит по-своему.

Что делать с расхождениями

Не пытайтесь подделать всё сразу. Антифрод ищет согласованность, а не идеальность. Идеально чистый residential-адрес с идеальным PTR и идеальным гео — тоже подозрительно, если он новый.

Работайте с провайдером, у которого ASN, BGP-анонс и гео сходятся на уровне инфраструктуры. Тогда подделывать нечего — всё честно. Residential-AS с реальным ДЦ в нужной стране, PTR от провайдера, свежий MaxMind-фид.

Проверяйте пул раз в неделю. Базы обновляются, BGP-анонсы меняются, репутация адресов дрейфует. То, что было чистым месяц назад, сегодня может светиться в абьюз-фиде.

И держите в голове главное: антифрод не ловит прокси. Он ловит несовпадения. Уберите несовпадения — прокси перестанет быть проблемой.

✔️Купить прокси