Skip to content

fix: enable Squid intercept mode for NAT-redirected traffic#520

Merged
Mossaka merged 2 commits intomainfrom
fix/squid-intercept-port
Feb 5, 2026
Merged

fix: enable Squid intercept mode for NAT-redirected traffic#520
Mossaka merged 2 commits intomainfrom
fix/squid-intercept-port

Conversation

@Mossaka
Copy link
Collaborator

@Mossaka Mossaka commented Feb 5, 2026

Summary

When traffic is NAT'd (DNAT) to Squid proxy, clients send relative URLs (GET /path) because they don't know they're talking to a proxy. Squid's normal proxy mode requires absolute URLs (GET http://example.com/path), causing "Invalid URL - Missing hostname" errors.

This is the root cause of Codex smoke test failures - the rmcp client's OAuth discovery requests get NAT'd to Squid but fail because Squid can't process the relative URL.

Changes

  • Add interceptPort to SquidConfig interface for transparent proxy traffic
  • Configure Squid with http_port 3129 intercept for NAT'd traffic
  • Update iptables rules to redirect to intercept port (3129) not regular port (3128)
  • Keep regular port (3128) for explicit proxy usage via HTTP_PROXY

How it works

Port Mode Used For
3128 Normal proxy Explicit proxy (HTTP_PROXY env var) - expects absolute URLs
3129 Intercept NAT/DNAT redirected traffic - handles relative URLs via Host header

Test plan

  • Unit tests pass (121 tests in squid-config.test.ts)
  • New tests for intercept port configuration
  • Integration testing with Codex smoke tests after release

Related

🤖 Generated with Claude Code

When traffic is NAT'd (DNAT) to Squid proxy, clients send relative URLs
(GET /path) because they don't know they're talking to a proxy. Squid's
normal proxy mode requires absolute URLs (GET http://example.com/path),
causing "Invalid URL - Missing hostname" errors.

This fix:
- Adds interceptPort to SquidConfig for transparent proxy traffic
- Configures Squid with `http_port 3129 intercept` for NAT'd traffic
- Updates iptables rules to redirect to intercept port (3129) not
  regular port (3128)
- Keeps regular port (3128) for explicit proxy usage via HTTP_PROXY

This fixes Codex/rmcp OAuth discovery timeouts - requests now reach
the MCP gateway instead of being blocked by Squid.

Fixes #519

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings February 5, 2026 03:56
@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Chroot tests failed Smoke Chroot failed - See logs for details.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 82.08% 82.10% 📈 +0.02%
Statements 82.12% 82.14% 📈 +0.02%
Functions 81.95% 81.95% ➡️ +0.00%
Branches 75.41% 75.44% 📈 +0.03%
📁 Per-file Coverage Changes (1 files)
File Lines (Before → After) Statements (Before → After)
src/squid-config.ts 95.1% → 95.2% (+0.06%) 95.2% → 95.2% (+0.05%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

All C++ projects configured and built successfully.

AI generated by Build Test C++

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

All Deno tests passed successfully.

AI generated by Build Test Deno

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Node.js Build Test Results

Project Install Tests Status
clsx PASS PASS
execa PASS PASS
p-limit PASS PASS

Overall: PASS

All Node.js projects built and tested successfully.

AI generated by Build Test Node.js

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Go Build Test Results

Project Download Tests Status
color 1/1 PASS
env 1/1 PASS
uuid 1/1 PASS

Overall: PASS

All Go projects successfully downloaded dependencies and passed their tests.

AI generated by Build Test Go

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Smoke Test Results

✅ GitHub MCP: #515 feat: add AWF agent skill for Claude Code agents, #514 fix: add auth and error handling to build-test workflows
✅ Playwright: GitHub page title verified
✅ File Writing: Test file created successfully
✅ Bash Tool: File verified with cat

Status: PASS

cc: @Mossaka @Copilot

AI generated by Smoke Copilot

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Build Test: Bun - FAILED ❌

Project Install Tests Status
elysia ⚠️ 0/0 FAIL
hono ⚠️ 0/0 FAIL

Overall: FAIL

Error Details

Both projects encountered critical runtime failures:

elysia:

  • Install: error: An internal error occurred (NotDir)
  • Test: bun test v1.3.8 (b64edcb4) Aborted (core dumped) (exit code 134)

hono:

  • Install: error: An internal error occurred (NotDir)
  • Test: bun test v1.3.8 (b64edcb4) Aborted (core dumped) (exit code 134)

Root Cause: Bun runtime is crashing with core dumps on this environment (GitHub Actions runner). This appears to be an environment compatibility issue with Bun v1.3.8.

Action Required: This test cannot pass until the Bun runtime stability issue is resolved.

AI generated by Build Test Bun

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Smoke Test Results - Claude Engine

✅ GitHub MCP - Last 2 merged PRs:

✅ Playwright - GitHub homepage title verified

✅ File Writing - Created /tmp/gh-aw/agent/smoke-test-claude-21698153401.txt

✅ Bash Tool - File read successful

Status: PASS

AI generated by Smoke Claude

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a critical bug where HTTP traffic redirected via iptables NAT (DNAT) to the Squid proxy fails with "Invalid URL - Missing hostname" errors. The root cause is that NAT-redirected clients send relative URLs (e.g., GET /path) because they don't know they're talking to a proxy, but Squid's normal proxy mode requires absolute URLs (e.g., GET http://example.com/path).

Changes:

  • Added interceptPort field to SquidConfig interface for transparent proxy traffic handling
  • Configured Squid with separate intercept port (3129) using http_port 3129 intercept directive
  • Updated iptables rules to redirect NAT traffic to the intercept port instead of the regular proxy port
  • Added test coverage for the new intercept port configuration

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/types.ts Added interceptPort optional field to SquidConfig interface with comprehensive documentation
src/squid-config.ts Added intercept port configuration to Squid config generation with explanatory comments
src/squid-config.test.ts Added tests verifying intercept port is included when specified and excluded when not
src/docker-manager.ts Passed SQUID_INTERCEPT_PORT constant to Squid config generation
containers/agent/setup-iptables.sh Updated NAT redirection rules to use intercept port for transparent proxy traffic

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +418 to +420
if (interceptPort) {
portConfig += `\nhttp_port ${interceptPort} intercept`;
}
Copy link

Copilot AI Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When SSL Bump is enabled, the intercept port configuration added here will be ignored. On line 436 (visible in surrounding context), portConfig is set to empty string when sslBump is enabled, and the SSL Bump section uses a hardcoded port configuration.

The generateSslBumpSection function (called on line 428-434) hardcodes "http_port 3128 ssl-bump" and doesn't receive the port or interceptPort parameters. This means NAT-redirected traffic will fail with "Invalid URL - Missing hostname" errors when SSL Bump is enabled, which is the exact issue this PR is trying to fix.

To fix this, generateSslBumpSection needs to be updated to:

  1. Accept port and interceptPort parameters
  2. Generate both "http_port [port] ssl-bump" and "http_port [interceptPort] ssl-bump intercept" configurations when interceptPort is provided

Without this fix, SSL Bump mode will continue to experience the NAT redirect failures described in issue #519.

Copilot uses AI. Check for mistakes.
Comment on lines +1124 to +1143
it('should add intercept port when specified', () => {
const config: SquidConfig = {
domains: ['github.com'],
port: 3128,
interceptPort: 3129,
};
const result = generateSquidConfig(config);
expect(result).toContain('http_port 3128');
expect(result).toContain('http_port 3129 intercept');
});

it('should not add intercept port when not specified', () => {
const config: SquidConfig = {
domains: ['github.com'],
port: 3128,
};
const result = generateSquidConfig(config);
expect(result).toContain('http_port 3128');
expect(result).not.toContain('intercept');
});
Copy link

Copilot AI Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new tests for intercept port are placed inside the "SSL Bump Mode" describe block, but they don't actually test the combination of SSL Bump with intercept port. This misses the critical bug where SSL Bump ignores the intercept port configuration.

Add a test that verifies intercept port works with SSL Bump enabled:

  • Config with sslBump: true, interceptPort: 3129
  • Expected: both "http_port 3128 ssl-bump" and "http_port 3129 ssl-bump intercept" in output

This test would catch the bug where generateSslBumpSection doesn't support intercept port.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

❌ Build Test: Java - FAILED

Status: ENVIRONMENT FAILURE

Error

Cannot execute Java tests due to corrupted GitHub Actions runner environment. All Java binaries (across multiple installations) are being executed as bash instead of Java.

Details

Project Compile Tests Status
gson FAILED - Java not executable
caffeine FAILED - Java not executable

Overall: FAIL

Diagnostic Output

$ java -version
GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)

All Java installations tested:

  • /opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/21.0.10-7/x64/bin/java
  • /usr/lib/jvm/temurin-17-jdk-amd64/bin/java
  • /usr/lib/jvm/temurin-21-jdk-amd64/bin/java

Recommendation

This workflow needs to be re-run on a fresh GitHub Actions runner with a functional Java environment.

AI generated by Build Test Java

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: PASS ✅

All Rust projects built successfully and all tests passed.

AI generated by Build Test Rust

Copy link
Collaborator Author

@Mossaka Mossaka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review: Add Squid Intercept Mode for NAT-Redirected Traffic

Summary

This PR adds a second port (3129) to Squid in "intercept" mode to handle NAT-redirected (transparent proxy) traffic. The change addresses the root cause of Codex smoke test failures where clients sending relative URLs (GET /path) were being rejected by Squid's normal proxy mode which expects absolute URLs (GET http://example.com/path).

Files Reviewed

  1. src/types.ts - New interceptPort field in SquidConfig interface
  2. src/squid-config.ts - Squid configuration generation with intercept port
  3. src/squid-config.test.ts - Unit tests for the new functionality
  4. src/docker-manager.ts - Docker compose configuration updates
  5. containers/agent/setup-iptables.sh - iptables NAT rule updates

Correctness

The implementation follows Squid best practices. The approach of using separate ports for explicit proxy (3128) vs transparent intercept (3129) is the correct pattern. Key observations:

  • The http_port 3129 intercept directive is the standard way to handle NAT-redirected traffic in Squid
  • The iptables DNAT rules correctly redirect to the intercept port
  • The regular port (3128) continues to work for explicit proxy usage via HTTP_PROXY/HTTPS_PROXY environment variables

Potential Issues

1. SSL Bump Mode Missing Intercept Port (Medium Severity)

When sslBump is enabled, generateSslBumpSection() generates its own port configuration with just http_port 3128 ssl-bump ..., and then portConfig is set to empty string (line 436). This means the intercept port (3129) is not added when SSL Bump is enabled.

if (sslBump && caFiles && sslDbPath) {
    sslBumpSection = generateSslBumpSection(...);
    // SSL Bump section includes its own port config, so use that instead
    portConfig = '';  // <-- interceptPort is lost here
}

If users enable SSL Bump with NAT-redirected traffic, they would still see the "Invalid URL" errors.

Suggestion: Consider passing interceptPort to generateSslBumpSection() and adding an intercept port there as well:

http_port 3129 intercept ssl-bump cert=... key=...

2. Healthcheck Only Checks Port 3128

The Docker healthcheck in docker-manager.ts (line 270) only verifies port 3128:

healthcheck: {
  test: ['CMD', 'nc', '-z', 'localhost', '3128'],
  ...
}

If the intercept port (3129) fails to start but 3128 succeeds, the container will be marked healthy even though transparent proxying won't work.

Suggestion: Consider checking both ports, e.g.:

test: ['CMD', 'sh', '-c', 'nc -z localhost 3128 && nc -z localhost 3129'],

Edge Cases

Handled Well:

  • Default value for SQUID_INTERCEPT_PORT (3129) in both shell script and TypeScript
  • The interceptPort is optional, so existing configurations without it continue to work
  • Port range handling in iptables correctly uses the intercept port

Edge Case Question:

  • What happens if someone manually sets interceptPort to the same value as port? The Squid config would have duplicate port definitions. Consider adding validation if this is a concern.

Security Considerations

No security concerns identified. The intercept mode itself is not a security issue - it's simply a different way for Squid to accept incoming connections. The domain ACLs and access controls still apply regardless of which port receives the traffic.

The port 3129 is correctly exposed only to the internal Docker network via the compose configuration, not to the host.


Test Coverage

The unit tests added are appropriate:

  • Test that intercept port is added when specified
  • Test that intercept port is not added when not specified

Suggestions for additional coverage:

  • Consider adding an integration test that verifies NAT-redirected traffic works (e.g., a curl command without HTTP_PROXY set that gets transparently proxied)
  • The integration tests currently don't have any intercept keyword - might be worth adding a test case

Documentation

The code is well-documented:

  • Clear JSDoc comments in types.ts explaining when to use each port
  • Good inline comments in setup-iptables.sh explaining the difference between regular and intercept ports
  • Comments in squid-config.ts explaining the two port modes

Overall Assessment

This PR correctly addresses the root cause of Codex smoke test failures. The implementation is sound and follows Squid best practices. The main concerns are:

  1. Must address: SSL Bump mode doesn't include the intercept port - this could cause issues for users who enable SSL Bump
  2. Nice to have: Healthcheck could verify both ports
  3. Nice to have: Consider additional integration test coverage

The PR is approvable with the SSL Bump concern addressed, or can be merged as-is if SSL Bump + transparent proxy is not a supported configuration.

1. Add intercept port (3129) to SSL Bump section: When SSL Bump was
   enabled, the generateSslBumpSection() function generated its own
   port config but did not include the intercept port needed for
   NAT-redirected transparent proxy traffic.

2. Update healthcheck to verify both ports: The Docker healthcheck
   only verified port 3128, not ensuring port 3129 was also working.
   Now checks both ports to ensure complete Squid proxy functionality.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Chroot tests failed Smoke Chroot failed - See logs for details.

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

All C++ projects built successfully.

AI generated by Build Test C++

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

All Deno tests completed successfully.

AI generated by Build Test Deno

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Build Test: Node.js - Results

Project Install Tests Status
clsx PASS PASS
execa PASS PASS
p-limit PASS PASS

Overall: PASS

All Node.js build tests completed successfully.

AI generated by Build Test Node.js

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Smoke Test Results

Last 2 Merged PRs:

Test Results:

  • ✅ GitHub MCP (list PRs)
  • ✅ Playwright (github.com title verified)
  • ✅ File creation (smoke-test-copilot-21722898246.txt)
  • ✅ Bash verification

Status: PASS

cc @Mossaka

AI generated by Smoke Copilot

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Go Build Test Results

Project Download Tests Status
color 1/1 PASS
env 1/1 PASS
uuid 1/1 PASS

Overall: PASS

All Go projects built and tested successfully.

AI generated by Build Test Go

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Smoke Test Results (Claude)

Last 2 merged PRs:

  • [docs] docs: add --skip-pull flag documentation
  • feat: add AWF agent skill for Claude Code agents

✅ GitHub MCP (list PRs)
✅ Playwright (navigated to GitHub, title verified)
✅ File writing (created test file)
✅ Bash tool (read file back successfully)

Status: PASS

AI generated by Smoke Claude

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Build Test: Bun - FAIL ❌

Bun installation completed successfully (v1.3.8), but the test runner crashes in the GitHub Actions environment.

Project Install Tests Status
elysia ⚠️ N/A 0/0 FAIL
hono ⚠️ N/A 0/0 FAIL

Overall: FAIL

Error Details

Both projects failed with the same error:

bun test v1.3.8 (b64edcb4)
Aborted (core dumped)

The bun test command crashes immediately in the GitHub Actions runner environment. This appears to be a compatibility issue between Bun v1.3.8 and the runner's system configuration (missing /proc/cpuinfo was noted during installation).

Next Steps

  • This may require investigating Bun's compatibility with GitHub Actions runners
  • Alternative: Consider testing with a different Bun version or using a container-based approach

AI generated by Build Test Bun

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Security Review: Critical HTTPS Bypass Vulnerability

🔴 CRITICAL: SSL Bump Bypass on Intercept Port

This PR introduces a critical security vulnerability that allows HTTPS traffic to bypass domain filtering when SSL Bump mode is enabled.

Issue Details

File: src/squid-config.ts
Lines: 151-161 (in generateSslBumpSection())

Problem: The intercept port (3129) lacks the ssl-bump directive, meaning it cannot decrypt and inspect HTTPS traffic.

Current Configuration (VULNERABLE):

# Port 3128 - has SSL bump enabled ✓
http_port 3128 ssl-bump \
  cert=${caFiles.certPath} \
  key=${caFiles.keyPath} \
  generate-host-certificates=on \
  dynamic_cert_mem_cache_size=16MB \
  options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1

# Port 3129 - NO SSL bump! ✗
http_port 3129 intercept

Attack Vector

When SSL Bump mode is enabled:

  1. iptables redirects HTTPS traffic (port 443) → Squid intercept port 3129 (see containers/agent/setup-iptables.sh:167)
  2. Squid receives HTTPS CONNECT requests on port 3129
  3. Port 3129 has NO ssl-bump directive, so Squid cannot decrypt the TLS connection
  4. Domain filtering is bypassed because Squid can only see the SNI hostname in plaintext, but cannot inspect the actual HTTP requests or enforce URL-based policies
  5. Result: Attackers can access ANY domain over HTTPS by simply making CONNECT requests

Impact

  • Severity: CRITICAL
  • Affected Mode: SSL Bump mode (--ssl-bump flag)
  • Bypass Type: Complete HTTPS domain filtering bypass
  • Confidentiality: High - allows exfiltration of data to arbitrary domains
  • Integrity: High - allows downloading malicious content from any domain

Required Fix

The intercept port MUST have ssl-bump enabled when SSL Bump mode is active. Update line 161 in src/squid-config.ts:

Vulnerable (current):

http_port 3129 intercept

Secure (required):

http_port 3129 intercept ssl-bump \
  cert=${caFiles.certPath} \
  key=${caFiles.keyPath} \
  generate-host-certificates=on \
  dynamic_cert_mem_cache_size=16MB \
  options=NO_SSLv3,NO_TLSv1,NO_TLSv1_1

Testing Required

After fixing, verify:

  1. ✅ SSL Bump mode blocks unauthorized HTTPS domains on intercept port
  2. ✅ Non-SSL Bump mode still works with plain intercept
  3. ✅ URL pattern filtering works for HTTPS traffic on intercept port
  4. ✅ Squid logs show successful TLS interception on port 3129

Suggested Action

DO NOT MERGE until this vulnerability is fixed. The intercept port must have identical SSL bump configuration to port 3128 when SSL Bump mode is enabled.

AI generated by Security Guard

@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

❌ Build Test: Rust - FAILED

Status: Unable to execute tests due to critical environment issue.

Error Summary

The test environment has a fundamental problem where all command arguments are being interpreted as file paths rather than arguments. This affects all commands including cargo, rustup, and prevents building/testing Rust projects.

Example failures:

  • cargo buildcargo: build: No such file or directory
  • cargo --version → Outputs bash version info instead
  • /home/runner/.cargo/bin/rustup run stable cargorustup: run: No such file or directory

Test Results

Project Build Tests Status
fd N/A FAILED - Cannot execute cargo
zoxide N/A FAILED - Cannot execute cargo

Overall: FAILED

Environment Details

  • ✅ Repository cloned successfully: Mossaka/gh-aw-firewall-test-rust
  • ✅ Rust installed: rustc 1.93.0 (254b59607 2026-01-19)
  • ❌ Cargo execution: Completely broken
  • ❌ All commands with arguments fail with "No such file or directory"

Root Cause

This appears to be a bash/shell configuration issue in the GitHub Actions runner environment where command argument parsing is fundamentally broken. The issue affects all commands, not just Rust tooling.

Recommendation

The workflow environment needs investigation to determine why command arguments are being misinterpreted as file paths. This is blocking all Rust build testing.

AI generated by Build Test Rust

@Mossaka Mossaka merged commit 183e451 into main Feb 5, 2026
84 of 86 checks passed
@Mossaka Mossaka deleted the fix/squid-intercept-port branch February 5, 2026 18:16
Mossaka added a commit that referenced this pull request Feb 5, 2026
After #524 removed HTTP_PROXY/HTTPS_PROXY from the agent container,
the v0.13.4 images break because their setup-iptables.sh DNATs to
port 3128 (explicit proxy) instead of 3129 (intercept mode).

Recompile all lock files to use v0.13.5 images which have the
intercept port fix (PR #520).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mossaka added a commit that referenced this pull request Feb 5, 2026
After #524 removed HTTP_PROXY/HTTPS_PROXY from the agent container,
the v0.13.4 images break because their setup-iptables.sh DNATs to
port 3128 (explicit proxy) instead of 3129 (intercept mode).

Recompile all lock files to use v0.13.5 images which have the
intercept port fix (PR #520).

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mossaka added a commit that referenced this pull request Feb 5, 2026
After #524 removed HTTP_PROXY/HTTPS_PROXY from the agent container,
the v0.13.4 images break because their setup-iptables.sh DNATs to
port 3128 (explicit proxy) instead of 3129 (intercept mode).

Recompile all lock files to use v0.13.5 images which have the
intercept port fix (PR #520).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mossaka added a commit that referenced this pull request Feb 6, 2026
Reverts the following PRs which introduced unnecessary complexity:

- #520: fix: enable Squid intercept mode for NAT-redirected traffic
- v0.13.5 release: chore(release): bump version to 0.13.5
- #524: fix: remove HTTP_PROXY/HTTPS_PROXY env vars from agent container
- #526: chore: recompile workflow lock files for AWF v0.13.5
- #527: fix: recompile lock files with release action mode
- #522: fix: mount /etc/hosts in chroot and fix HTTP blocking test
- #530: fix: restore HTTPS_PROXY, fix chroot hosts/permissions, fix Bun crash
- v0.13.6 release: chore(release): bump version to 0.13.6

The intercept mode (#520) was introduced to fix Codex failing with
HTTP_PROXY, but the simpler fix is to just not set HTTP_PROXY for
Codex. The intercept mode introduced a cascade of breakage:
- HTTPS can't be transparently intercepted (needs CONNECT method)
- Image version bumps required lock file recompilation
- host.docker.internal traffic crashed Squid under load
- Multiple PRs needed to fix each regression

This reverts to the pre-#520 explicit proxy mode (HTTP_PROXY/HTTPS_PROXY
pointing to Squid port 3128) which worked for all engines.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mossaka added a commit that referenced this pull request Feb 6, 2026
Reverts the following PRs which introduced unnecessary complexity:

- #520: fix: enable Squid intercept mode for NAT-redirected traffic
- v0.13.5 release: chore(release): bump version to 0.13.5
- #524: fix: remove HTTP_PROXY/HTTPS_PROXY env vars from agent container
- #526: chore: recompile workflow lock files for AWF v0.13.5
- #527: fix: recompile lock files with release action mode
- #522: fix: mount /etc/hosts in chroot and fix HTTP blocking test
- #530: fix: restore HTTPS_PROXY, fix chroot hosts/permissions, fix Bun crash
- v0.13.6 release: chore(release): bump version to 0.13.6

The intercept mode (#520) was introduced to fix Codex failing with
HTTP_PROXY, but the simpler fix is to just not set HTTP_PROXY for
Codex. The intercept mode introduced a cascade of breakage:
- HTTPS can't be transparently intercepted (needs CONNECT method)
- Image version bumps required lock file recompilation
- host.docker.internal traffic crashed Squid under load
- Multiple PRs needed to fix each regression

This reverts to the pre-#520 explicit proxy mode (HTTP_PROXY/HTTPS_PROXY
pointing to Squid port 3128) which worked for all engines.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HTTP traffic NAT'd to Squid fails with 'Invalid URL - Missing hostname'

1 participant