Как антифрод-системы вычисляют прокси по MTU и TCP Window Scaling
Содержание
- Сетевой fingerprinting — не магия
- MTU — максимальный размер пакета
- TCP Window Scaling — коэффициент окна перегрузки
- Как выглядит детекция на практике
- Пример кода — как проверить свой MTU
- Linux
- Или
- Проверка TCP Window Scale
- Потребуется tcpdump
- Python-скрипт для анализа
- Реальные кейсы из практики
- Как обходить — базовые методы
- Linux: принудительно установить MSS
- Изменение Window Scale
- Не во всех ядрах работает
- Продвинутые техники обхода
- Что делает lexic.ml
- Таблица сравнения
- Почему это важно
- Вывод
Сетевой fingerprinting — не магия
Антифрод-системы смотрят на кучу параметров. IP-адрес, User-Agent, тайминги. Но есть вещи, которые ты не спрячешь в браузере. Параметры TCP/IP стека — они ниже уровнем. Операционная система их выставляет автоматически. Большинство прокси об этом даже не задумываются.
MTU и TCP Window Scaling — два таких параметра. Они передаются в открытую, на уровне рукопожатия TCP. Любой сервер их видит. И если твой трафик идёт через прокси — эти параметры могут выдать тебя с потрохами.
MTU — максимальный размер пакета
MTU (Maximum Transmission Unit) — это размер самого большого пакета, который может передать сетевое соединение. Обычно 1500 байт для Ethernet. Но VPN и туннели добавляют свои заголовки. GRE, IPsec, OpenVPN — каждый добавляет 20-50 байт.
Итог: пакет становится больше 1500. Сеть начинает фрагментировать. Или MTU уменьшается. На клиенте это часто 1400-1450. Прокси-серверы, работающие через туннели, тоже имеют изменённый MTU.
Как это выглядит для антифрода:
- Клиент из России шлёт пакеты с MTU 1500
- Прокси в Нидерландах принимает, перепаковывает, шлёт дальше
- Сервер видит MTU 1420 или 1450
- При этом IP адрес — нидерландский
Несоответствие. Подозрительно.
TCP Window Scaling — коэффициент окна перегрузки
TCP использует скользящее окно для контроля потока данных. Изначально — 16 бит, максимум 65535 байт. Мало. Поэтому придумали Window Scaling — опцию TCP, которая умножает размер окна на коэффициент (от 1 до 14).
Конкретные цифры:
- Linux: по умолчанию 7 (масштаб 128)
- Windows: 8 (масштаб 256)
- macOS: 6 (масштаб 64)
- OpenVPN-туннель: часто 4-5
Антифрод собирает эти данные. Если у клиента Windows с масштабом 8, а через прокси вдруг приходит Linux с масштабом 7 — это стыковка не сходится. А если прокси ещё и OpenVPN — там вообще 4-5.
Как выглядит детекция на практике
Сервер при установке TCP-соединения получает SYN-пакет. В нём — все опции. Анализ происходит в реальном времени.
```
SYN-пакет:
- MSS (Maximum Segment Size) = 1460 (при MTU 1500)
- Window Scale = 7 (Linux)
- Timestamp = присутствует
- SACK = разрешён
```
Если клиент через прокси:
```
SYN-пакет:
- MSS = 1400 (MTU 1420 из-за туннеля)
- Window Scale = 4 (OpenVPN)
- Timestamp = может отсутствовать
- SACK = разрешён
```
Разница видна сразу.
Пример кода — как проверить свой MTU
```bash
Linux
ip link show | grep mtu
Или
ping -M do -s 1472 google.com
```
Если пакет не проходит — MTU меньше 1500.
```bash
Проверка TCP Window Scale
Потребуется tcpdump
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0'
```
Смотри на опцию `wscale`. Норма — 6-8.
Python-скрипт для анализа
```python
from scapy.all import *
def analyze_syn(packet):
if packet.haslayer(TCP) and packet[TCP].flags == 'S':
mss = None
wscale = None
for opt in packet[TCP].options:
if opt[0] == 'MSS':
mss = opt[1]
if opt[0] == 'WScale':
wscale = opt[1]
print(f"Source: {packet[IP].src}")
print(f"MSS: {mss}")
print(f"Window Scale: {wscale}")
sniff(filter="tcp", prn=analyze_syn, count=10)
```
Запускай на своём сервере. Смотри, что приходит от разных клиентов.
Реальные кейсы из практики
**Кейс 1.** Банк. Клиент из Москвы, IP нидерландский. MTU 1420, Window Scale 4. Антифрод заблокировал. Клиент использовал OpenVPN на дешёвом VPS. Прокси-сервер не настраивал MTU.
**Кейс 2.** Торговая площадка. Продавец из Украины, IP немецкий. MTU 1500, Window Scale 8. Но User-Agent — iOS Safari. iOS не использует Window Scale 8. Там 6. Несоответствие. Блокировка.
**Кейс 3.** Сервис знакомств. Клиент через прокси. Всё совпадает — MTU 1500, Window Scale 8. Но TCP Timestamp отсутствует. Windows 10 всегда шлёт Timestamp. Linux — иногда нет. Подозрение.
Как обходить — базовые методы
Правильная настройка прокси.
```bash
Linux: принудительно установить MSS
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --set-mss 1460
```
Это заставит все пакеты через прокси иметь MSS 1460 (MTU 1500).
```bash
Изменение Window Scale
echo 7 > /proc/sys/net/ipv4/tcp_window_scaling
Не во всех ядрах работает
```
Сложнее с Window Scale. Менять его на уровне системы — костыль. Лучше использовать прокси, которые умеют подменять TCP-опции.
Продвинутые техники обхода
Некоторые антифрод-системы смотрят не только на конкретные значения, но и на их стабильность. Если ты меняешь MTU и Window Scale динамически — это тоже подозрительно.
Метод "маскировки под типичного пользователя":
- MTU 1500
- Window Scale 7 (Linux) или 8 (Windows)
- TCP Timestamp всегда включён
- SACK разрешён
Но даже так — если антифрод видит, что у тебя 1000 пользователей с одинаковыми TCP-параметрами, это red flag.
Что делает lexic.ml
Сервис прокси с 2015 года. IPv6 прокси. Настраивает TCP-стек под каждого клиента. MTU и Window Scale выставляются в соответствии с ОС клиента. Не тупо копируют значения, а эмулируют поведение реального пользователя.
Таблица сравнения
| Параметр | Типичный пользователь | Плохой прокси | Хороший прокси |
|----------|----------------------|---------------|----------------|
| MTU | 1500 | 1420-1450 | 1500 |
| Window Scale | 6-8 | 4-5 | 6-8 |
| Timestamp | Всегда | Иногда | Всегда |
| SACK | Разрешён | Может быть запрещён | Разрешён |
| TTL | 64-128 | 64-128 | Корректируется |
Почему это важно
Антифрод-системы становятся умнее. Они не просто смотрят на IP. Они анализируют весь стек. TCP-параметры — один из слоёв. Если ты используешь прокси, но не контролируешь эти параметры — ты оставляешь след.
Один неверный параметр — и система помечает тебя как подозрительного. Не блокирует сразу. Но добавляет в "серый список". Дальше — больше проверок.
Вывод
MTU и TCP Window Scaling — не единственные параметры. Есть ещё TTL, TCP Timestamp, SACK, размер окна в данных. Но они — база. Если прокси не умеет их правильно выставлять — антифрод увидит несоответствие.
Настраивай прокси грамотно. Или используй те, где это уже сделано. Иначе грабли обеспечены.