Модель безопасности и обязательства по приватности
Gately работает на границе сети и имеет дело с ключами DNS-провайдеров, закрытыми ключами сертификатов и разными учётными данными, поэтому безопасность и прозрачность — главные цели проекта.
Обязательства по приватности
- Ноль внешних подключений по умолчанию: нет обращений к серверам проекта, отправки данных об устройстве и удалённой доставки конфигурации.
- Внешние адреса видны и настраиваются: адреса определения публичного IP, STUN-серверы и другие показываются в интерфейсе и могут быть изменены или отключены.
- Самостоятельная сторонняя авторизация: вход через GitHub, Google, QQ и OIDC использует ваши собственные OAuth-приложения, без каких-либо посредников.
- Обновления под вашим контролем: программа не скачивает и не подменяет себя в фоне. Онлайн-обновление бинарной установки в Linux запускается только по нажатию администратора, сверяет SHA-256 и сохраняет предыдущую версию; момент обновления выбираете вы.
Защита данных
- Конфигурация хранится в открытом JSON с правами 0600, её можно аудировать и откатывать.
- Чувствительные поля маскируются в выводе API.
- Токен cloudflared передаётся через переменную окружения и не виден в списке процессов; токены и ключи frp и Tailscale хранятся с правами 0600.
Аутентификация и контроль доступа
- хеширование паролей bcrypt, сессионные токены с HMAC-подписью;
- пароль по умолчанию
gately.cnобщеизвестен, поэтому, пока он используется, вверху интерфейса управления постоянно отображается напоминание сменить его; забытый пароль или потерянный аутентификатор двухфакторной аутентификации можно сбросить только на сервере командамиgately reset-password/gately reset-totp(нужен доступ на чтение и запись к каталогу конфигурации и подтверждение вводомyes), после сброса все сеансы становятся недействительными, а операция записывается в журнал аудита, подробнее в разделе Сброс пароля и двухфакторной аутентификации; - вход по passkey (WebAuthn): хранится только открытый ключ, обязательна проверка пользователя (отпечаток пальца, лицо или PIN), счётчик подписей защищает от клонирования; требуется доступ по домену через HTTPS (или localhost);
- двухфакторная аутентификация (TOTP, проверена по тестовым векторам RFC 6238);
- учётные записи только для чтения: могут просматривать состояние и конфигурацию, но не могут вносить изменения, скачивать резервные копии, читать секреты или открывать терминал; после сброса пароля или удаления их сеансы сразу становятся недействительными;
- ограничение частоты неудачных попыток входа;
- локальный обратный прокси: если интерфейс управления стоит за nginx, haproxy или веб-службой Gately на этом же хосте, заголовкам
X-Real-IP/X-Forwarded-Forдоверяют только от адресов этого хоста; по ним доступ только из локальной сети, ограничение попыток входа и журнал аудита получают реальный источник. Это можно отключить или добавить дополнительные доверенные прокси в «Настройки → Ограничения доступа»; - секретный путь входа, доступ только из локальной сети, HTTPS для интерфейса управления;
- единый шлюз fnOS: при доступе к пакету для fnOS через единый шлюз fnOS доступ контролирует fnOS, и открыть интерфейс могут только администраторы fnOS. «Вход через fnOS» по умолчанию отключён; после включения администраторы, уже вошедшие в fnOS, входят как администратор Gately (без двухэтапной проверки), а обычные пользователи fnOS по-прежнему входят с паролем, подробнее в разделе Нативное приложение для fnOS;
- переключатели модулей: модули, отключённые в разделе «Настройки → Модули», не запускают служб и не обслуживают API управления, что сокращает поверхность атаки;
- несколько API-токенов: каждый токен получает права чтения и записи только для модулей, отмеченных при создании, может иметь срок действия, а система запоминает IP-адрес последнего использования; аккаунт, двухфакторная аутентификация, управление токенами, а также резервное копирование, восстановление, перезапуск и системные настройки доступны только через сессию входа, подробнее в разделе API-токены и OpenAPI;
- контроль доступа к сайтам: автоблокировка при неудачной аутентификации, фильтрация по странам через GeoIP, правила по путям, подробнее в разделе Веб-службы;
- резервные копии конфигурации можно шифровать (scrypt + AES-GCM), подробнее в разделе Резервное копирование.
Аудит и прослеживаемость
Журнал аудита фиксирует входы, изменения конфигурации и доступ к чувствительным данным, а история конфигурации хранит версию каждого файла конфигурации до перезаписи и позволяет откатиться одним щелчком; подробнее в разделе Аудит и история конфигурации. Артефакты релизов сопровождаются подписями cosign, аттестацией происхождения сборки и SBOM; как их проверить, описано в разделе Проверка релизов.
Значения по умолчанию для рискованных функций
Терминал локального Shell по умолчанию отключён. Для SSH-терминала действует политика «доверие при первом подключении»: отпечаток ключа хоста запоминается.
Сообщить об уязвимости
Сообщайте об уязвимостях приватно через страницу Security в репозитории GitHub, не раскрывая подробности в публичных Issue: https://github.com/wangwanjie/gately/security
Больше рекомендаций — в разделе Рекомендации по защите.