Commit Graph

70 Commits

Author SHA1 Message Date
a470f86ee4 fix: resolve ENXIO error and skip template on failed learning runs
Some checks failed
Build and test / Build (push) Successful in 12s
Build and test / Test (macOS) (push) Has been cancelled
Build and test / Lint (push) Failing after 1m23s
Build and test / Test (Linux) (push) Failing after 46s
Skip --new-session in learning mode so interactive programs can access
/dev/tty, and run strace in the foreground to preserve terminal stdin.
Also skip template generation when the traced command exits non-zero,
since the strace trace would be incomplete.
2026-02-11 18:38:26 -06:00
7e85083c38 feat: default to GreyHaven proxy and DNS infrastructure
Default proxy to socks5://localhost:42052 and DNS to localhost:42053
when neither CLI flags nor config file specify them. This makes greywall
work out of the box with GreyHaven without requiring --proxy or --dns.

Also show both proxy and DNS in debug output on manager initialization.
2026-02-11 18:16:35 -06:00
267c82f4bd feat: default DNS to localhost:5353 when proxy is configured
When a proxy is set but no --dns flag or config dnsAddr is specified,
automatically use localhost:5353 as the DNS bridge target. This ensures
DNS queries go through GreyHaven's controlled infrastructure rather than
leaking to public resolvers via tun2socks.

Also update proxy credential injection to always set credentials
(defaulting to "proxy:proxy" when no command name is available), as
required by gost's auth flow.
2026-02-11 18:07:58 -06:00
3dd772d35a feat: add --learning mode, --template flag, and fix DNS relay
Some checks failed
Build and test / Lint (push) Failing after 1m29s
Build and test / Build (push) Successful in 13s
Build and test / Test (Linux) (push) Failing after 58s
Build and test / Test (macOS) (push) Has been cancelled
Learning mode (--learning) traces filesystem access with strace and
generates minimal sandbox config templates. A background monitor kills
strace when the main command exits so long-lived child processes (LSP
servers, file watchers) don't cause hangs.

Other changes:
- Add 'greywall templates list/show' subcommand
- Add --template flag to load specific learned templates
- Fix DNS relay: use TCP DNS (options use-vc) instead of broken UDP
  relay through tun2socks
- Filter O_DIRECTORY opens from learned read paths
- Add docs/experience.md with development notes
2026-02-11 08:22:53 -06:00
631db40665 remove banner image and assets directory
Some checks failed
Build and test / Build (push) Successful in 13s
Build and test / Test (Linux) (push) Failing after 42s
Build and test / Lint (push) Failing after 1m23s
Build and test / Test (macOS) (push) Has been cancelled
2026-02-10 16:23:19 -06:00
5bb42db57a fix: add GreyHaven copyright and update security contact
Some checks failed
Build and test / Build (push) Successful in 48s
Build and test / Test (Linux) (push) Failing after 1m31s
Build and test / Lint (push) Failing after 1m37s
Build and test / Test (macOS) (push) Has been cancelled
Add Copyright 2026 GreyHaven to LICENSE alongside original Tusk
copyright (required by Apache 2.0). Update SECURITY.md contact
email from usetusk.ai to greyhaven.co.
2026-02-10 16:10:12 -06:00
dc5487c965 Add CLAUDE.md with project conventions and quick reference 2026-02-10 16:06:22 -06:00
da3a2ac3a4 rename Fence to Greywall as GreyHaven sandboxing component
Rebrand the project from Fence to Greywall, the sandboxing layer of the
GreyHaven platform. This updates:

- Go module path to gitea.app.monadical.io/monadical/greywall
- Binary name, CLI help text, and all usage examples
- Config paths (~/.config/greywall/greywall.json), env vars (GREYWALL_*)
- Log prefixes ([greywall:*]), temp file prefixes (greywall-*)
- All documentation, scripts, CI workflows, and example files
- README rewritten with GreyHaven branding and Fence attribution

Directory/file renames: cmd/fence → cmd/greywall, pkg/fence → pkg/greywall,
docs/why-fence.md → docs/why-greywall.md, example JSON files, and banner.
2026-02-10 16:00:24 -06:00
481616455a fix: add SOCKS5 auth, DNS bridge, and TUN capability support
Three issues prevented transparent proxying from working end-to-end:

1. bwrap dropped CAP_NET_ADMIN before exec, so ip tuntap/link commands
   failed inside the sandbox. Add --cap-add CAP_NET_ADMIN and
   CAP_NET_BIND_SERVICE when transparent proxy is active.

2. tun2socks only offered SOCKS5 no-auth (method 0x00), but many proxies
   (e.g. gost) require username/password auth (method 0x02). Pass through
   credentials from the proxy URL so tun2socks offers both auth methods.

3. DNS resolution failed because UDP DNS needs SOCKS5 UDP ASSOCIATE which
   most proxies don't support. Add --dns flag and DnsBridge that routes
   DNS queries from the sandbox through a Unix socket to a host-side DNS
   server. Falls back to TCP relay through the tunnel when no --dns is set.

Also brings up loopback interface (ip link set lo up) inside the network
namespace so socat can bind to 127.0.0.1.
2026-02-10 14:57:56 -06:00
9cb65151ee Replace built-in proxies with tun2socks transparent proxying
Remove the built-in HTTP/SOCKS5 proxy servers and domain allowlist/denylist
system. Instead, use tun2socks with a TUN device inside the network namespace
to transparently route all TCP/UDP traffic through an external SOCKS5 proxy.

This enables truly transparent proxying where any binary (Go, static, etc.)
has its traffic routed through the proxy without needing to respect
HTTP_PROXY/ALL_PROXY environment variables. The external proxy handles its
own filtering.

Key changes:
- NetworkConfig: remove AllowedDomains/DeniedDomains/proxy ports, add ProxyURL
- Delete internal/proxy/, internal/templates/, internal/importer/
- Embed tun2socks binary (downloaded at build time via Makefile)
- Replace LinuxBridge with ProxyBridge (single Unix socket to external proxy)
- Inner script sets up TUN device + tun2socks inside network namespace
- Falls back to env-var proxying when TUN is unavailable
- macOS: best-effort env-var proxying to external SOCKS5 proxy
- CLI: remove --template/import, add --proxy flag
- Feature detection: add ip/tun/tun2socks status to --linux-features
2026-02-09 20:41:12 -06:00
JY Tan
da5f61e390 fix: handle cross-mount resolv.conf symlinks in sandbox (#32) 2026-02-08 15:22:31 -08:00
JY Tan
b8b12ebe31 fix: resolve /etc/resolv.conf symlinks for DNS in sandbox (#31) 2026-02-08 13:15:16 -08:00
JY Tan
9db1ae8b54 fix: preserve argument boundaries when passing commands via -- 2026-02-05 16:55:55 -08:00
JY Tan
7cc9fb3427 Add gh CLI commands to code template 2026-02-02 12:06:55 -08:00
JY Tan
8630789c39 Add TODO comment 2026-02-02 11:53:40 -08:00
JY Tan
37b154bc94 fix(linux): remove expensive glob expansion for mandatory deny patterns
The glob expansion using **/pattern patterns caused full filesystem walks
of the current directory for each pattern (~15 patterns = ~15 walks).
This caused hangs in directories with many files (e.g., node_modules).

The concrete paths from getMandatoryDenyPaths() are sufficient for bwrap's
--ro-bind protections. Landlock (applied via wrapper) provides additional
recursive protection.

Fixes #27
2026-02-02 10:22:13 -08:00
JY Tan
b14f70782d Update README.md 2026-02-01 17:25:12 -08:00
JY Tan
c8621e8f6c feat: use OS-preferred config directory (#26) 2026-02-01 16:17:33 -08:00
JY Tan
7679fecf06 feat: add defaultDenyRead mode for strict filesystem isolation (#24) 2026-02-01 15:11:40 -08:00
JY Tan
cef3576076 chore: update code template for Droid (Factory CLI) 2026-02-01 12:16:31 -08:00
JY Tan
20b7718ce8 fix: handle macOS /tmp symlink in sandbox allowWrite paths (#23) 2026-01-26 14:30:54 -08:00
JY Tan
006d3b0cc6 Update README.md 2026-01-25 16:57:37 -08:00
JY Tan
0abc268968 Add CODEOWNERS file 2026-01-25 11:49:28 -08:00
JY Tan
93243e75e1 feat: shell completion script generation (#22) 2026-01-25 10:57:22 -08:00
priuatus
27dfd1da93 test: add denyRead integration tests for files and directories (#15) 2026-01-23 10:22:17 -08:00
JY Tan
9bb11a2f40 chore: update code template for OpenCode and Gemini CLI (#20) 2026-01-22 15:41:30 -08:00
JY Tan
5b57527a83 fix: filter directory-only Landlock rights for non-directory paths (#17) 2026-01-21 12:35:35 -08:00
JY Tan
5d01a01883 fix: handle files and symlinks correctly in denyRead paths (#14) 2026-01-21 02:26:51 -08:00
priuatus
06c2cc9a34 fix: network namespace detection false negative (#12)
Co-authored-by: netixen <netixen@spaceship>
2026-01-20 11:30:18 -08:00
JY Tan
89301f8c8a Update README.md 2026-01-19 20:45:43 -08:00
JY Tan
5ef2ce5719 Improve docs organization 2026-01-17 16:14:18 -08:00
JY Tan
20fa647ccc feat: support ssh commands (#10) 2026-01-17 15:36:51 -08:00
JY Tan
3c3f28b32c docs: add more information about nested sandboxing and integration test skip behavior 2026-01-17 13:39:03 -08:00
JY Tan
71c211c9ab fix: improve skip logic for Landlock tests in integration_linux_test.go 2026-01-17 13:15:23 -08:00
JY Tan
d53d123fb6 Update README.md 2026-01-15 15:18:35 -08:00
JY Tan
9496f7f0f0 Update README.md 2026-01-15 15:13:12 -08:00
JY Tan
f3ac2d72f4 feat: ability to import claude code settings as configs (#7) 2026-01-15 14:55:44 -08:00
JY Tan
800a50b457 Add support for config inheritance 2026-01-05 17:23:14 -08:00
JY Tan
83fa7a76ee Update templates 2025-12-29 14:45:51 -08:00
JY Tan
90cd0a0a4b Add code-relaxed template, handle wildcard network allow 2025-12-29 01:39:41 -08:00
JY Tan
d8e55d9515 Introduce built-in templates for enhanced configuration options, support JSONC format 2025-12-28 22:16:50 -08:00
JY Tan
8317bb96bc perf: add benchmarks (#5) 2025-12-28 00:38:01 -08:00
JY Tan
6c21e008c3 Handle library usage and missing network namespace gracefully 2025-12-26 16:19:07 -08:00
JY Tan
6fdd1af057 test: add integration and smoke tests (#4) 2025-12-26 14:56:20 -08:00
JY Tan
f86d9a2c82 Add environment sanitization 2025-12-25 20:47:11 -08:00
JY Tan
32d785c703 Remove unnecessary file 2025-12-25 19:20:58 -08:00
JY Tan
47de3e431c Add ability to block commands 2025-12-25 19:03:01 -08:00
JY Tan
6159bdd38a Lint linux files 2025-12-25 18:23:57 -08:00
JY Tan
08ed28f88f Enhance Linux sandbox security features with Landlock, seccomp, and eBPF monitoring 2025-12-25 17:33:55 -08:00
JY Tan
a8158a39b3 Update docs 2025-12-23 20:51:01 -08:00