Внутри движка

Технологии и архитектура 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-запроса происходит мгновенно без дисковых запросов.

Киллер-фича: Динамическое обновление рантайма

Киллер-фича: Динамическое обновление рантайма

Главная проблема классических шлюзов доступа — обрыв активных туннелей при обновлении правил. Наш движок применяет изменения «на лету». Если пользователь скачивает дамп базы данных, а время его сессии истекает, админ продлевает доступ в панели, и шлюз динамически обновляет параметры туннеля без разрыва передачи данных.

Шаг 01

Активная сессия

Доступ выдан на 1 час. Пользователь скачивает тяжелый бэкап базы данных.

Шаг 02

Истечение времени

Срок действия токена подходит к концу, но передача данных продолжается.

Шаг 03

Продление доступа

Администратор в UI панели в один клик продлевает действие токена на 30 минут.

Шаг 04

Соединение сохранено

Шлюз доступа обновляет параметры туннеля в памяти. Скачивание завершается успешно.

3 неочевидных сценария, которые мы закрыли

3 неочевидных сценария, которые мы закрыли

Маршрутизация на уровне домена (SNI) в браузере решила несколько застарелых проблем:

Миграция сайтов без правки /etc/hosts

Для тестирования переезда сайта до смены DNS больше не нужно просить QA и клиентов редактировать системный файл с правами администратора. Достаточно прописать в токене кастомный IP. Включил расширение — видишь новый сервер, выключил — старый.

Безопасный доступ к localhost и приватным IP

Можно легко выдать доступ к внутренним веб-сервисам, которые не смотрят во внешний интернет — например, к API Caddy на localhost:2019 конкретного сервера или базам данных в серой сети.

Внутренние домены без реальных DNS-записей

Мапим grafana.company.internal на локальный порт шлюза доступа. Пользователи с токеном попадают туда напрямую, при этом во всемирном DNS такого домена не существует, что защищает от сканирования.

Делаем Self-Hosted доступнее

Делаем Self-Hosted доступнее

Мы спроектировали установку нод так, чтобы поднять свой собственный шлюз доступа можно было без опыта администрирования Linux.

Автодеплой в облако в 1 клик

Вводите API-ключ Hetzner, Vultr, DigitalOcean, Akamai или UpCloud, выбираете регион и нажимаете кнопку. Наш Control Plane сам создаст виртуальную машину, скачает шлюз и выпустит сертификаты без вашего участия.

Установка одной строчкой

Вы можете развернуть шлюз доступа на любом сервере. Наш скрипт установки использует zstd-сжатие, создает системного пользователя с минимальными правами, настраивает systemd и автообновление.

# curl -fsS https://l7.run | sh -s -- -t TOKEN