diff --git a/docs/uk/security/network-proxy.md b/docs/uk/security/network-proxy.md index 2d9c13ad3..ca9efc989 100644 --- a/docs/uk/security/network-proxy.md +++ b/docs/uk/security/network-proxy.md @@ -1,55 +1,69 @@ --- read_when: - - Вам потрібен багаторівневий захист від атак SSRF і повторного прив’язування DNS + - Вам потрібен багаторівневий захист від SSRF і атак повторного прив’язування DNS - Налаштування зовнішнього прямого проксі для трафіку середовища виконання OpenClaw -summary: Як спрямувати HTTP- і WebSocket-трафік середовища виконання OpenClaw через фільтрувальний проксі, керований оператором +summary: Як маршрутизувати HTTP- і WebSocket-трафік середовища виконання OpenClaw через фільтрувальний проксі, керований оператором title: Мережевий проксі x-i18n: - generated_at: "2026-04-29T14:34:02Z" + generated_at: "2026-04-29T23:59:53Z" model: gpt-5.5 provider: openai - source_hash: d5f6c2ba03ef9826675bb82957be21ec690631fcf5eca1e99775c3c145cd1531 + source_hash: c4e879f787571410acdda55dcdbb5fd77aef1d24045af5c9208cba51330a70ca source_path: security/network-proxy.md workflow: 16 --- # Мережевий проксі -OpenClaw може спрямовувати runtime HTTP- і WebSocket-трафік через керований оператором прямий проксі. Це необов’язковий додатковий рівень захисту для розгортань, яким потрібні централізований контроль вихідного трафіку, сильніший захист від SSRF і краща можливість аудиту мережі. +OpenClaw може маршрутизувати runtime HTTP- і WebSocket-трафік через керований оператором прямий проксі. Це необов’язковий захист у глибину для розгортань, яким потрібні централізований контроль вихідного трафіку, сильніший захист від SSRF і краща придатність мережі до аудиту. -OpenClaw не постачає, не завантажує, не запускає, не налаштовує й не сертифікує проксі. Ви запускаєте ту проксі-технологію, яка підходить вашому середовищу, а OpenClaw спрямовує через неї звичайні локальні для процесу HTTP- і WebSocket-клієнти. +OpenClaw не постачає, не завантажує, не запускає, не налаштовує й не сертифікує проксі. Ви запускаєте проксі-технологію, яка підходить вашому середовищу, а OpenClaw маршрутизує через неї звичайні локальні для процесу HTTP- і WebSocket-клієнти. ## Навіщо використовувати проксі? Проксі дає операторам одну точку мережевого контролю для вихідного HTTP- і WebSocket-трафіку. Це може бути корисно навіть поза посиленням захисту від SSRF: -- Централізована політика: підтримуйте одну політику вихідного трафіку замість того, щоб покладатися на коректне застосування мережевих правил у кожному місці HTTP-виклику застосунку. -- Перевірки під час підключення: оцінюйте призначення після DNS-резолюції та безпосередньо перед тим, як проксі відкриє upstream-з’єднання. -- Захист від DNS rebinding: зменшуйте розрив між DNS-перевіркою на рівні застосунку та фактичним вихідним з’єднанням. -- Ширше покриття JavaScript: спрямовуйте звичайні `fetch`, `node:http`, `node:https`, WebSocket, axios, got, node-fetch і подібні клієнти одним шляхом. -- Аудитованість: журналюйте дозволені й заборонені призначення на межі вихідного трафіку. -- Операційний контроль: застосовуйте правила призначень, сегментацію мережі, обмеження швидкості або allowlist вихідного трафіку без перебудови OpenClaw. +- Централізована політика: підтримуйте одну політику вихідного трафіку замість того, щоб покладатися на коректність мережевих правил у кожному місці HTTP-виклику застосунку. +- Перевірки під час підключення: оцінюйте призначення після DNS-розв’язання й безпосередньо перед тим, як проксі відкриє upstream-з’єднання. +- Захист від DNS rebinding: зменшуйте проміжок між DNS-перевіркою на рівні застосунку та фактичним вихідним з’єднанням. +- Ширше покриття JavaScript: маршрутизуйте звичайні `fetch`, `node:http`, `node:https`, WebSocket, axios, got, node-fetch і подібні клієнти через той самий шлях. +- Придатність до аудиту: журналюйте дозволені й заборонені призначення на межі вихідного трафіку. +- Операційний контроль: застосовуйте правила призначень, сегментацію мережі, обмеження швидкості або allowlist-и вихідного трафіку без перебудови OpenClaw. -Маршрутизація через проксі є guardrail на рівні процесу для звичайного вихідного HTTP- і WebSocket-трафіку. Вона дає операторам fail-closed шлях для спрямування підтримуваних JavaScript HTTP-клієнтів через власний фільтрувальний проксі, але не є мережевою пісочницею на рівні ОС і не означає, що OpenClaw сертифікує політику призначень проксі. +Маршрутизація через проксі є запобіжником на рівні процесу для звичайного вихідного HTTP- і WebSocket-трафіку. Вона дає операторам fail-closed шлях для маршрутизації підтримуваних JavaScript HTTP-клієнтів через власний фільтрувальний проксі, але не є мережевою пісочницею на рівні ОС і не змушує OpenClaw сертифікувати політику призначень проксі. -## Як OpenClaw спрямовує трафік +## Як OpenClaw маршрутизує трафік -Коли `proxy.enabled=true` і налаштовано URL проксі, захищені runtime-процеси, як-от `openclaw gateway run`, `openclaw node run` і `openclaw agent --local`, спрямовують звичайний вихідний HTTP- і WebSocket-трафік через налаштований проксі: +Коли `proxy.enabled=true` і налаштовано URL проксі, захищені runtime-процеси, як-от `openclaw gateway run`, `openclaw node run` і `openclaw agent --local`, маршрутизують звичайний вихідний HTTP- і WebSocket-трафік через налаштований проксі: ```text -Процес OpenClaw - fetch -> керований оператором фільтрувальний проксі -> публічний інтернет - node:http і https -> керований оператором фільтрувальний проксі -> публічний інтернет - WebSocket-клієнти -> керований оператором фільтрувальний проксі -> публічний інтернет +OpenClaw process + fetch -> operator-managed filtering proxy -> public internet + node:http and https -> operator-managed filtering proxy -> public internet + WebSocket clients -> operator-managed filtering proxy -> public internet ``` -Публічний контракт — це поведінка маршрутизації, а не внутрішні хуки Node, які використовуються для її реалізації. Клієнти WebSocket площини керування OpenClaw Gateway використовують вузький прямий шлях для трафіку Gateway RPC через local loopback, коли URL Gateway використовує `localhost` або буквальний loopback IP, як-от `127.0.0.1` чи `[::1]`. Цей шлях площини керування має бути здатен досягати loopback Gateway, навіть коли проксі оператора блокує loopback-призначення. Звичайні runtime HTTP- і WebSocket-запити все одно використовують налаштований проксі. +Публічний контракт — це поведінка маршрутизації, а не внутрішні Node-перехоплювачі, використані для її реалізації. WebSocket-клієнти контрольної площини OpenClaw Gateway використовують вузький прямий шлях для локального Gateway RPC-трафіку через local loopback, коли URL Gateway використовує `localhost` або літеральну loopback IP-адресу, як-от `127.0.0.1` чи `[::1]`. Цей шлях контрольної площини має бути здатний досягати loopback Gateway-ів навіть тоді, коли проксі оператора блокує loopback-призначення. Звичайні runtime HTTP- і WebSocket-запити все одно використовують налаштований проксі. -Сам URL проксі має використовувати `http://`. HTTPS-призначення все ще підтримуються через проксі за допомогою HTTP `CONNECT`; це лише означає, що OpenClaw очікує звичайний HTTP-слухач прямого проксі, як-от `http://127.0.0.1:3128`. +Внутрішньо OpenClaw використовує два перехоплювачі маршрутизації на рівні процесу для цієї функції: -Поки проксі активний, OpenClaw очищає `no_proxy`, `NO_PROXY` і `GLOBAL_AGENT_NO_PROXY`. Ці списки обходу базуються на призначеннях, тому залишення там `localhost` або `127.0.0.1` дозволило б високоризиковим SSRF-цілям оминути фільтрувальний проксі. +- Маршрутизація диспетчера Undici покриває `fetch`, клієнти на основі undici й транспорти, які надають власний диспетчер undici. +- Маршрутизація `global-agent` покриває виклики ядра Node `node:http` і `node:https`, зокрема багато бібліотек, побудованих поверх `http.request`, `https.request`, `http.get` і `https.get`. Керований режим проксі примусово використовує цей глобальний агент, щоб явні HTTP-агенти Node випадково не обходили проксі оператора. -Під час завершення роботи OpenClaw відновлює попереднє проксі-середовище та скидає кешований стан маршрутизації процесу. +Деякі плагіни володіють власними транспортами, яким потрібне явне підключення проксі навіть тоді, коли існує маршрутизація на рівні процесу. Наприклад, транспорт Bot API Telegram використовує власний HTTP/1-диспетчер undici і тому поважає env проксі процесу плюс керований fallback `OPENCLAW_PROXY_URL` у цьому owner-specific транспортному шляху. + +Сам URL проксі має використовувати `http://`. HTTPS-призначення все одно підтримуються через проксі за допомогою HTTP `CONNECT`; це лише означає, що OpenClaw очікує простий HTTP forward-proxy listener, як-от `http://127.0.0.1:3128`. + +Поки проксі активний, OpenClaw очищає `no_proxy`, `NO_PROXY` і `GLOBAL_AGENT_NO_PROXY`. Ці списки обходу базуються на призначенні, тому якщо залишити там `localhost` або `127.0.0.1`, високоризикові SSRF-цілі могли б обходити фільтрувальний проксі. + +Під час завершення роботи OpenClaw відновлює попереднє proxy environment і скидає кешований стан маршрутизації процесу. + +## Пов’язані терміни проксі + +- `proxy.enabled` / `proxy.proxyUrl`: маршрутизація вихідного трафіку через forward-proxy для runtime-виходу OpenClaw. Ця сторінка документує цю функцію. +- `gateway.auth.mode: "trusted-proxy"`: inbound identity-aware автентифікація через reverse-proxy для доступу до Gateway. Див. [Автентифікація через довірений проксі](/uk/gateway/trusted-proxy-auth). +- `openclaw proxy`: локальний debug proxy і capture inspector для розробки та підтримки. Див. [openclaw proxy](/uk/cli/proxy). +- Канальні або provider-specific налаштування проксі: owner-specific перевизначення для конкретного транспорту. Віддавайте перевагу керованому мережевому проксі, коли мета — централізований контроль вихідного трафіку в усьому runtime. ## Конфігурація @@ -59,7 +73,7 @@ proxy: proxyUrl: http://127.0.0.1:3128 ``` -Ви також можете передати URL через середовище, залишивши `proxy.enabled=true` у конфігурації: +Ви також можете надати URL через середовище, залишивши `proxy.enabled=true` у конфігурації: ```bash OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run @@ -67,9 +81,9 @@ OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run `proxy.proxyUrl` має пріоритет над `OPENCLAW_PROXY_URL`. -Якщо `enabled=true`, але не налаштовано чинний URL проксі, захищені команди не запускаються, замість того щоб повертатися до прямого доступу до мережі. +Якщо `enabled=true`, але не налаштовано дійсний URL проксі, захищені команди завершують запуск помилкою замість fallback до прямого доступу до мережі. -Для керованих служб gateway, запущених через `openclaw gateway start`, бажано зберігати URL у конфігурації: +Для керованих служб Gateway, запущених через `openclaw gateway start`, краще зберігати URL у конфігурації: ```bash openclaw config set proxy.enabled true @@ -78,9 +92,9 @@ openclaw gateway install --force openclaw gateway start ``` -Резервний варіант із середовищем найкраще підходить для запусків у foreground. Якщо ви використовуєте його з інстальованою службою, помістіть `OPENCLAW_PROXY_URL` у довготривале середовище служби, як-от `$OPENCLAW_STATE_DIR/.env` або `~/.openclaw/.env`, а потім перевстановіть службу, щоб launchd, systemd або Scheduled Tasks запускали gateway з цим значенням. +Fallback через середовище найкраще підходить для foreground-запусків. Якщо ви використовуєте його з установленою службою, помістіть `OPENCLAW_PROXY_URL` у durable environment служби, наприклад `$OPENCLAW_STATE_DIR/.env` або `~/.openclaw/.env`, а потім перевстановіть службу, щоб launchd, systemd або Scheduled Tasks запускали gateway з цим значенням. -Для команд `openclaw --container ...` OpenClaw передає `OPENCLAW_PROXY_URL` у дочірній CLI, призначений для контейнера, коли його задано. URL має бути доступний зсередини контейнера; `127.0.0.1` посилається на сам контейнер, а не на хост. OpenClaw відхиляє loopback URL проксі для команд, призначених для контейнера, якщо ви явно не перевизначите цю перевірку безпеки. +Для команд `openclaw --container ...` OpenClaw пересилає `OPENCLAW_PROXY_URL` у container-targeted дочірній CLI, коли він заданий. URL має бути доступний зсередини контейнера; `127.0.0.1` посилається на сам контейнер, а не на хост. OpenClaw відхиляє loopback URL проксі для container-targeted команд, якщо ви явно не перевизначите цю safety check. ## Вимоги до проксі @@ -89,44 +103,44 @@ openclaw gateway start Налаштуйте проксі так, щоб він: - Прив’язувався лише до loopback або приватного довіреного інтерфейсу. -- Обмежував доступ так, щоб його могли використовувати лише процес OpenClaw, хост, контейнер або службовий обліковий запис. -- Самостійно резолвив призначення й блокував IP-адреси призначень після DNS-резолюції. -- Застосовував політику під час підключення як для звичайних HTTP-запитів, так і для HTTPS-тунелів `CONNECT`. -- Відхиляв обходи на основі призначення для loopback, приватних, link-local, metadata, multicast, reserved або documentation діапазонів. -- Уникав allowlist імен хостів, якщо ви повністю не довіряєте шляху DNS-резолюції. -- Журналював призначення, рішення, статус і причину без журналювання тіл запитів, заголовків авторизації, cookies або інших секретів. -- Тримав політику проксі під контролем версій і переглядав зміни як конфігурацію, чутливу до безпеки. +- Обмежував доступ так, щоб ним міг користуватися лише процес, хост, контейнер або service account OpenClaw. +- Самостійно розв’язував призначення й блокував IP-адреси призначення після DNS-розв’язання. +- Застосовував політику під час підключення як для звичайних HTTP-запитів, так і для HTTPS `CONNECT` tunnels. +- Відхиляв destination-based обходи для loopback, приватних, link-local, metadata, multicast, reserved або documentation діапазонів. +- Уникав allowlist-ів імен хостів, якщо ви повністю не довіряєте шляху DNS-розв’язання. +- Журналював призначення, рішення, статус і причину без журналювання тіл запитів, authorization headers, cookies або інших секретів. +- Тримав політику проксі під контролем версій і переглядав зміни як security-sensitive конфігурацію. ## Рекомендовані заблоковані призначення -Використовуйте цей denylist як відправну точку для будь-якого прямого проксі, firewall або політики вихідного трафіку. +Використовуйте цей denylist як початкову точку для будь-якого forward proxy, firewall або політики вихідного трафіку. -Логіка класифікатора OpenClaw на рівні застосунку міститься в `src/infra/net/ssrf.ts` і `src/shared/net/ip.ts`. Відповідні хуки parity — це `BLOCKED_HOSTNAMES`, `BLOCKED_IPV4_SPECIAL_USE_RANGES`, `BLOCKED_IPV6_SPECIAL_USE_RANGES`, `RFC2544_BENCHMARK_PREFIX` і вбудована обробка sentinel IPv4 для NAT64, 6to4, Teredo, ISATAP і IPv4-mapped форм. Ці файли є корисними довідниками під час підтримки зовнішньої політики проксі, але OpenClaw не експортує й не застосовує ці правила автоматично у вашому проксі. +Логіка класифікатора OpenClaw на рівні застосунку розташована в `src/infra/net/ssrf.ts` і `src/shared/net/ip.ts`. Відповідні parity hooks — це `BLOCKED_HOSTNAMES`, `BLOCKED_IPV4_SPECIAL_USE_RANGES`, `BLOCKED_IPV6_SPECIAL_USE_RANGES`, `RFC2544_BENCHMARK_PREFIX` і вбудована обробка IPv4 sentinel для NAT64, 6to4, Teredo, ISATAP та IPv4-mapped forms. Ці файли є корисними довідковими матеріалами під час підтримки зовнішньої політики проксі, але OpenClaw не експортує й не застосовує ці правила автоматично у вашому проксі. -| Діапазон або хост | Навіщо блокувати | +| Діапазон або хост | Чому блокувати | | ------------------------------------------------------------------------------------ | --------------------------------------------------- | | `127.0.0.0/8`, `localhost`, `localhost.localdomain` | IPv4 loopback | | `::1/128` | IPv6 loopback | -| `0.0.0.0/8`, `::/128` | Невизначені адреси й адреси цієї мережі | +| `0.0.0.0/8`, `::/128` | Невизначені адреси та адреси цієї мережі | | `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` | Приватні мережі RFC1918 | -| `169.254.0.0/16`, `fe80::/10` | Link-local адреси та поширені шляхи cloud metadata | -| `169.254.169.254`, `metadata.google.internal` | Служби cloud metadata | +| `169.254.0.0/16`, `fe80::/10` | Link-local адреси та поширені шляхи metadata хмар | +| `169.254.169.254`, `metadata.google.internal` | Служби metadata хмари | | `100.64.0.0/10` | Спільний адресний простір carrier-grade NAT | | `198.18.0.0/15`, `2001:2::/48` | Діапазони benchmark | -| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | Діапазони special-use і documentation | +| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | Special-use і documentation діапазони | | `224.0.0.0/4`, `ff00::/8` | Multicast | | `240.0.0.0/4` | Зарезервований IPv4 | | `fc00::/7`, `fec0::/10` | Локальні/приватні діапазони IPv6 | -| `100::/64`, `2001:20::/28` | Діапазони IPv6 discard і ORCHIDv2 | +| `100::/64`, `2001:20::/28` | IPv6 discard і ORCHIDv2 діапазони | | `64:ff9b::/96`, `64:ff9b:1::/48` | Префікси NAT64 із вбудованим IPv4 | | `2002::/16`, `2001::/32` | 6to4 і Teredo із вбудованим IPv4 | | `::/96`, `::ffff:0:0/96` | IPv4-compatible і IPv4-mapped IPv6 | -Якщо ваш cloud provider або мережева платформа документує додаткові metadata-хости чи зарезервовані діапазони, додайте також їх. +Якщо ваш хмарний provider або мережева платформа документує додаткові metadata hosts чи reserved ranges, додайте і їх. -## Валідація +## Перевірка -Перевірте проксі з того самого хоста, контейнера або службового облікового запису, який запускає OpenClaw: +Перевірте проксі з того самого хоста, контейнера або service account, який запускає OpenClaw: ```bash curl -x http://127.0.0.1:3128 https://example.com/ @@ -134,7 +148,7 @@ curl -x http://127.0.0.1:3128 http://127.0.0.1/ curl -x http://127.0.0.1:3128 http://169.254.169.254/ ``` -Публічний запит має пройти успішно. Loopback- і metadata-запити мають зазнати помилки на проксі. +Публічний запит має бути успішним. Loopback- і metadata-запити мають завершитися помилкою на проксі. Потім увімкніть маршрутизацію OpenClaw через проксі: @@ -155,8 +169,8 @@ proxy: ## Обмеження - Проксі покращує покриття для локальних для процесу JavaScript HTTP- і WebSocket-клієнтів, але не є мережевою пісочницею на рівні ОС. -- Сирі сокети `net`, `tls` і `http2`, нативні addons і дочірні процеси можуть обходити маршрутизацію через проксі на рівні Node, якщо вони не успадковують і не поважають змінні середовища проксі. -- Локальні WebUI користувача та локальні сервери моделей слід додавати до allowlist у політиці проксі оператора, коли це потрібно; OpenClaw не надає для них загального обходу локальної мережі. -- Обхід проксі для площини керування Gateway навмисно обмежений `localhost` і URL із буквальними loopback IP. Використовуйте `ws://127.0.0.1:18789`, `ws://[::1]:18789` або `ws://localhost:18789` для локальних прямих з’єднань площини керування Gateway; інші імена хостів маршрутизуються як звичайний трафік на основі імені хоста. +- Raw `net`, `tls` і `http2` sockets, native addons і дочірні процеси можуть обходити маршрутизацію проксі на рівні Node, якщо вони не успадковують і не поважають змінні середовища проксі. +- Локальні WebUI користувача та локальні model servers слід додавати до allowlist у політиці проксі оператора за потреби; OpenClaw не надає для них загального обходу локальної мережі. +- Обхід проксі для контрольної площини Gateway навмисно обмежений `localhost` і літеральними loopback IP URL. Використовуйте `ws://127.0.0.1:18789`, `ws://[::1]:18789` або `ws://localhost:18789` для локальних прямих підключень до контрольної площини Gateway; інші імена хостів маршрутизуються як звичайний hostname-based трафік. - OpenClaw не перевіряє, не тестує й не сертифікує вашу політику проксі. -- Розглядайте зміни політики проксі як операційні зміни, чутливі до безпеки. +- Розглядайте зміни політики проксі як security-sensitive операційні зміни.