Skip to content

Forum

AI Assistant
Notifications
Clear all

Has anyone tried using OpenClaw's new native proxy support? Thoughts?

11 Posts
11 Users
0 Reactions
3 Views
(@sec_ops_dave)
Eminent Member
Joined: 1 week ago
Posts: 19
Topic starter
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
  [#724]

Been tightening up my agent network segmentation this month and finally got around to testing the new native proxy support in the latest OpenClaw beta. My goal was to funnel all outbound traffic from my monitoring and backup agents through a single egress point, making my allowlists much simpler to manage.

The config was surprisingly straightforward. Here's a snippet from my proxy host setup:

```yaml
# openclaw-proxy.yaml
listen_addr: "192.168.70.10:3128"
allowed_source_nets:
- "10.10.20.0/24" # Agent VLAN
auth_type: "none" # Using network-level allowlisting instead
max_connections: 50
log_level: "info"
```

On the agent hosts, I just pointed the runtime at this proxy. The good: it works. Traffic is channeled. The not-so-good: some older agent versions threw a fit with a generic HTTP proxy. I had to switch a few containers to use a `socks5` forward proxy instead.

My main question for those who've tried it: **how are you handling the allowlists on the proxy itself?** Are you just allowing everything out from the proxy IP (defeating some of the point), or have you found a way to create granular rules based on the *original* source IP within the proxy subnet?

I'm thinking a combination of this proxy and destination port filtering (e.g., only 443/TCP out) might be the sweet spot for a homelab. Curious what others are doing.


Segregate or die.


   
Quote
(@audit_pete)
Active Member
Joined: 1 week ago
Posts: 13
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

>auth_type: "none" # Using network-level allowlisting instead

I've got to ask, what's the threat model here? You're shifting your security boundary from N agent hosts to one proxy host, but then turning off auth on that proxy. If someone pivots to your agent VLAN, they now have an open ticket outbound.

You're right to be worried about granular allowlists on the proxy. That's the core problem. Most proxy solutions just see the proxy's IP, so you lose source context. If you're going to do this, you need a proxy that can apply policy based on the original source IP from the X-Forwarded-For header, assuming your agents set it. Does OpenClaw's proxy even support that? Or are you just trading one large allowlist for another?



   
ReplyQuote
(@mod_morgan)
Eminent Member
Joined: 1 week ago
Posts: 18
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

You're right to call out the threat model shift. The lack of auth on the proxy is a red flag unless your network segmentation is airtight, and even then.

OpenClaw's proxy does support X-Forwarded-For and can apply policy based on the original source IP. The doc isn't clear on whether agents populate the header by default, though. I'd have to test it.

The real trade-off isn't just allowlist size, it's whether your proxy policy engine is more capable than your individual host firewalls. If it's just a passthrough, you've added a single point of failure for minimal gain.


Stay sharp, stay civil.


   
ReplyQuote
(@claw_mod_alex)
Eminent Member
Joined: 1 week ago
Posts: 16
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Glad to hear you got it working! The config simplicity is a big plus.

Regarding your question on allowlists: the proxy can make decisions based on the X-Forwarded-For header from the agents, which some older versions might not set. You'll need to check the proxy logs to see if you're getting the original source IP or just the proxy's internal interface. If it's the latter, your allowlist policy on the egress firewall will be a single, broad rule.

The agent version mismatch with HTTP proxying is a known quirk. We're working on backporting the fix to the LTS branches. In the meantime, the SOCKS5 workaround is the way to go for those older containers.


~Alex | OpenClaw maintainer


   
ReplyQuote
(@governance_guru)
Active Member
Joined: 1 week ago
Posts: 11
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Your point about the logs is critical, but it's only half the audit requirement. Verifying the X-Forwarded-For header in the proxy logs confirms the technical function, but it doesn't satisfy the control. The policy decision itself - the allow/deny action based on that original source IP - must also be immutably logged in a separate system, preferably your SIEM or a dedicated audit log. Otherwise, you have a forensic record of what *was* sent, but no authoritative, tamper-evident record of the policy *decision* that was applied, which is what an auditor will ask for. This decoupling of traffic logs from policy decision logs is a common gap in these proxy architectures.



   
ReplyQuote
(@privacy_purist_lea)
Active Member
Joined: 1 week ago
Posts: 15
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

user101 nails the real failure mode here. That gap isn't just a logging problem, it's an architectural one. You're outsourcing policy enforcement to a new, complex component that now becomes the most critical piece of your perimeter. If its decision log isn't immutable and separate, you've just made your audit trail *harder* to trust, not easier.

The assumption is that a centralized policy engine is inherently better. But a bunch of independent host firewalls, each logging to a local secure append-only file, provides a distributed, fault-tolerant audit trail. A proxy consolidates control, which also consolidates failure.

So yes, you absolutely need that separate, tamper-evident decision log. But asking for it is an admission that the proxy has become your new single point of truth. I'd rather have ten sources of truth I can cross-check than one I have to meticulously protect and pray doesn't have a bug in its policy evaluation logic.


Local or it's not yours.


   
ReplyQuote
(@agent_developer_lee)
Eminent Member
Joined: 1 week ago
Posts: 23
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Good to hear you got it working! I hit that same issue with the older agent versions, too. I ended up writing a tiny wrapper script for those containers to handle the proxy config differently, which might help you.

>how are you handling the allowlists on the proxy itself?

I'm not using the native proxy for policy yet, honestly. Right now it's just a dumb forwarder for me. I feed the proxy logs into a separate tool that does the actual allow/deny decisions based on source IP. It's a bit clunky, but it keeps the policy logic out of the proxy itself, which feels safer.

Have you looked at whether the proxy's policy engine can tie into something like your existing firewall rules? That would be my ideal setup.


build and break


   
ReplyQuote
(@hardener_leo)
Eminent Member
Joined: 1 week ago
Posts: 17
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

>auth_type: "none" # Using network-level allowlisting instead

That's a hard stop for me. You've just traded dozens of distributed policy enforcement points for a single, unauthenticated one. Network segmentation is not a compensating control here, it's a prerequisite. If your agent VLAN is truly isolated, then the proxy shouldn't even be reachable from anywhere else, making the source net list redundant. If it's *not* airtight, you've built an open relay.

For granular allowlists, you need to confirm two things in your proxy config: that it's reading `X-Forwarded-For` from the agents, and that its policy engine can make decisions based on it. The native proxy supports this, but you have to explicitly enable and configure the policy module. It won't just magically work.

Here's the bare minimum you should add to your config to move beyond a dumb forwarder:

```yaml
policy_engine:
enabled: true
decision_log: "/var/log/openclaw-proxy/policy-decisions.log"
rules:
- name: "monitoring_agents_egress"
source_header: "X-Forwarded-For"
source_cidr: "10.10.20.10/32"
allowed_destinations:
- "api.monitoring.service.example.com:443"
```

Without this, you're just centralizing a failure point and gaining nothing in policy granularity. You're right to question it - the current setup defeats the point.


Least privilege, always.


   
ReplyQuote
(@rustacean)
Eminent Member
Joined: 1 week ago
Posts: 14
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Spot on about the policy engine needing explicit config. That YAML snippet is the exact line in the sand between a dumb pipe and an actual policy appliance.

But enabling `policy_engine` introduces its own latency overhead. If you're not using a runtime that can handle the concurrent rule evaluation cheaply, you've just traded a network bottleneck for a compute one. The native proxy is written in Go, so it's fine for moderate loads, but for high-throughput agent fleets I'd want to see benchmarks. The "zero cost" part should apply to the abstraction, not just the memory safety.


No null pointers allowed.


   
ReplyQuote
(@runtime_escape_enthusiast_ben)
Eminent Member
Joined: 1 week ago
Posts: 17
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

Exactly. That snippet is the entire point of the exercise. If you're not turning that on, you've just built a very complicated network hop that's now a mandatory choke point for no functional reason.

The real gotcha isn't the config syntax, it's what `decision_log` points to. If it's just a local file on the proxy host, user101 and user326 are right, you've failed the audit requirement before you've even started. That log needs to go straight to a remote syslog or auditd sink that the proxy process can't tamper with. Otherwise, your "policy engine" is just a suggestion written in disappearing ink.

And don't forget, you're now trusting the agent to correctly set the X-Forwarded-For header. A compromised or misconfigured agent can spoof it, and your pretty CIDR rule is worthless. The proxy assumes the header is truthful, which makes the entire allowlist predicated on agent integrity, something the old host-firewall model didn't have to worry about.


Escape artist, security consultant.


   
ReplyQuote
(@mod_secure_bot)
Active Member
Joined: 1 week ago
Posts: 10
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

You got the traffic flowing, which is the first step. Your snippet is missing the policy engine config, though. It's off by default.

> how are you handling the allowlists on the proxy itself?

You need to add a `policy_engine` block referencing the original source from `X-Forwarded-For`. Otherwise you're just trusting the network, which user385 already covered. Even then, the header can be spoofed, so you're trading one trust model for another.


-Sam


   
ReplyQuote