Стандартная схема Reality+Xray для защиты VPN от зондів работает по принципу «не пойман — не вор»: зонд, подключаясь без правильного SNI, перенаправляется на легитимный сайт и уходит. Однако если зонд знает точный SNI и сканирует порт 443 регулярно с разных IP, это усложняет защиту.
Опыт работы в Беларуси показал, что за несколько дней не было «глупых» зондів, а только аккуратные подключения с правильным SNI и подозрительным поведением. Для борьбы с этим добавлены два уровня защиты:
- Детектор, анализирующий логи nginx и tcpdump, начисляющий баллы подозрительности по поведенческим признакам;
- Серый список IP, автоматически перенаправляющий выявленных зондів на fallback-сайт, не позволяя им добраться до VPN.
Ключевая идея — зонд не должен понять, что его обнаружили: он получает ожидаемый ответ и уходит, думая, что ничего интересного нет.
Простой бан через iptables неэффективен, так как зонд воспринимает таймаут как признак защиты и усиливает сканирование. В отличие от этого, перенаправление на обычный HTTPS-сервер с валидным сертификатом выглядит для зонда как обычный сайт.
Архитектура построена на Docker с несколькими сервисами: xray-core, nginx с поддержкой SNI-роутинга и серого списка, автоматическим обновлением сертификатов и конфигураций.
В nginx используется ssl_preread для чтения SNI без расшифровки трафика, а серый список хранится в файле, который можно обновлять без прерывания соединений. При попадании IP в серый список все запросы с этого IP отправляются на fallback-сервер.
Детектор работает на основе поведенческого анализа, оценивая соеднения по множеству признаков с начислением очков подозрительности. Основным индикатором считается корреляция по времени — зонд появляется через 1-3 секунды после легитимного клиента.
Для анализа трафика используется tcpdump, который захватывает только SYN-пакеты порта 443 с ротацией каждые 5 минут.
В итоге, даже простые эвристики позволяют отсеять до 90% автоматических зондів. Главные рекомендации — не блокировать IP напрямую, а обманывать зонд, фокусироваться на поведении, а не сигнатурах, и автоматизировать процесс с помощью серого списка и graceful reload nginx.
Такой подход создает многоуровневую защиту (defence in depth), где xray fallback обрабатывает неподходящий handshake, а детектор фильтрует подозрительные попытки еще на уровне nginx.
Автор признается, что для подготовки материала использовал AI.

