Security
Мережевий проксі
OpenClaw може спрямовувати HTTP- та WebSocket-трафік середовища виконання через керований оператором прямий проксі-сервер. Це необов’язковий ешелонований захист: централізований контроль вихідного трафіку, надійніший захист від SSRF і можливість аудиту призначень на мережевій межі. Оскільки проксі-сервер перевіряє призначення під час підключення, після розв’язання DNS і безпосередньо перед відкриттям висхідного з’єднання, він також звужує часовий проміжок, на який спирається атака з переприв’язуванням DNS між попередньою перевіркою DNS на рівні застосунку та фактичним вихідним з’єднанням. Єдина політика проксі-сервера також дає операторам централізоване місце для застосування правил щодо призначень, сегментації мережі, обмежень швидкості або списків дозволених вихідних адрес без повторного збирання OpenClaw.
OpenClaw не постачає, не завантажує, не запускає, не налаштовує й не сертифікує проксі-сервер. Ви запускаєте технологію проксі-сервера, що відповідає вашому середовищу; OpenClaw спрямовує через неї власні клієнти HTTP і WebSocket.
Конфігурація
proxy: enabled: true proxyUrl: http://127.0.0.1:3128Також можна задати URL через середовище, залишивши proxy.enabled: true у конфігурації:
OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway runproxy.proxyUrl має пріоритет над OPENCLAW_PROXY_URL. Якщо proxy.enabled має значення true, але не вдається визначити жодного дійсного URL, захищені команди завершуються помилкою під час запуску замість переходу до прямого доступу до мережі.
| Ключ | Тип | Типове значення | Примітки |
|---|---|---|---|
proxy.enabled |
логічний | не задано | Для активації маршрутизації має бути true. |
proxy.proxyUrl |
рядок | не задано | URL прямого проксі-сервера з http:// або https://. Вбудовані в URL облікові дані вважаються конфіденційними та приховуються у знімках стану й журналах. |
proxy.tls.caFile |
рядок | не задано | Пакет сертифікатів ЦС для перевірки кінцевої точки проксі-сервера https://, підписаної приватним ЦС. |
proxy.loopbackMode |
gateway-only | proxy | block |
gateway-only |
Керує поведінкою обходу для зворотного інтерфейсу; див. нижче. |
Для керованих служб Gateway зберігайте URL у конфігурації, щоб він не втрачався після повторного встановлення, замість того щоб покладатися на змінну середовища процесу переднього плану:
openclaw config set proxy.enabled trueopenclaw config set proxy.proxyUrl http://127.0.0.1:3128openclaw gateway install --forceopenclaw gateway startРезервне використання змінної середовища OPENCLAW_PROXY_URL найкраще підходить для запусків на передньому плані. Щоб використовувати її зі встановленою службою, додайте її до постійного середовища служби ($OPENCLAW_STATE_DIR/.env, типово ~/.openclaw/.env), а потім повторно встановіть службу, щоб launchd/systemd/Заплановані завдання підхопили її.
Кінцева точка проксі-сервера HTTPS із приватним ЦС
proxy: enabled: true proxyUrl: https://proxy.corp.example:8443 tls: caFile: /etc/openclaw/proxy-ca.pemproxy.tls.caFile перевіряє власний TLS-сертифікат кінцевої точки проксі-сервера. Це не налаштування довіри до MITM для призначення, не клієнтський сертифікат і не заміна політики проксі-сервера щодо призначень. Натомість використовуйте NODE_EXTRA_CA_CERTS лише тоді, коли весь процес Node має довіряти додатковому ЦС від моменту запуску (наприклад, коли корпоративна система перевірки TLS повторно підписує сертифікат кожного призначення HTTPS) — ця змінна діє на рівні всього процесу й має бути задана до запуску Node, тому OpenClaw не може застосувати її під час роботи так само, як proxy.tls.caFile. Для довіри до кінцевої точки проксі-сервера HTTPS віддавайте перевагу proxy.tls.caFile: її дія обмежена керованою маршрутизацією через проксі-сервер, а не поширюється на весь процес.
openclaw config set proxy.enabled trueopenclaw config set proxy.proxyUrl https://proxy.corp.example:8443openclaw config set proxy.tls.caFile /etc/openclaw/proxy-ca.pemopenclaw gateway runЯк працює маршрутизація
За наявності proxy.enabled: true і дійсного URL захищені процеси середовища виконання (openclaw gateway run, openclaw node run, openclaw agent --local) спрямовують звичайний вихідний трафік HTTP і WebSocket через проксі-сервер:
OpenClaw process fetch, node:http, node:https, WebSocket clients -> operator proxy -> destinationВнутрішньо OpenClaw установлює Proxyline як середовище маршрутизації на рівні процесу. Воно охоплює fetch, клієнти на основі undici, node:http/node:https, поширені клієнти WebSocket і тунелі CONNECT, створені допоміжними засобами, а також замінює надані викликачем HTTP-агенти Node, щоб явно задані агенти (зокрема axios, got, node-fetch та подібні клієнти на основі агентів Node) не могли непомітно обійти проксі-сервер.
Схема URL проксі-сервера описує перехід від OpenClaw до проксі-сервера, а не до кінцевого призначення:
http://proxy.example:3128— звичайне TCP-з’єднання з проксі-сервером; OpenClaw надсилає проксі-запити HTTP, зокремаCONNECTдля призначень HTTPS.https://proxy.example:8443— OpenClaw установлює TLS-з’єднання із самим проксі-сервером (перевіряючи його сертифікат), а потім надсилає проксі-запити HTTP у межах цього сеансу.
TLS призначення не залежить від TLS кінцевої точки проксі-сервера: для призначення HTTPS OpenClaw завжди запитує в проксі-сервера тунель CONNECT і запускає TLS призначення через цей тунель.
Поки проксі-сервер активний, OpenClaw очищає no_proxy/NO_PROXY. Ці списки обходу ґрунтуються на призначеннях; наявність у них localhost або 127.0.0.1 дала б цілям SSRF змогу повністю обійти проксі-сервер. Під час завершення роботи OpenClaw відновлює попереднє середовище проксі-сервера та скидає кешований стан маршрутизації.
Деякі плагіни мають власний транспорт, для якого потрібне окреме налаштування проксі-сервера навіть за активної маршрутизації на рівні процесу. Клієнт Bot API Telegram використовує власний диспетчер HTTP/1 undici та окремо враховує змінні середовища проксі-сервера процесу разом із резервним значенням OPENCLAW_PROXY_URL.
Режим зворотного інтерфейсу Gateway
Локальні клієнти площини керування Gateway зазвичай підключаються до WebSocket на зворотному інтерфейсі, наприклад ws://127.0.0.1:18789. proxy.loopbackMode визначає, чи обходить цей трафік керований проксі-сервер:
proxy: enabled: true proxyUrl: http://127.0.0.1:3128 loopbackMode: gateway-only # gateway-only, proxy, or block| Режим | Поведінка |
|---|---|
gateway-only (типово) |
OpenClaw реєструє активний вузол Gateway на зворотному інтерфейсі як виняток для прямого підключення, тому локальний WebSocket-трафік Gateway підключається без проксі-сервера. Власні порти зворотного інтерфейсу працюють, оскільки виняток застосовується до точно налаштованої пари вузол/порт. Вбудований браузерний плагін реєструє такий самий виняток для точних локальних URL готовності CDP і WebSocket DevTools керованих браузерів, запущених OpenClaw; вбудований постачальник векторних представлень пам’яті Ollama має вужчий захищений прямий шлях для точно налаштованого локального джерела векторних представлень на зворотному інтерфейсі. |
proxy |
Винятки для зворотного інтерфейсу не реєструються; трафік Gateway і Ollama через зворотний інтерфейс проходить через проксі-сервер. Віддалений проксі-сервер повинен мати змогу спрямувати трафік назад до служби зворотного інтерфейсу на вузлі OpenClaw (наприклад, через доступне ім’я вузла, IP-адресу або тунель) — звичайний віддалений проксі-сервер розв’язує 127.0.0.1/localhost відносно самого себе, а не вузла OpenClaw. |
block |
OpenClaw забороняє підключення площини керування Gateway через зворотний інтерфейс і захищені підключення Ollama для векторних представлень через зворотний інтерфейс до відкриття сокета. |
Обхід площини керування Gateway обмежений localhost і URL із буквальними IP-адресами зворотного інтерфейсу — використовуйте ws://127.0.0.1:18789, ws://[::1]:18789 або ws://localhost:18789. Інші імена вузлів маршрутизуються як звичайний трафік.
Контейнери
Для команд openclaw --container ... OpenClaw передає OPENCLAW_PROXY_URL дочірньому CLI, орієнтованому на контейнер, якщо цю змінну задано. URL має бути доступним із контейнера — 127.0.0.1 там означає сам контейнер, а не вузол. OpenClaw відхиляє URL проксі-сервера зі зворотним інтерфейсом для команд, орієнтованих на контейнер, якщо ви явно не перевизначите цю перевірку, задавши OPENCLAW_CONTAINER_ALLOW_LOOPBACK_PROXY_URL=1.
Пов’язані терміни проксі-сервера
proxy.enabled/proxy.proxyUrl— маршрутизація вихідного трафіку середовища виконання через прямий проксі-сервер. Ця сторінка.gateway.auth.mode: "trusted-proxy"— автентифікація через вхідний зворотний проксі-сервер з урахуванням ідентичності для доступу до Gateway. Див. Автентифікація через довірений проксі-сервер.openclaw proxy— локальний проксі-сервер налагодження та інспектор захоплених даних для розробки й підтримки. Див. openclaw proxy.tools.web.fetch.useTrustedEnvProxy— явне ввімкнення дляweb_fetch, яке дає змогу контрольованому оператором проксі-серверу HTTP(S), заданому через середовище, розв’язувати DNS, водночас типово зберігаючи суворе прив’язування DNS і політику імен вузлів. Див. Отримання даних із вебу.- Налаштування проксі-сервера для окремих каналів або постачальників — специфічні для власника перевизначення одного транспорту. Для централізованого контролю вихідного трафіку в усьому середовищі виконання віддавайте перевагу керованому мережевому проксі-серверу.
Перевірка проксі-сервера
Політика проксі-сервера щодо призначень є фактичною межею безпеки; OpenClaw не може перевірити, чи блокує ваш проксі-сервер належні цілі. Налаштуйте його так, щоб він:
- Прив’язувався лише до зворотного інтерфейсу або приватного довіреного інтерфейсу, доступного тільки процесу, вузлу, контейнеру або службовому обліковому запису OpenClaw.
- Самостійно розв’язував призначення та блокував їх за IP-адресою після розв’язання DNS, під час підключення, як для звичайного HTTP, так і для тунелів HTTPS
CONNECT. - Відхиляв обхід за призначенням для зворотних, приватних, локальних для каналу, службових метаданих, багатоадресних, зарезервованих і документаційних діапазонів.
- Уникав списків дозволених імен вузлів, якщо ви не повністю довіряєте шляху розв’язання DNS.
- Записував у журнал призначення, рішення, стан і причину — але ніколи не тіла запитів, заголовки авторизації, файли cookie або інші секрети.
- Зберігав політику під керуванням версій і розглядав зміни як чутливі з погляду безпеки.
Виконайте перевірку з того самого вузла, контейнера або службового облікового запису, де працює OpenClaw:
openclaw proxy validate --proxy-url http://127.0.0.1:3128Для кінцевої точки проксі-сервера HTTPS із приватним ЦС:
openclaw proxy validate --proxy-url https://proxy.corp.example:8443 --proxy-ca-file /etc/openclaw/proxy-ca.pem| Прапорець | Призначення |
|---|---|
--proxy-url <url> |
Перевірити цю URL-адресу замість визначення з конфігурації/середовища. |
--proxy-ca-file <path> |
Пакет сертифікатів ЦС для кінцевої точки HTTPS-проксі. |
--allowed-url <url> |
Призначення, доступ до якого має бути успішним (можна вказувати повторно). |
--denied-url <url> |
Призначення, яке має бути заблоковане (можна вказувати повторно). |
--apns-reachable |
Також перевірити, чи може проксі тунелювати пряму тестову HTTP/2-перевірку APNs у пісочниці. |
--apns-authority <url> |
Перевизначити адресу APNs, яку перевіряє --apns-reachable. |
--timeout-ms <ms> |
Час очікування для кожного запиту. |
--json |
Машиночитаний вивід. |
Якщо proxy.enabled не має значення true і параметр --proxy-url не вказано, команда замість перевірки повідомляє про проблему конфігурації; перед зміною конфігурації передайте --proxy-url для одноразової попередньої перевірки.
Якщо не вказано --allowed-url/--denied-url, типові перевірки такі: доступ до https://example.com/ має бути успішним, а тимчасовий контрольний сервер local loopback, якого проксі не повинен досягати, має бути заблокований. Перевірка local loopback вважається успішною в разі транспортної помилки або відповіді не з діапазону 2xx, яка не містить унікального для цього запуску токена контрольного сервера; вона завершується невдало в разі відповіді 2xx без токена (неочікуваний успішний доступ до чогось іншого, ніж контрольний сервер) і особливо в разі будь-якої відповіді з відповідним токеном, оскільки це доводить, що проксі справді переслав запит до призначення local loopback, яке мав заблокувати. Власні цілі --denied-url не мають такого контрольного токена, тому для них діє принцип безпечної відмови: будь-яка HTTP-відповідь означає, що ціль доступна (помилка), а транспортна помилка вважається непереконливим результатом, а не підтвердженим блокуванням, оскільки OpenClaw не може визначити, чи проксі заблокував доступне джерело, чи сталася інша помилка. --apns-reachable надсилає навмисно недійсний токен постачальника, тому відповідь 403 InvalidProviderToken підтверджує, що тунель досяг Apple. Команда завершується з кодом 1 у разі будь-якої помилки перевірки; облікові дані в URL-адресі проксі приховуються як у текстовому, так і в JSON-виводі.
{ "ok": true, "config": { "enabled": true, "proxyUrl": "http://127.0.0.1:3128/", "source": "override", "errors": [] }, "checks": [ { "kind": "allowed", "url": "https://example.com/", "ok": true, "status": 200 }, { "kind": "apns", "url": "https://api.sandbox.push.apple.com", "ok": true, "status": 403 } ]}Ручна перевірка за допомогою curl (публічний запит має бути успішним; запити до local loopback і метаданих має блокувати сам проксі — лише curl не може відрізнити блокування проксі від недоступного джерела так, як це робить вбудований контрольний сервер openclaw proxy validate):
curl -x http://127.0.0.1:3128 https://example.com/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/Рекомендовані заблоковані призначення
Початковий список заборон для будь-якого прямого проксі, брандмауера або політики вихідного трафіку. Власний класифікатор SSRF OpenClaw міститься в src/infra/net/ssrf.ts і packages/net-policy/src/ip.ts (BLOCKED_HOSTNAMES, BLOCKED_IPV4_SPECIAL_USE_RANGES, BLOCKED_IPV6_SPECIAL_USE_RANGES, префікс RFC 2544 для еталонного тестування та обробка вбудованих IPv4-адрес у форматах NAT64/6to4/Teredo/ISATAP/IPv4-mapped) — це корисні довідкові матеріали, але OpenClaw не експортує та не застосовує ці правила у вашому зовнішньому проксі.
| Діапазон або хост | Причина блокування |
|---|---|
127.0.0.0/8, localhost, localhost.localdomain |
IPv4 local loopback |
::1/128 |
IPv6 local loopback |
0.0.0.0/8, ::/128 |
Невизначені адреси / адреси цієї мережі |
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
Приватні мережі RFC 1918 |
169.254.0.0/16, fe80::/10 |
Локальні для каналу адреси, зокрема поширені шляхи до хмарних метаданих |
169.254.169.254, metadata.google.internal |
Служби хмарних метаданих |
100.64.0.0/10 |
Спільний адресний простір NAT операторського класу |
198.18.0.0/15, 2001:2::/48 |
Діапазони для еталонного тестування |
192.0.0.0/24, 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32 |
Діапазони спеціального призначення та для документації |
224.0.0.0/4, ff00::/8 |
Багатоадресне розсилання |
240.0.0.0/4 |
Зарезервований IPv4 |
fc00::/7, fec0::/10 |
Локальні/приватні діапазони IPv6 |
100::/64, 2001:20::/28 |
Діапазони IPv6 для відкидання трафіку та ORCHIDv2 |
64:ff9b::/96, 64:ff9b:1::/48 |
Префікси NAT64 із вбудованим IPv4 |
2002::/16, 2001::/32 |
6to4 і Teredo із вбудованим IPv4 |
::/96, ::ffff:0:0/96 |
IPv6, сумісні з IPv4, та IPv6 із відображенням IPv4 |
Додайте всі додаткові хости метаданих або зарезервовані діапазони, задокументовані вашим постачальником хмарних послуг чи мережевою платформою.
Обмеження
| Поверхня | Стан керованого проксі |
|---|---|
fetch, node:http, node:https, поширені клієнти WebSocket |
За наявності конфігурації маршрутизуються через обробники керованого проксі. |
| Прямий HTTP/2 APNs | Маршрутизується через керований допоміжний засіб CONNECT для APNs. |
| Local loopback площини керування Gateway | Пряме з’єднання лише для точної налаштованої локальної URL-адреси local loopback Gateway. |
| Пересилання до висхідного налагоджувального проксі | Вимкнено, коли активний режим керованого проксі, якщо його явно не ввімкнено для локальної діагностики. |
| IRC | Необроблений TCP/TLS; не проксіюється режимом керованого HTTP-проксі. Установіть channels.irc.enabled: false, якщо ваше розгортання вимагає спрямування всього вихідного трафіку через прямий проксі. |
Інші виклики клієнтів через необроблені net, tls або http2 |
Перед прийняттям змін їх має класифікувати захисний механізм необроблених сокетів. |
- Це охоплення на рівні процесу для HTTP/WebSocket-клієнтів JavaScript, а не мережева пісочниця на рівні ОС.
- Необроблені сокети
net,tls,http2, нативні доповнення та дочірні процеси, що не належать OpenClaw, можуть обходити маршрутизацію на рівні Node, якщо вони не успадковують і не враховують змінні середовища проксі. Розгалужені дочірні CLI OpenClaw успадковують URL-адресу керованого проксі та станproxy.loopbackMode. - Локальні WebUI користувача та локальні сервери моделей не охоплюються загальним обходом локальної мережі — за потреби додайте їх до списку дозволених у політиці проксі оператора. Винятком є захищений прямий шлях вбудованого постачальника векторних представлень пам’яті Ollama, обмежений точним джерелом local loopback локального хоста з його налаштованого
baseUrl; хости Ollama в LAN, tailnet, приватній і публічній мережах усе одно використовують керований проксі. - Пряме пересилання до висхідного сервера локального налагоджувального проксі (для проксі-запитів і тунелів
CONNECT) за замовчуванням вимкнено, коли активний режим керованого проксі; вмикайте його лише для схваленої локальної діагностики. - OpenClaw не перевіряє, не тестує та не сертифікує вашу політику проксі. Розглядайте зміни політики проксі як операційні зміни, критичні для безпеки.