Security
Netwerkproxy
OpenClaw kan runtime-HTTP- en WebSocket-verkeer routeren via een door de operator beheerde forward proxy. Dit is optionele defense in depth voor deployments die centrale egress-controle, sterkere SSRF-bescherming en betere controleerbaarheid van het netwerk willen.
OpenClaw levert, downloadt, start, configureert of certificeert geen proxy. Je gebruikt de proxytechnologie die bij je omgeving past, en OpenClaw routeert normale proceslokale HTTP- en WebSocket-clients erdoorheen.
Waarom een proxy gebruiken
Een proxy geeft operators één netwerkcontrolepunt voor uitgaand HTTP- en WebSocket-verkeer. Dat kan ook buiten SSRF-hardening nuttig zijn:
- Centraal beleid: onderhoud één egress-beleid in plaats van erop te vertrouwen dat elke HTTP-callsite van de applicatie de netwerkregels goed toepast.
- Controles tijdens verbinden: beoordeel de bestemming na DNS-resolutie en direct voordat de proxy de upstreamverbinding opent.
- Verdediging tegen DNS-rebinding: verklein het gat tussen een DNS-controle op applicatieniveau en de daadwerkelijke uitgaande verbinding.
- Bredere JavaScript-dekking: routeer gewone
fetch,node:http,node:https, WebSocket, axios, got, node-fetch en vergelijkbare clients via hetzelfde pad. - Controleerbaarheid: log toegestane en geweigerde bestemmingen aan de egress-grens.
- Operationele controle: dwing bestemmingsregels, netwerksegmentatie, snelheidslimieten of uitgaande allowlists af zonder OpenClaw opnieuw te bouwen.
Proxyroutering is een procesniveau-guardrail voor normale HTTP- en WebSocket-egress. Het geeft operators een fail-closed pad om ondersteunde JavaScript-HTTP-clients via hun eigen filterproxy te routeren, maar het is geen netwerk-sandbox op OS-niveau en laat OpenClaw het bestemmingsbeleid van de proxy niet certificeren.
Hoe OpenClaw verkeer routeert
Wanneer proxy.enabled=true en een proxy-URL is geconfigureerd, routeren beschermde runtimeprocessen zoals openclaw gateway run, openclaw node run en openclaw agent --local normale HTTP- en WebSocket-egress via de geconfigureerde 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
Het openbare contract is het routeringsgedrag, niet de interne Node-hooks die worden gebruikt om het te implementeren. OpenClaw Gateway control-plane WebSocket-clients gebruiken een smal direct pad voor local loopback Gateway RPC-verkeer wanneer de Gateway-URL localhost of een letterlijk loopback-IP zoals 127.0.0.1 of [::1] gebruikt. Dat control-plane-pad moet loopback-Gateways kunnen bereiken, zelfs wanneer de operatorproxy loopbackbestemmingen blokkeert. Normale runtime-HTTP- en WebSocket-verzoeken gebruiken nog steeds de geconfigureerde proxy.
Intern gebruikt OpenClaw twee routeringshooks op procesniveau voor deze functie:
- Undici-dispatcherroutering dekt
fetch, clients op basis van undici en transports die hun eigen undici-dispatcher leveren. global-agent-routering dekt Node core-aanroepers vannode:httpennode:https, waaronder veel bibliotheken die bovenophttp.request,https.request,http.getenhttps.getzijn gebouwd. Beheerde proxymodus forceert die globale agent zodat expliciete Node HTTP-agents de operatorproxy niet per ongeluk omzeilen.
Sommige plugins bezitten aangepaste transports die expliciete proxybedrading nodig hebben, zelfs wanneer routering op procesniveau bestaat. De Bot API-transportlaag van Telegram gebruikt bijvoorbeeld zijn eigen HTTP/1-undici-dispatcher en respecteert daarom de procesproxy-env plus de beheerde OPENCLAW_PROXY_URL-fallback in dat eigenaarspecifieke transportpad.
De proxy-URL zelf moet http:// gebruiken. HTTPS-bestemmingen worden nog steeds ondersteund via de proxy met HTTP CONNECT; dit betekent alleen dat OpenClaw een gewone HTTP-forward-proxylistener verwacht, zoals http://127.0.0.1:3128.
Terwijl de proxy actief is, wist OpenClaw no_proxy, NO_PROXY en GLOBAL_AGENT_NO_PROXY. Die bypasslijsten zijn gebaseerd op bestemming, dus als localhost of 127.0.0.1 daarin blijft staan, zouden risicovolle SSRF-doelen de filterproxy kunnen overslaan.
Bij afsluiten herstelt OpenClaw de eerdere proxyomgeving en reset het gecachte procesrouteringsstatus.
Gerelateerde proxytermen
proxy.enabled/proxy.proxyUrl: uitgaande forward-proxyroutering voor OpenClaw runtime-egress. Deze pagina documenteert die functie.gateway.auth.mode: "trusted-proxy": inkomende identiteitsbewuste reverse-proxy-authenticatie voor Gateway-toegang. Zie Vertrouwde-proxy-authenticatie.openclaw proxy: lokale debugproxy en capture-inspector voor ontwikkeling en support. Zie openclaw proxy.tools.web.fetch.useTrustedEnvProxy: opt-in voorweb_fetchom een door de operator gecontroleerde HTTP(S)-env-proxy DNS te laten oplossen, terwijl standaard strikte DNS-pinning en hostnaambelied behouden blijven. Zie Web fetch.- Kanaal- of providerspecifieke proxyinstellingen: eigenaarspecifieke overrides voor een bepaalde transportlaag. Geef de voorkeur aan de beheerde netwerkproxy wanneer het doel centrale egress-controle over de runtime is.
Configuratie
proxy:
enabled: true
proxyUrl: http://127.0.0.1:3128
Je kunt de URL ook via de omgeving opgeven, terwijl proxy.enabled=true in de configuratie blijft staan:
OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run
proxy.proxyUrl heeft voorrang op OPENCLAW_PROXY_URL.
Gateway Loopback-modus
Lokale Gateway control-plane-clients verbinden meestal met een loopback-WebSocket zoals ws://127.0.0.1:18789. Gebruik proxy.loopbackMode om te kiezen hoe dat verkeer zich gedraagt terwijl de beheerde proxy actief is:
proxy:
enabled: true
proxyUrl: http://127.0.0.1:3128
loopbackMode: gateway-only # gateway-only, proxy, or block
gateway-only(standaard): OpenClaw registreert de Gateway-loopback-authority in de actieveglobal-agentNO_PROXY-controller, zodat lokaal Gateway-WebSocket-verkeer direct kan verbinden. Aangepaste loopback-Gateway-poorten werken omdat de host en poort van de actieve Gateway-URL worden geregistreerd.proxy: OpenClaw registreert geen Gateway-loopback-NO_PROXY-authority, dus lokaal Gateway-verkeer wordt via de beheerde proxy verzonden. Als de proxy extern is, moet deze speciale routering bieden voor de loopbackservice van de OpenClaw-host, zoals mapping naar een door de proxy bereikbare hostnaam, IP of tunnel. Standaard externe proxy's lossen127.0.0.1enlocalhostop vanaf de proxyhost, niet vanaf de OpenClaw-host.block: OpenClaw weigert loopback-Gateway-control-plane-verbindingen voordat een socket wordt geopend.
Als enabled=true maar er geen geldige proxy-URL is geconfigureerd, mislukken beschermde opdrachten tijdens het opstarten in plaats van terug te vallen op directe netwerktoegang.
Voor beheerde gatewayservices die met openclaw gateway start worden gestart, heeft het de voorkeur de URL in de configuratie op te slaan:
openclaw config set proxy.enabled true
openclaw config set proxy.proxyUrl http://127.0.0.1:3128
openclaw gateway install --force
openclaw gateway start
De omgevingsfallback is het meest geschikt voor voorgronduitvoeringen. Als je deze gebruikt met een geïnstalleerde service, plaats OPENCLAW_PROXY_URL dan in de duurzame omgeving van de service, zoals $OPENCLAW_STATE_DIR/.env of ~/.openclaw/.env, en installeer de service daarna opnieuw zodat launchd, systemd of Scheduled Tasks de gateway met die waarde start.
Voor openclaw --container ...-opdrachten geeft OpenClaw OPENCLAW_PROXY_URL door aan de child CLI die op de container is gericht wanneer deze is ingesteld. De URL moet bereikbaar zijn vanuit de container; 127.0.0.1 verwijst naar de container zelf, niet naar de host. OpenClaw weigert loopback-proxy-URL's voor containergerichte opdrachten, tenzij je die veiligheidscontrole expliciet overschrijft.
Proxyvereisten
Het proxybeleid is de beveiligingsgrens. OpenClaw kan niet verifiëren dat de proxy de juiste doelen blokkeert.
Configureer de proxy om:
- Alleen te binden aan loopback of een vertrouwde privé-interface.
- Toegang te beperken zodat alleen het OpenClaw-proces, de host, container of serviceaccount deze kan gebruiken.
- Bestemmingen zelf op te lossen en bestemmings-IP's na DNS-resolutie te blokkeren.
- Beleid toe te passen tijdens het verbinden voor zowel gewone HTTP-verzoeken als HTTPS-
CONNECT-tunnels. - Bestemmingsgebaseerde bypasses te weigeren voor loopback-, privé-, link-local-, metadata-, multicast-, gereserveerde of documentatiereeksen.
- Hostnaam-allowlists te vermijden tenzij je het DNS-resolutiepad volledig vertrouwt.
- Bestemming, beslissing, status en reden te loggen zonder request bodies, autorisatieheaders, cookies of andere geheimen te loggen.
- Proxybeleid onder versiebeheer te houden en wijzigingen te beoordelen als beveiligingsgevoelige configuratie.
Aanbevolen geblokkeerde bestemmingen
Gebruik deze denylist als startpunt voor elk forward proxy-, firewall- of egress-beleid.
De classifierlogica op OpenClaw-applicatieniveau staat in src/infra/net/ssrf.ts en src/shared/net/ip.ts. De relevante parity-hooks zijn BLOCKED_HOSTNAMES, BLOCKED_IPV4_SPECIAL_USE_RANGES, BLOCKED_IPV6_SPECIAL_USE_RANGES, RFC2544_BENCHMARK_PREFIX en de verwerking van ingebedde IPv4-sentinels voor NAT64, 6to4, Teredo, ISATAP en IPv4-mapped vormen. Die bestanden zijn nuttige referenties bij het onderhouden van extern proxybeleid, maar OpenClaw exporteert of handhaaft die regels niet automatisch in je proxy.
| Bereik of host | Waarom blokkeren |
|---|---|
127.0.0.0/8, localhost, localhost.localdomain |
IPv4-loopback |
::1/128 |
IPv6-loopback |
0.0.0.0/8, ::/128 |
Niet-gespecificeerde en this-network-adressen |
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 |
RFC1918-privénetwerken |
169.254.0.0/16, fe80::/10 |
Link-local-adressen en gangbare cloudmetadatapaden |
169.254.169.254, metadata.google.internal |
Cloudmetadataservices |
100.64.0.0/10 |
Gedeelde adresruimte voor carrier-grade NAT |
198.18.0.0/15, 2001:2::/48 |
Benchmarkingreeksen |
192.0.0.0/24, 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24, 2001:db8::/32 |
Reeksen voor speciaal gebruik en documentatie |
224.0.0.0/4, ff00::/8 |
Multicast |
240.0.0.0/4 |
Gereserveerde IPv4 |
fc00::/7, fec0::/10 |
Lokale/privé-IPv6-reeksen |
100::/64, 2001:20::/28 |
IPv6-discard- en ORCHIDv2-reeksen |
64:ff9b::/96, 64:ff9b:1::/48 |
NAT64-prefixen met ingebedde IPv4 |
2002::/16, 2001::/32 |
6to4 en Teredo met ingebedde IPv4 |
::/96, ::ffff:0:0/96 |
IPv4-compatibele en IPv4-mapped IPv6 |
Als je cloudprovider of netwerkplatform aanvullende metadatahosts of gereserveerde reeksen documenteert, voeg die dan ook toe.
Validatie
Valideer de proxy vanaf dezelfde host, container of serviceaccount waarop OpenClaw draait:
openclaw proxy validate --proxy-url http://127.0.0.1:3128
Standaard controleert de opdracht, wanneer er geen aangepaste bestemmingen zijn opgegeven, of https://example.com/ slaagt en start deze een tijdelijke loopback-canary die de proxy niet mag bereiken. De standaard geweigerde controle slaagt wanneer de proxy een niet-2xx-weigeringsrespons retourneert of de canary blokkeert met een transportfout; de controle mislukt als een succesvolle respons de canary bereikt. Als er geen proxy is ingeschakeld en geconfigureerd, meldt de validatie een configuratieprobleem; gebruik --proxy-url voor een eenmalige preflight voordat je de configuratie wijzigt. Gebruik --allowed-url en --denied-url om implementatiespecifieke verwachtingen te testen. Voeg --apns-reachable toe om ook te verifiëren dat directe APNs HTTP/2-levering een CONNECT-tunnel via de proxy kan openen en een sandbox-APNs-respons kan ontvangen; de probe gebruikt opzettelijk een ongeldig providertoken, dus 403 InvalidProviderToken wordt verwacht en telt als bereikbaar. Aangepaste geweigerde bestemmingen zijn fail-closed: elke HTTP-respons betekent dat de bestemming via de proxy bereikbaar was, en elke transportfout wordt als onbeslist gerapporteerd omdat OpenClaw niet kan bewijzen dat de proxy een bereikbare origin heeft geblokkeerd. Bij een validatiefout sluit de opdracht af met code 1.
Gebruik --json voor automatisering. De JSON-uitvoer bevat het algehele resultaat, de effectieve bron van de proxyconfiguratie, eventuele configuratiefouten en elke bestemmingscontrole. Proxy-URL-referenties worden geredigeerd in tekst- en JSON-uitvoer:
{
"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
}
]
}
Je kunt ook handmatig valideren met 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/
De openbare aanvraag zou moeten slagen. De loopback- en metadata-aanvragen zouden door de proxy moeten worden geblokkeerd. Voor openclaw proxy validate kan de ingebouwde loopback-canary een proxyweigering onderscheiden van een bereikbare origin. Aangepaste --denied-url-controles hebben die canary niet, dus behandel zowel HTTP-responsen als dubbelzinnige transportfouten als validatiefouten, tenzij je proxy een implementatiespecifiek weigeringssignaal blootlegt dat je afzonderlijk kunt verifiëren.
Schakel vervolgens OpenClaw-proxyrouting in:
openclaw config set proxy.enabled true
openclaw config set proxy.proxyUrl http://127.0.0.1:3128
openclaw gateway run
of stel in:
proxy:
enabled: true
proxyUrl: http://127.0.0.1:3128
Limieten
- De proxy verbetert de dekking voor proceslokale JavaScript-HTTP- en WebSocket-clients, maar is geen netwerksandbox op OS-niveau.
- Gateway-loopback-control-plane-verkeer gaat standaard via een directe lokale bypass met
proxy.loopbackMode: "gateway-only". OpenClaw implementeert die bypass door de actieve Gateway-loopback-authority te registreren in de beheerdeglobal-agentNO_PROXY-controller. Operators kunnenproxy.loopbackMode: "proxy"instellen om Gateway-loopback-verkeer via de beheerde proxy te sturen, ofproxy.loopbackMode: "block"om loopback-Gateway-verbindingen te weigeren. Zie Gateway-loopbackmodus voor de kanttekening over externe proxy's. - Ruwe
net-,tls- enhttp2-sockets, native addons en niet-OpenClaw-childprocessen kunnen proxy-routing op Node-niveau omzeilen, tenzij ze proxy-omgevingsvariabelen overnemen en respecteren. Geforkte OpenClaw-child-CLI's nemen de beheerde proxy-URL en de status vanproxy.loopbackModeover. - IRC is een ruw TCP/TLS-kanaal buiten door operators beheerde forward-proxy-routing. Stel in implementaties die vereisen dat alle egress via die forward-proxy verloopt
channels.irc.enabled=falsein, tenzij directe IRC-egress expliciet is goedgekeurd. - De lokale debugproxy is diagnostische tooling en de directe upstream-forwarding voor proxy-aanvragen en CONNECT-tunnels is standaard uitgeschakeld terwijl de beheerde proxymodus actief is; schakel directe forwarding alleen in voor goedgekeurde lokale diagnostiek.
- Lokale WebUI's van gebruikers en lokale modelservers moeten waar nodig worden toegestaan in het proxybeleid van de operator; OpenClaw stelt geen algemene bypass voor het lokale netwerk voor hen beschikbaar.
- Bypass van de Gateway-control-plane-proxy is bewust beperkt tot
localhosten letterlijke loopback-IP-URL's. Gebruikws://127.0.0.1:18789,ws://[::1]:18789ofws://localhost:18789voor lokale directe Gateway-control-plane-verbindingen; andere hostnamen worden gerouteerd zoals normaal hostnaamgebaseerd verkeer. - OpenClaw inspecteert, test of certificeert je proxybeleid niet.
- Behandel wijzigingen in proxybeleid als beveiligingsgevoelige operationele wijzigingen.