Security
Proxy sieciowy
OpenClaw może kierować ruch HTTP i WebSocket w czasie wykonywania przez zarządzany przez operatora forward proxy. To opcjonalna obrona warstwowa dla wdrożeń, które wymagają centralnej kontroli ruchu wychodzącego, silniejszej ochrony przed SSRF i lepszej audytowalności sieci.
OpenClaw nie dostarcza, nie pobiera, nie uruchamia, nie konfiguruje ani nie certyfikuje proxy. Uruchamiasz technologię proxy dopasowaną do swojego środowiska, a OpenClaw kieruje przez nią zwykłe lokalne dla procesu klienty HTTP i WebSocket.
Dlaczego używać proxy
Proxy daje operatorom jeden punkt kontroli sieci dla wychodzącego ruchu HTTP i WebSocket. Może to być przydatne także poza wzmacnianiem ochrony przed SSRF:
- Centralna polityka: utrzymuj jedną politykę ruchu wychodzącego zamiast polegać na tym, że każde miejsce wywołań HTTP w aplikacji poprawnie zastosuje reguły sieciowe.
- Kontrole w momencie połączenia: oceniaj cel po rozpoznaniu DNS i bezpośrednio przed otwarciem przez proxy połączenia upstream.
- Obrona przed DNS rebinding: zmniejsz odstęp między kontrolą DNS na poziomie aplikacji a faktycznym połączeniem wychodzącym.
- Szersze pokrycie JavaScript: kieruj zwykłe klienty
fetch,node:http,node:https, WebSocket, axios, got, node-fetch i podobne tą samą ścieżką. - Audytowalność: rejestruj dozwolone i odrzucone cele na granicy ruchu wychodzącego.
- Kontrola operacyjna: egzekwuj reguły celów, segmentację sieci, limity szybkości lub listy dozwolonych celów wychodzących bez przebudowywania OpenClaw.
Kierowanie przez proxy jest zabezpieczeniem na poziomie procesu dla zwykłego wychodzącego ruchu HTTP i WebSocket. Daje operatorom ścieżkę fail-closed do kierowania obsługiwanych klientów HTTP JavaScript przez ich własne filtrujące proxy, ale nie jest piaskownicą sieciową na poziomie systemu operacyjnego i nie sprawia, że OpenClaw certyfikuje politykę celów proxy.
Jak OpenClaw kieruje ruch
Gdy skonfigurowano proxy.enabled=true oraz URL proxy, chronione procesy uruchomieniowe, takie jak openclaw gateway run, openclaw node run i openclaw agent --local, kierują zwykły wychodzący ruch HTTP i WebSocket przez skonfigurowane proxy:
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
Publiczną umową jest zachowanie kierowania ruchu, a nie wewnętrzne haki Node używane do jego implementacji. Klienty WebSocket płaszczyzny sterowania OpenClaw Gateway używają wąskiej ścieżki bezpośredniej dla ruchu RPC do local loopback Gateway, gdy URL Gateway używa localhost albo dosłownego adresu IP pętli zwrotnej, takiego jak 127.0.0.1 lub [::1]. Ta ścieżka płaszczyzny sterowania musi móc docierać do Gateway w pętli zwrotnej nawet wtedy, gdy proxy operatora blokuje cele w pętli zwrotnej. Zwykłe żądania HTTP i WebSocket w czasie wykonywania nadal używają skonfigurowanego proxy.
Wewnętrznie OpenClaw używa dla tej funkcji dwóch haków kierowania na poziomie procesu:
- Kierowanie przez dispatcher Undici obejmuje
fetch, klientów opartych na undici oraz transporty, które udostępniają własny dispatcher undici. - Kierowanie
global-agentobejmuje wywołujących z rdzenia Nodenode:httpinode:https, w tym wiele bibliotek zbudowanych nahttp.request,https.request,http.getihttps.get. Zarządzany tryb proxy wymusza tego globalnego agenta, aby jawni agenci HTTP Node nie ominęli przypadkowo proxy operatora.
Niektóre pluginy są właścicielami niestandardowych transportów, które wymagają jawnego podłączenia proxy nawet wtedy, gdy istnieje kierowanie na poziomie procesu. Na przykład transport Bot API Telegram używa własnego dispatchera HTTP/1 undici, dlatego respektuje zmienne środowiskowe proxy procesu oraz zarządzany fallback OPENCLAW_PROXY_URL w tej ścieżce transportu właściwej dla właściciela.
Sam URL proxy musi używać http://. Cele HTTPS są nadal obsługiwane przez proxy za pomocą HTTP CONNECT; oznacza to tylko, że OpenClaw oczekuje zwykłego nasłuchu HTTP forward-proxy, takiego jak http://127.0.0.1:3128.
Gdy proxy jest aktywne, OpenClaw czyści no_proxy, NO_PROXY i GLOBAL_AGENT_NO_PROXY. Te listy obejść są oparte na celu, więc pozostawienie tam localhost lub 127.0.0.1 pozwoliłoby celom SSRF wysokiego ryzyka ominąć filtrujące proxy.
Podczas zamykania OpenClaw przywraca poprzednie środowisko proxy i resetuje buforowany stan kierowania procesu.
Powiązane terminy proxy
proxy.enabled/proxy.proxyUrl: wychodzące kierowanie przez forward-proxy dla ruchu OpenClaw w czasie wykonywania. Ta strona dokumentuje tę funkcję.gateway.auth.mode: "trusted-proxy": przychodzące uwierzytelnianie przez reverse-proxy świadome tożsamości dla dostępu do Gateway. Zobacz Uwierzytelnianie przez zaufane proxy.openclaw proxy: lokalne proxy debugowania i inspektor przechwytywania dla rozwoju i wsparcia. Zobacz openclaw proxy.tools.web.fetch.useTrustedEnvProxy: opcja włączana jawnie dlaweb_fetch, aby umożliwić kontrolowanemu przez operatora proxy HTTP(S) ze środowiska rozpoznawanie DNS przy zachowaniu domyślnego ścisłego przypięcia DNS i polityki nazw hostów. Zobacz Pobieranie z sieci.- Ustawienia proxy specyficzne dla kanału lub dostawcy: nadpisania właściwe dla właściciela konkretnego transportu. Preferuj zarządzane proxy sieciowe, gdy celem jest centralna kontrola ruchu wychodzącego w całym środowisku wykonawczym.
Konfiguracja
proxy:
enabled: true
proxyUrl: http://127.0.0.1:3128
Możesz też podać URL przez środowisko, zachowując proxy.enabled=true w konfiguracji:
OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run
proxy.proxyUrl ma pierwszeństwo przed OPENCLAW_PROXY_URL.
Tryb pętli zwrotnej Gateway
Lokalne klienty płaszczyzny sterowania Gateway zwykle łączą się z WebSocket w pętli zwrotnej, takim jak ws://127.0.0.1:18789. Użyj proxy.loopbackMode, aby wybrać zachowanie tego ruchu, gdy zarządzane proxy jest aktywne:
proxy:
enabled: true
proxyUrl: http://127.0.0.1:3128
loopbackMode: gateway-only # gateway-only, proxy, or block
gateway-only(domyślnie): OpenClaw rejestruje autorytet pętli zwrotnej Gateway w aktywnym kontrolerzeNO_PROXYglobal-agent, aby lokalny ruch WebSocket Gateway mógł łączyć się bezpośrednio. Niestandardowe porty Gateway w pętli zwrotnej działają, ponieważ host i port aktywnego URL Gateway są rejestrowane.proxy: OpenClaw nie rejestruje autorytetuNO_PROXYdla Gateway w pętli zwrotnej, więc lokalny ruch Gateway jest wysyłany przez zarządzane proxy. Jeśli proxy jest zdalne, musi zapewniać specjalne kierowanie do usługi pętli zwrotnej hosta OpenClaw, na przykład mapowanie jej na nazwę hosta, adres IP lub tunel osiągalny z proxy. Standardowe zdalne proxy rozpoznają127.0.0.1ilocalhostz hosta proxy, a nie z hosta OpenClaw.block: OpenClaw odrzuca połączenia płaszczyzny sterowania Gateway w pętli zwrotnej przed otwarciem gniazda.
Jeśli enabled=true, ale nie skonfigurowano prawidłowego URL proxy, chronione polecenia kończą uruchamianie niepowodzeniem zamiast wracać do bezpośredniego dostępu do sieci.
Dla zarządzanych usług Gateway uruchamianych przez openclaw gateway start preferuj przechowywanie URL w konfiguracji:
openclaw config set proxy.enabled true
openclaw config set proxy.proxyUrl http://127.0.0.1:3128
openclaw gateway install --force
openclaw gateway start
Fallback środowiskowy najlepiej sprawdza się przy uruchomieniach pierwszoplanowych. Jeśli używasz go z zainstalowaną usługą, umieść OPENCLAW_PROXY_URL w trwałym środowisku usługi, takim jak $OPENCLAW_STATE_DIR/.env lub ~/.openclaw/.env, a następnie zainstaluj usługę ponownie, aby launchd, systemd lub Scheduled Tasks uruchamiały Gateway z tą wartością.
Dla poleceń openclaw --container ... OpenClaw przekazuje OPENCLAW_PROXY_URL do docelowego dla kontenera procesu potomnego CLI, gdy jest ustawiony. URL musi być osiągalny z wnętrza kontenera; 127.0.0.1 odnosi się do samego kontenera, a nie do hosta. OpenClaw odrzuca URL-e proxy w pętli zwrotnej dla poleceń docelowych dla kontenera, chyba że jawnie nadpiszesz tę kontrolę bezpieczeństwa.
Wymagania proxy
Polityka proxy jest granicą bezpieczeństwa. OpenClaw nie może zweryfikować, czy proxy blokuje właściwe cele.
Skonfiguruj proxy tak, aby:
- Wiązało się tylko z pętlą zwrotną lub prywatnym zaufanym interfejsem.
- Ograniczało dostęp tak, aby używać go mógł tylko proces, host, kontener lub konto usługi OpenClaw.
- Samodzielnie rozpoznawało cele i blokowało docelowe adresy IP po rozpoznaniu DNS.
- Stosowało politykę w momencie połączenia zarówno dla zwykłych żądań HTTP, jak i tuneli HTTPS
CONNECT. - Odrzucało obejścia oparte na celu dla zakresów pętli zwrotnej, prywatnych, link-local, metadanych, multicast, zarezerwowanych lub dokumentacyjnych.
- Unikało list dozwolonych nazw hostów, chyba że w pełni ufasz ścieżce rozpoznawania DNS.
- Rejestrowało cel, decyzję, status i powód bez rejestrowania treści żądań, nagłówków autoryzacji, plików cookie ani innych sekretów.
- Utrzymywało politykę proxy pod kontrolą wersji i przeglądało zmiany tak jak konfigurację wrażliwą na bezpieczeństwo.
Zalecane blokowane cele
Użyj tej denylist jako punktu wyjścia dla dowolnego forward proxy, zapory sieciowej lub polityki ruchu wychodzącego.
Logika klasyfikatora na poziomie aplikacji OpenClaw znajduje się w src/infra/net/ssrf.ts i src/shared/net/ip.ts. Odpowiednie haki zgodności to BLOCKED_HOSTNAMES, BLOCKED_IPV4_SPECIAL_USE_RANGES, BLOCKED_IPV6_SPECIAL_USE_RANGES, RFC2544_BENCHMARK_PREFIX oraz obsługa osadzonych sentinel IPv4 dla NAT64, 6to4, Teredo, ISATAP i form IPv4-mapped. Te pliki są przydatnymi odniesieniami podczas utrzymywania zewnętrznej polityki proxy, ale OpenClaw nie eksportuje automatycznie ani nie egzekwuje tych reguł w Twoim proxy.
| Zakres lub host | Dlaczego blokować |
|---|---|
127.0.0.0/8, localhost, localhost.localdomain |
Pętla zwrotna IPv4 |
::1/128 |
Pętla zwrotna IPv6 |
0.0.0.0/8, ::/128 |
Adresy nieokreślone i adresy tej sieci |
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
Prywatne sieci RFC1918 |
169.254.0.0/16, fe80::/10 |
Adresy link-local i typowe ścieżki metadanych chmury |
169.254.169.254, metadata.google.internal |
Usługi metadanych chmury |
100.64.0.0/10 |
Współdzielona przestrzeń adresowa NAT klasy operatorskiej |
198.18.0.0/15, 2001:2::/48 |
Zakresy testów wydajnościowych |
192.0.0.0/24, 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32 |
Zakresy specjalnego użycia i dokumentacyjne |
224.0.0.0/4, ff00::/8 |
Multicast |
240.0.0.0/4 |
Zarezerwowane IPv4 |
fc00::/7, fec0::/10 |
Lokalne/prywatne zakresy IPv6 |
100::/64, 2001:20::/28 |
Zakresy odrzucania IPv6 i ORCHIDv2 |
64:ff9b::/96, 64:ff9b:1::/48 |
Prefiksy NAT64 z osadzonym IPv4 |
2002::/16, 2001::/32 |
6to4 i Teredo z osadzonym IPv4 |
::/96, ::ffff:0:0/96 |
IPv6 zgodne z IPv4 i IPv6 mapowane na IPv4 |
Jeśli Twój dostawca chmury lub platforma sieciowa dokumentuje dodatkowe hosty metadanych albo zarezerwowane zakresy, dodaj również je.
Walidacja
Zweryfikuj proxy z tego samego hosta, kontenera lub konta usługi, które uruchamia OpenClaw:
openclaw proxy validate --proxy-url http://127.0.0.1:3128
Domyślnie, gdy nie podano niestandardowych miejsc docelowych, polecenie sprawdza, czy https://example.com/ kończy się powodzeniem, i uruchamia tymczasowy znacznik testowy pętli zwrotnej, do którego proxy nie może dotrzeć. Domyślna kontrola odmowy przechodzi pomyślnie, gdy proxy zwraca odpowiedź odmowy inną niż 2xx albo blokuje znacznik testowy błędem transportu; kończy się niepowodzeniem, jeśli skuteczna odpowiedź dotrze do znacznika testowego. Jeśli żadne proxy nie jest włączone i skonfigurowane, walidacja zgłasza problem z konfiguracją; użyj --proxy-url do jednorazowej kontroli wstępnej przed zmianą konfiguracji. Użyj --allowed-url i --denied-url, aby przetestować oczekiwania specyficzne dla wdrożenia. Dodaj --apns-reachable, aby sprawdzić również, czy bezpośrednie dostarczanie APNs przez HTTP/2 może otworzyć tunel CONNECT przez proxy i odebrać odpowiedź z piaskownicy APNs; sonda używa celowo nieprawidłowego tokenu dostawcy, więc 403 InvalidProviderToken jest oczekiwane i liczy się jako osiągalność. Niestandardowe zabronione miejsca docelowe działają w trybie zamkniętym przy błędzie: każda odpowiedź HTTP oznacza, że miejsce docelowe było osiągalne przez proxy, a każdy błąd transportu jest raportowany jako nierozstrzygający, ponieważ OpenClaw nie może udowodnić, że proxy zablokowało osiągalne źródło. W przypadku niepowodzenia walidacji polecenie kończy działanie z kodem 1.
Użyj --json do automatyzacji. Dane wyjściowe JSON zawierają ogólny wynik, efektywne źródło konfiguracji proxy, wszelkie błędy konfiguracji oraz każdą kontrolę miejsca docelowego. Dane uwierzytelniające w URL proxy są redagowane w danych wyjściowych tekstowych i 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
}
]
}
Możesz też przeprowadzić walidację ręcznie za pomocą curl:
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/
Żądanie publiczne powinno zakończyć się powodzeniem. Żądania do pętli zwrotnej i metadanych powinny zostać zablokowane przez proxy. W przypadku openclaw proxy validate wbudowany znacznik testowy pętli zwrotnej potrafi odróżnić odmowę proxy od osiągalnego źródła. Niestandardowe kontrole --denied-url nie mają tego znacznika testowego, więc traktuj zarówno odpowiedzi HTTP, jak i niejednoznaczne awarie transportu jako niepowodzenia walidacji, chyba że twoje proxy udostępnia specyficzny dla wdrożenia sygnał odmowy, który możesz zweryfikować oddzielnie.
Następnie włącz routing proxy OpenClaw:
openclaw config set proxy.enabled true
openclaw config set proxy.proxyUrl http://127.0.0.1:3128
openclaw gateway run
lub ustaw:
proxy:
enabled: true
proxyUrl: http://127.0.0.1:3128
Ograniczenia
- Proxy poprawia pokrycie dla lokalnych dla procesu klientów HTTP i WebSocket w JavaScript, ale nie jest sieciową piaskownicą na poziomie systemu operacyjnego.
- Ruch płaszczyzny sterowania Gateway przez pętlę zwrotną domyślnie używa bezpośredniego lokalnego obejścia przez
proxy.loopbackMode: "gateway-only". OpenClaw implementuje to obejście, rejestrując aktywny autorytet pętli zwrotnej Gateway w zarządzanym kontrolerzeNO_PROXYglobal-agent. Operatorzy mogą ustawićproxy.loopbackMode: "proxy", aby wysyłać ruch Gateway przez pętlę zwrotną przez zarządzane proxy, alboproxy.loopbackMode: "block", aby odmawiać połączeń Gateway przez pętlę zwrotną. Zobacz Tryb pętli zwrotnej Gateway, aby poznać zastrzeżenie dotyczące zdalnego proxy. - Surowe gniazda
net,tlsihttp2, dodatki natywne oraz procesy podrzędne spoza OpenClaw mogą omijać routing proxy na poziomie Node, chyba że dziedziczą i respektują zmienne środowiskowe proxy. Rozwidlane podrzędne CLI OpenClaw dziedziczą zarządzany URL proxy oraz stanproxy.loopbackMode. - IRC jest surowym kanałem TCP/TLS poza routingiem przez zarządzane przez operatora proxy przekazujące. We wdrożeniach, które wymagają całego ruchu wychodzącego przez to proxy przekazujące, ustaw
channels.irc.enabled=false, chyba że bezpośredni ruch wychodzący IRC jest jawnie zatwierdzony. - Lokalne proxy debugowania jest narzędziem diagnostycznym, a jego bezpośrednie przekazywanie do źródła nadrzędnego dla żądań proxy i tuneli CONNECT jest domyślnie wyłączone, gdy aktywny jest tryb zarządzanego proxy; włącz bezpośrednie przekazywanie tylko dla zatwierdzonej diagnostyki lokalnej.
- Lokalne interfejsy WebUI użytkownika i lokalne serwery modeli powinny być w razie potrzeby dodane do listy dozwolonych w polityce proxy operatora; OpenClaw nie udostępnia dla nich ogólnego obejścia sieci lokalnej.
- Obejście proxy dla płaszczyzny sterowania Gateway jest celowo ograniczone do
localhosti dosłownych URL-i IP pętli zwrotnej. Użyjws://127.0.0.1:18789,ws://[::1]:18789lubws://localhost:18789dla lokalnych bezpośrednich połączeń z płaszczyzną sterowania Gateway; inne nazwy hostów są routowane jak zwykły ruch oparty na nazwie hosta. - OpenClaw nie sprawdza, nie testuje ani nie certyfikuje twojej polityki proxy.
- Traktuj zmiany polityki proxy jako wrażliwe pod względem bezpieczeństwa zmiany operacyjne.