Технологии и архитектура L7 Admin Guard
Настройте и используйте ZTNA без DevOps. Подробный разбор архитектурных решений под капотом L7 Admin Guard: от селективной маршрутизации в браузере до zero-copy туннелирования.
Почему классические решения не подошли
Задача безопасного доступа в админки ломается о реальные рабочие процессы команды:
VPN избыточен
Заворачивает весь личный трафик пользователей, сложен в настройке для нетехнических специалистов, а управление политиками доступа (ACL) быстро превращается в хаос.
Статические IP не работают
В эпоху удаленки, коворкингов и 4G/5G белые списки IP на сервере неудобны, не дают сегментации прав по конкретным пользователям и гибкости для быстрого отзыва доступа.
Сложность готовых шлюзов
Инструменты вроде 3X-UI настраиваются через файлы конфигурации. Любое изменение требует перезапуска службы, что сбрасывает активные TCP-сессии пользователей.
Тяжелые SSO-шлюзы
Reverse-proxy меняют домен сайта и требуют MITM-дешифрации трафика (TLS termination). Онбординг внешних аудиторов или подрядчиков требует заведения учетных записей в IdP.
Архитектура из трех частей
Мы разделили систему на логические слои, перенеся управление с уровня инфраструктуры на уровень токенов.
Шлюз доступа на Go
Ультралегкий бинарник (8 МБ) без внешних зависимостей. Устанавливается на чистый Linux, получает настройки из Control Plane и умеет работать автономно из локального кэша.
API управления (Control Plane)
Центральный узел конфигурации. Управляет правилами, выпускает TLS-сертификаты и пушит изменения на эдж-ноды в реальном времени. Позволяет из одной панели управлять множеством шлюзов в разных странах без перезапуска активных сессий.
Браузерное расширение
Весит всего 38 КБ, имеет открытый читаемый код без обфускации. Генерирует PAC-файлы на лету для избирательного перенаправления трафика защищаемых доменов.
Что под капотом движка
Узкоспециализированный шлюз доступа, оптимизированный под высокую производительность и приватность.
Zero Config автономность
У шлюза доступа нет конфигурационного файла на сервере. При старте он получает правила от Control Plane. В случае перезагрузки сервера без сети он запустится из локального стейта.
Безопасность транспорта (TLS)
Соединение со шлюзом защищено TLS. Система автоматически выписывает и продлевает SSL/TLS сертификаты через Google Trust Services, Let's Encrypt или ZeroSSL.
Встроенный DNS-резолвер
Собственный кэширующий DNS-резолвер работает напрямую с DNS дата-центров. За счет кэширования и широких каналов TTFB через шлюз доступа часто оказывается ниже прямого подключения.
Защита TLS SNI
Каждому устройству (пользователю) выделяется уникальный адрес вида DevID-user-v4.de.l7ag.run. Неверный или отсутствующий SNI обрывается на уровне TLS до обработки трафика, защищая сам шлюз доступа от сканирования.
HTTP CONNECT (Zero MITM)
Шлюз работает как прозрачный туннель: TLS целевого сайта не терминируется (трафик не расшифровывается), контент не анализируется (zero-copy). Нулевой риск MITM и минимальная нагрузка на процессор.
In-Memory и BuntDB
Вместо Redis мы выбрали встраиваемую BuntDB. При запуске все правила кэшируются в in-memory карту. Проверка авторизации CONNECT-запроса происходит мгновенно без дисковых запросов.
Киллер-фича: Динамическое обновление рантайма
Главная проблема классических шлюзов доступа — обрыв активных туннелей при обновлении правил. Наш движок применяет изменения «на лету». Если пользователь скачивает дамп базы данных, а время его сессии истекает, админ продлевает доступ в панели, и шлюз динамически обновляет параметры туннеля без разрыва передачи данных.
Активная сессия
Доступ выдан на 1 час. Пользователь скачивает тяжелый бэкап базы данных.
Истечение времени
Срок действия токена подходит к концу, но передача данных продолжается.
Продление доступа
Администратор в UI панели в один клик продлевает действие токена на 30 минут.
Соединение сохранено
Шлюз доступа обновляет параметры туннеля в памяти. Скачивание завершается успешно.
3 неочевидных сценария, которые мы закрыли
Маршрутизация на уровне домена (SNI) в браузере решила несколько застарелых проблем:
Миграция сайтов без правки /etc/hosts
Для тестирования переезда сайта до смены DNS больше не нужно просить QA и клиентов редактировать системный файл с правами администратора. Достаточно прописать в токене кастомный IP. Включил расширение — видишь новый сервер, выключил — старый.
Безопасный доступ к localhost и приватным IP
Можно легко выдать доступ к внутренним веб-сервисам, которые не смотрят во внешний интернет — например, к API Caddy на localhost:2019 конкретного сервера или базам данных в серой сети.
Внутренние домены без реальных DNS-записей
Мапим grafana.company.internal на локальный порт шлюза доступа. Пользователи с токеном попадают туда напрямую, при этом во всемирном DNS такого домена не существует, что защищает от сканирования.
Делаем Self-Hosted доступнее
Мы спроектировали установку нод так, чтобы поднять свой собственный шлюз доступа можно было без опыта администрирования Linux.
Автодеплой в облако в 1 клик
Вводите API-ключ Hetzner, Vultr, DigitalOcean, Akamai или UpCloud, выбираете регион и нажимаете кнопку. Наш Control Plane сам создаст виртуальную машину, скачает шлюз и выпустит сертификаты без вашего участия.
Установка одной строчкой
Вы можете развернуть шлюз доступа на любом сервере. Наш скрипт установки использует zstd-сжатие, создает системного пользователя с минимальными правами, настраивает systemd и автообновление.