Skip to content

Безопасность агента

  • Backend содержит внутренний CA (internal_ca, генерируется автоматически при первом старте панели), которым подписывает клиентские сертификаты агентов.
  • Приватный ключ агента генерируется на ноде и никогда её не покидает. Backend не хранит ключи агентов — компрометация БД панели не даёт возможности выдать себя за ноду.
  • Агент — инициатор соединения; нода не слушает management-портов (Архитектура).
sequenceDiagram
    participant P as Панель
    participant BE as Backend
    participant AG as Агент на ноде

    P->>BE: POST /nodes → нода + одноразовый токен, TTL 24 ч
    Note over AG: установка с ASTRAL_ENROLL_TOKEN
    AG->>AG: генерация ключа ed25519 + CSR
    AG->>BE: Enroll(token, csr) — TLS
    BE->>BE: проверка токена — хэш, TTL, неиспользованность
    BE-->>AG: node_id + подписанный cert + CA cert
    AG->>AG: identity/ на диск, токен забыт
    AG->>BE: Sync(...) — mTLS
  • Токен одноразовый: хэш в nodes.enroll_token_hash, обнуляется при успехе. Повторный Enroll с тем же токеном — UNAUTHENTICATED.
  • Канал Enroll — обычный TLS: публичный эндпоинт backend за Traefik с валидным сертификатом, агент проверяет его как обычный клиент TLS. Подмена backend в момент enrollment требует компрометации TLS или самого токена.
  • Из EnrollResponse агент забирает CA-сертификат и далее пиннит его: gRPC-канал Sync доверяет только внутреннему CA, а не системным корням.
  • Клиентский сертификат: CN = node id, срок 90 дней. SHA-256 отпечаток сохраняется в nodes.cert_fingerprint — при Sync проверяются и подпись CA, и совпадение отпечатка (отзыв = очистка отпечатка, без CRL/OCSP-инфраструктуры).
  • Сертификат агента — автоматическая: за 30 дней до истечения агент отправляет новый CSR тем же стримом (CertRenewal/CertIssued, см. gRPC API), backend подписывает, отпечаток обновляется. Ноды не требуют ручного обслуживания.
  • Компрометация ноды — админ переводит ноду в disabled или удаляет: отпечаток аннулируется, стрим закрывается, секреты хопов и Reality-ключи, известные ноде, перевыпускаются точечно (панель показывает, какие цепочки и профили затронуты).
  • Внутренний CA — ротация выпуском нового CA и параллельным переподписанием сертификатов агентов через живые стримы; период двух CA поддерживается до истечения последнего старого сертификата.

Что видит скомпрометированная нода

Section titled “Что видит скомпрометированная нода”

Секреты активных подписок своей группы доступа (в составе применённого конфига), трафик своих клиентов, секрет своего хопа. Не видит: БД панели, секреты других нод, приватные ключи других хопов, платёжные данные. Минимизация — прямое следствие того, что нода получает только собственный NodeConfig.