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

Как антифрод-системы вычисляют прокси по TCP/IP стеку и fingerprint браузера

Как антифрод-системы вычисляют прокси по TCP/IP стеку и fingerprint браузера

Как антифрод видит прокси: TCP/IP стек и fingerprint

Антифрод-системы эволюционировали. Раньше достаточно было сменить IP. Сейчас — война на уровне пакетов и отпечатков браузера.

Прокси и VPN — не анонимность. Это флаги, которые система считывает за миллисекунды.

Разберем, как именно.

MTU и TTL — первая линия обороны

Каждая ОС и сетевое оборудование оставляют следы. Самые простые — MTU и TTL.

**MTU** (Maximum Transmission Unit) — размер пакета. У Windows по умолчанию 1500 байт. У Linux — часто 1500, но может быть 1492 при PPPoE. У macOS — 1500.

Прокси-серверы часто форсируют MTU. Если ваш клиент шлет пакеты с MTU 1500, а прокси режет до 1400 — антифрод видит несоответствие. Это подозрительно.

**TTL** (Time To Live) — счетчик прыжков. Windows: 128. Linux: 64. macOS: 64. Роутеры: 255.

Пример: вы сидите в Москве, TTL=128. Прокси в Амстердаме. Ваш пакет проходит через 10 хопов, TTL падает до 118. Антифрод видит: "клиент за прокси — TTL не совпадает с ожидаемым для региона".

Простейший скрипт проверки:

```bash

ping -c 1 target.com | grep "ttl="

```

Но антифроды делают замеры на уровне ядра. Они знают, какой TTL должен быть у реального пользователя из этого региона.

Идентификация прокси по заголовкам TCP

TCP-стек — это fingerprint операционной системы. Каждая ОС инициализирует TCP-соединение по-своему.

**Window Scale** — размер окна. Linux: 7 (128 KiB). Windows: 8 (256 KiB). macOS: 6 (64 KiB).

**MSS** (Maximum Segment Size) — максимальный сегмент. Зависит от MTU. Если прокси форсирует MSS, это видно.

**SACK** (Selective Acknowledgment) — поддержка выборочных подтверждений. Почти все современные ОС поддерживают. Но старые прокси — нет.

**Timestamps** — метки времени TCP. Linux включает по умолчанию. Windows — нет. macOS — включает.

Антифрод собирает эти параметры в момент handshake. Сравнивает с эталонными профилями ОС.

Пример: ваш браузер на Windows 11 шлет запрос через прокси на Linux. Антифрод видит: TCP-стек клиента — Linux (по window scale, timestamps). А User-Agent в HTTP — Chrome on Windows. Несоответствие. Блокировка.

HTTP-заголовки, которые выдают прокси

Прокси добавляют заголовки. Даже если вы их не просили.

**Via** — стандартный заголовок для прокси. Некоторые серверы его не удаляют.

**X-Forwarded-For** — цепочка IP. Если прокси его не чистит — ваша реальная IP там.

**X-Real-IP** — nginx proxy. Часто забывают удалить.

**Connection: keep-alive** — прокси могут менять поведение. Например, форсировать закрытие соединения после каждого запроса.

**Client-IP** — редко, но бывает.

Пример запроса через прокси:

```

GET / HTTP/1.1

Host: target.com

Via: 1.1 proxy.example.com

X-Forwarded-For: 192.168.1.100

```

Антифрод видит: "пользователь за прокси". Даже если IP чистый.

Fingerprint браузера — цифровой отпечаток

Canvas fingerprinting — рисование скрытого изображения. Разные браузеры рендерят его по-разному. Прокси не влияют.

WebGL — 3D-рендеринг. GPU и драйверы дают уникальные значения. Прокси не меняют.

AudioContext — генерация звука. Разные браузеры выдают разные частоты.

Font fingerprinting — список шрифтов. У реального пользователя — 50-100 шрифтов. У прокси-клиента — 10-20.

**User-Agent** — легко подделывается. Но антифрод проверяет его на соответствие остальным параметрам.

**Screen resolution** — разрешение экрана. Часто совпадает с типичным для региона.

**Timezone** — часовой пояс. Если прокси в США, а timezone Europe/Moscow — подозрительно.

Реальный кейс: пользователь с IP из Германии, timezone Asia/Tehran, язык браузера русский. Антифрод: "прокси + эмигрант". Блокировка.

WebRTC — утечка реального IP

WebRTC — технология для P2P. Она игнорирует прокси. Браузер напрямую шлет запросы на STUN-серверы. Те возвращают реальный IP.

Антифрод встраивает на сайт скрытый WebRTC-код. Он собирает все IP клиента: реальный и через прокси.

Сравнение: если IP через прокси отличается от реального — это прокси.

Пример кода для проверки:

```javascript

const pc = new RTCPeerConnection({iceServers: [{urls: 'stun:stun.l.google.com:19302'}]});

pc.createDataChannel('');

pc.createOffer().then(offer => pc.setLocalDescription(offer));

pc.onicecandidate = e => console.log(e.candidate.candidate);

```

Результат: видите два IP — один ваш, другой прокси.

DNS-запросы — следы прокси

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

Антифрод проверяет: совпадает ли DNS-сервер с IP прокси? Если нет — это прокси.

Также: время ответа DNS. Через прокси — задержка 100-500 мс. У реального пользователя — 10-50 мс.

Поведенческий анализ

Прокси-клиенты ведут себя иначе:

- **Скорость кликов** — у прокси выше задержка. Клики с задержкой 200-500 мс — подозрительно.

- **Прокрутка страницы** — через прокси рывками.

- **Время загрузки ресурсов** — CSS, JS, изображения грузятся с задержкой.

Антифрод строит профиль поведения. Если он отклоняется от нормы — блокировка.

Пример: как работает lexic.ml в этой войне

Мы в lexic.ml с 2015 года боремся с детекцией. Наши прокси:

- Форсируют TTL=64 (как Linux), чтобы не выбиваться из профиля.

- Удаляют все лишние HTTP-заголовки (Via, X-Forwarded-For).

- Поддерживают WebRTC-блокировку на уровне ядра.

- Используют реальные DNS-серверы региона.

Но даже так — антифроды умнеют. Мы тестируем каждый новый метод детекции. Если система начинает считать наши IP — меняем стек.

Таблица: какие параметры выдают прокси

| Параметр | Реальный пользователь | Прокси-клиент |

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

| TTL | 128 (Win), 64 (Linux) | Часто 64, но может быть 128 |

| MTU | 1500 | 1400-1500 |

| Window Scale | 8 (Win), 7 (Linux) | 7 (если прокси на Linux) |

| Via | Нет | Есть (если не удален) |

| X-Forwarded-For | Нет | Есть (если не удален) |

| WebRTC IP | Один | Два (реальный + прокси) |

| DNS-сервер | Локальный | Прокси-сервер |

| Timezone | Соответствует IP | Может не совпадать |

| Canvas fingerprint | Уникальный | Уникальный, но не совпадает с регионом |

Как защититься от детекции

1. **Используйте прокси с чистым TCP-стеком**. Не все прокси форсят параметры. Выбирайте те, что маскируются под реальную ОС.

2. **Блокируйте WebRTC**. В браузере: `chrome://flags/#enable-webrtc-hide-local-ips-with-mdns`. Или через расширения.

3. **Удаляйте лишние заголовки**. Если вы пишете свой клиент — чистите Via, X-Forwarded-For.

4. **Синхронизируйте timezone**. Ваш часовой пояс должен совпадать с регионом IP.

5. **Используйте реальные шрифты**. У прокси-клиентов часто урезанный список шрифтов. Установите стандартные.

6. **Не используйте одинаковые fingerprint для всех сессий**. Антифрод видит: 1000 пользователей с одинаковым отпечатком — это бот.

Что будет дальше

Антифроды переходят на ML. Они обучают модели на тысячах параметров: от TCP-заголовков до времени между кликами.

Прокси-провайдеры отвечают тем же: генерируют реалистичные профили для каждого IP.

Война бесконечна. Но знание механизмов — половина победы.

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