Конфигурация и эксплуатация
Аутентификация через доверенный прокси
⚠️ Функция, критичная к безопасности. Этот режим полностью делегирует аутентификацию вашему обратному прокси. Неправильная настройка может открыть доступ к вашему Gateway для неавторизованных пользователей. Внимательно прочтите эту страницу перед включением.
Когда использовать
Используйте режим аутентификации trusted-proxy, когда:
- OpenClaw работает за идентифицирующим прокси (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth)
- Ваш прокси обрабатывает всю аутентификацию и передаёт идентификатор пользователя через заголовки
- Вы находитесь в среде Kubernetes или контейнеров, где прокси — единственный путь к Gateway
- Вы получаете ошибки WebSocket
1008 unauthorized, потому что браузеры не могут передавать токены в полезной нагрузке WS
Когда НЕ использовать
- Если ваш прокси не аутентифицирует пользователей (просто терминатор TLS или балансировщик нагрузки)
- Если существует любой путь к Gateway, обходящий прокси (дыры в брандмауэре, доступ из внутренней сети)
- Если вы не уверены, что ваш прокси правильно удаляет/перезаписывает пересылаемые заголовки
- Если вам нужен только личный доступ для одного пользователя (рассмотрите Tailscale Serve + loopback для более простой настройки)
Как это работает
- Ваш обратный прокси аутентифицирует пользователей (OAuth, OIDC, SAML и т.д.)
- Прокси добавляет заголовок с идентификатором аутентифицированного пользователя (например,
x-forwarded-user: nick@example.com) - OpenClaw проверяет, что запрос пришёл с доверенного IP-адреса прокси (настраивается в
gateway.trustedProxies) - OpenClaw извлекает идентификатор пользователя из настроенного заголовка
- Если все проверки пройдены, запрос авторизуется
Поведение сопряжения с Control UI
Когда активен gateway.auth.mode = "trusted-proxy" и запрос проходит проверки доверенного прокси, сессии WebSocket Control UI могут подключаться без идентификатора сопряжения устройства. Последствия:
- Сопряжение больше не является основным условием доступа к Control UI в этом режиме.
- Политика аутентификации вашего обратного прокси и
allowUsersстановятся эффективным контролем доступа. - Держите входящий трафик к gateway заблокированным только для IP-адресов доверенного прокси (
gateway.trustedProxies+ брандмауэр).
Конфигурация
{
gateway: {
// Используйте loopback для настройки прокси на том же хосте; используйте lan/custom для удалённых прокси-хостов
bind: "loopback",
// КРИТИЧЕСКИ ВАЖНО: Добавляйте сюда ТОЛЬКО IP-адрес(а) вашего прокси
trustedProxies: ["10.0.0.1", "172.17.0.1"],
auth: {
mode: "trusted-proxy",
trustedProxy: {
// Заголовок, содержащий идентификатор аутентифицированного пользователя (обязательно)
userHeader: "x-forwarded-user",
// Опционально: заголовки, которые ДОЛЖНЫ присутствовать (верификация прокси)
requiredHeaders: ["x-forwarded-proto", "x-forwarded-host"],
// Опционально: ограничить доступ определёнными пользователями (пусто = разрешить всем)
allowUsers: ["nick@example.com", "admin@company.org"],
},
},
},
}
Если gateway.bind имеет значение loopback, включите адрес loopback прокси в gateway.trustedProxies (127.0.0.1, ::1 или эквивалентный CIDR loopback).
Справочник по конфигурации
| Поле | Обязательно | Описание |
|---|---|---|
gateway.trustedProxies | Да | Массив доверенных IP-адресов прокси. Запросы с других IP-адресов отклоняются. |
gateway.auth.mode | Да | Должно быть "trusted-proxy" |
gateway.auth.trustedProxy.userHeader | Да | Имя заголовка, содержащего идентификатор аутентифицированного пользователя |
gateway.auth.trustedProxy.requiredHeaders | Нет | Дополнительные заголовки, которые должны присутствовать для доверия запросу |
gateway.auth.trustedProxy.allowUsers | Нет | Список разрешённых идентификаторов пользователей. Пусто означает разрешить всем аутентифицированным пользователям. |
Терминирование TLS и HSTS
Используйте одну точку терминирования TLS и применяйте HSTS там.