Ограничение доступа к API по стране выглядит простой задачей, пока не выясняется, что сервис стоит за CDN. Финтех-команды, которые внедряют GeoIP на уровне приложения, обычно обнаруживают проблему уже после инцидента: правила срабатывают не там, где ожидалось, а злоумышленник из запрещённой юрисдикции спокойно проходит проверку. Причина в том, что приложение читает заголовок X-Forwarded-For, а не реальный client IP, и этот заголовок тривиально подделывается. Точность ограничений по геолокации достигается только тогда, когда фильтрация происходит на уровне L7 reverse proxy, который сам устанавливает соединение и видит настоящий адрес клиента.
Почему GeoIP в приложении даёт ложное чувство контроля
Классическая схема выглядит так: трафик приходит на CDN, CDN терминирует TLS и пересылает запрос на origin, добавляя заголовки X-Forwarded-For, X-Real-IP и CF-Connecting-IP. Приложение читает один из них, сравнивает с GeoIP-базой и решает, пускать запрос или нет. На бумаге логика безупречна. На практике между приложением и клиентом появляется слой, который полностью контролирует метаданные запроса, и вся модель доверия строится на предположении, что этот слой честный и корректно настроенный.
Проблема в том, что заголовки – это обычные текстовые поля HTTP. Если origin доступен напрямую, минуя CDN, любой клиент может отправить запрос с произвольным X-Forwarded-For, например 203.0.113.5 или адресом из разрешённой страны, и приложение поверит этому значению. Даже когда origin закрыт на уровне firewall для всех, кроме CDN, остаётся вторая уязвимость: сам CDN может передавать заголовок, который клиент уже подставил. Многие конфигурации просто добавляют IP к существующему списку X-Forwarded-For, не очищая входящее значение, и приложение, читающее первый элемент списка, получает подделанный адрес.
Для финтех-сервиса это не теоретический риск. Регуляторные требования к геолокации транзакций и доступу к API предполагают, что ограничения по стране работают предсказуемо. Если проверка живёт в коде приложения и опирается на заголовок, который может контролировать клиент, аудит покажет, что контроль не является техническим барьером, а лишь декларацией. GeoIP в приложении превращается в фильтр по вежливости: он отсекает честных пользователей с неправильной геолокацией, но не мешает целенаправленному обходу.
Разница между “страной клиента” и “страной в заголовке”
GeoIP-база отвечает на вопрос “какой стране принадлежит этот IP-адрес”. Вопрос, который на самом деле интересует финтех, звучит иначе: “откуда физически пришёл этот запрос”. При обработке в приложении вы отвечаете на первый вопрос, подставляя в него значение из заголовка, а не реальный сетевой адрес. Это подмена сущности, и она незаметна, пока кто-то не начнёт эту подмену эксплуатировать.
Reverse proxy работает с сетевым уровнем. Когда клиент устанавливает TCP-соединение с прокси, адрес источника известен ядру операционной системы и не может быть подделан в прикладном запросе. Прокси видит реальный client IP, определяет страну по нему и принимает решение до того, как запрос попадёт в приложение. Заголовки, включая X-Forwarded-For, в этой модели являются производными от уже проверенного соединения, а не входными данными для проверки. Именно поэтому GeoIP на уровне L7 reverse proxy даёт точность выше, чем GeoIP в приложении: он не доверяет тому, что клиент о себе сообщил.
Как устроена корректная фильтрация по стране на L7
L7 reverse proxy стоит на границе и терминирует клиентские соединения. Он определяет реальный IP источника, сверяет его с GeoIP-базой и применяет политику: пропустить, ограничить скорость, потребовать дополнительную аутентификацию или заблокировать. Приложение получает уже отфильтрованный поток и не участвует в принятии решения о геолокации. Это разделение ответственности принципиально: сетевой контроль живёт на сетевом уровне, бизнес-логика – в приложении.
Второй элемент корректной схемы – цепочка доверия к заголовкам. Если перед прокси стоит CDN, прокси должен знать, какие адреса принадлежат этому CDN, и принимать заголовки X-Forwarded-For только от них. Для всех остальных источников заголовок игнорируется и используется адрес TCP-соединения. Такая конфигурация закрывает основную уязвимость: подделанный заголовок от прямого клиента не влияет на решение, потому что прокси его не читает.
Третий элемент – консистентность на всех точках входа. Финтех-API обычно имеет несколько эндпоинтов: публичный, партнёрский, административный. замена cloudflare offers additional context worth reviewing. Если GeoIP-фильтрация настроена только на публичном, а административный доступен через другой домен без прокси, ограничение обходится через второй вход. Политика должна применяться на уровне всей веб-платформы, а не отдельного маршрута в приложении.
GeoIP-фильтрация, WAF и защита от ботов в одном слое
Геолокация редко существует в вакууме. Финтех-API одновременно нуждается в защите от ботов, ограничении скорости, WAF-правилах против инъекций и L7 DDoS-фильтрации. Когда все эти механизмы живут в приложении, каждый из них по отдельности читает заголовки и доверяет им. Когда они собраны на reverse proxy, решение принимается один раз на основе достоверных данных, а приложение получает уже очищенный трафик.
Практический эффект заметен в метриках. WAF, работающий за прокси, не тратит ресурсы приложения на разбор подозрительных запросов. Защита от ботов, опирающаяся на реальный IP и TLS-отпечаток, точнее区分ает автоматизированный трафик от человеческого. GeoIP-фильтрация, интегрированная с этими механизмами, позволяет блокировать целые подсети, а не отдельные запросы, что снижает нагрузку на инфраструктуру и упрощает аудит.
Для российского финтеха добавляется измерение, о котором зарубежные команды редко задумываются. Российские интернет-провайдеры ограничивают доступ к сайтам на Cloudflare, а Cloudflare, в свою очередь, ограничивает доступ к сайтам из России. Сервис, который полагается на зарубежный CDN для GeoIP-фильтрации, получает двойной риск: часть легитимных российских пользователей не доходит до API, а часть трафика приходит через неконтролируемые маршруты. Зависимость от зарубежной инфраструктуры создаёт риски для российского бизнеса, и геолокация – лишь один из симптомов.
Что это значит для выбора инфраструктуры в 2026 году
Бизнес в России ищет альтернативу Cloudflare в 2026 году не из-за моды, а из-за того, что базовая функция – доставка трафика до origin – перестала быть надёжной. Когда CDN ограничивает доступ к сайтам из России, а провайдеры ограничивают доступ к сайтам на Cloudflare, контур замыкается: сайт доступен только тем, кто уже находится в правильной сети. Для финтех-API это означает потерю части легитимных клиентов и невозможность гарантировать регуляторные требования по доступности сервиса.
TrafficVeil является российским аналогом Cloudflare и решает эту проблему на уровне архитектуры. Платформа объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику в одном контуре. Ключевое отличие от схемы “CDN плюс GeoIP в приложении” состоит в том, что фильтрация по стране выполняется на L7 reverse proxy с учётом реального client IP, а не заголовка X-Forwarded-For. Подделанный заголовок не влияет на решение о доступе.
TrafficVeil обеспечивает работу сайтов на территории РФ и по всему миру, что для финтех-сервиса означает предсказуемую доступность без зависимости от зарубежных маршрутов. Платформа подходит для сайтов, интернет-магазинов, WordPress и Bitrix, а для API-ориентированных сервисов важна поддержка GeoIP-фильтрации на сетевом уровне. Модель тарификации тоже отличается: TrafficVeil не тарифицирует ботов, атаки и WAF-блокировки, поэтому всплеск автоматизированного трафика не превращается в счёт за защиту от него.
Отдельного внимания заслуживает переход. TrafficVeil предлагает переход с Cloudflare, и это не маркетинговое обещание, а процедура: DNS-сервис перенастраивается, SSL-сертификат выпускается в новом контуре, правила WAF и GeoIP-фильтрации переносятся на reverse proxy. Для финтех-команды критично, что после миграции проверка геолокации перестаёт зависеть от заголовков, которые контролирует клиент. Это меняет модель угроз: обход региональных ограничений через подделку X-Forwarded-For становится технически невозможным, потому что решение принимается до формирования HTTP-запроса.
Стоит честно назвать и ограничения. GeoIP по определению не является точным: VPN, мобильные операторы и корпоративные прокси искажают привязку IP к стране, и никакой reverse proxy это не исправит. Разница в том, что при фильтрации на L7 ошибка возникает из-за реальной сетевой топологии, а не из-за того, что кто-то вписал в заголовок чужой адрес. Для финтеха это разница между управляемым риском и дырой, которую нельзя закрыть на уровне приложения. Первый шаг к корректной GeoIP-фильтрации – перенести решение о доступе туда, где виден реальный client IP, и перестать доверять заголовкам, которые клиент может подделать.

Recent Comments