Repository navigation
feat(docker): enforce pinned Linux egress allowlists #132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
senamakel
merged 184 commits into
tinybox-27-pinned-egress-plan
from
tinybox-27-linux-egress
Oct 23, 2026
Merged
Changes from all commits
Commits
Show all changes
184 commits
Select commit
Hold shift + click to select a range
aa95b43
test(host): cover execution location reporting
senamakel 0c53ae8
feat(runtime): add HostExecutionLocation capability to Host
senamakel d86fa6d
feat(local): report local execution location
senamakel 6ef019d
feat(ssh): report remote execution location for ssh hosts
senamakel 171879c
test(sandbox): cover egress controller prepare and cleanup ordering
senamakel 62771b9
feat(docker): expose native linux egress controller
senamakel a259425
feat(docker): add pluggable egress controller to sandbox
senamakel 261a654
refactor(sandbox): simplify container removal command construction
senamakel efeba54
feat(egress): add host validation hook to docker egress controller
senamakel fac41f0
feat(sandbox): route docker commands through the egress controller
senamakel 72d08de
feat(sandbox): support allowlist network policy in docker backend
senamakel 548863d
style: format egress enforcement and sandbox code
senamakel 1b7ea68
fix(egress): return owned stdout from firewall output
senamakel 7a460fc
fix(sandbox): roll back egress state when container creation fails
senamakel ad3750c
test(sandbox): cover native controller rejecting hosts without local …
senamakel bcce19b
test(sandbox): use std::io::Result in egress resolver stub
senamakel 8acafa7
test(docker): add egress controller imports to live tests
senamakel 40399c2
test(docker): cover native egress allowlist against raw tcp
senamakel 8025f57
test(docker): cover egress rollback and host-gateway allowlist denial
senamakel 67c9073
docs(specs): document docker allowlist enforcement
senamakel 2692fff
test(sandbox): cover unknown and remote host locations
senamakel a08371e
test(sandbox): reformat imports and loop array
senamakel 71fe942
test(tinybox-docker): unset proxy vars in live allowlist probes
senamakel 7be9921
test(docker): run pinned allowlist proof in hosted live lane
senamakel c5b304f
test(egress): wire up egress enforcement test module
senamakel 7e95600
fix(egress): verify docker forward hook is first in the chain
senamakel 6172539
refactor(sandbox): extract create rollback and network policy helpers
senamakel 01e03ea
refactor(sandbox): extract egress and failed-create helpers
senamakel 8b38bda
test(tinybox-ssh): bind inner host in name test
senamakel 360aa64
test: construct test ip addresses without parsing strings
senamakel 6b0e24f
chore(deps): update tokio and pin windows-sys to 0.52.0
senamakel 043b362
test(sandbox): cover destroy refusal for persisted allowlist without …
senamakel 3af991c
fix(sandbox): reject destroy for allowlist boxes without egress contr…
senamakel d5b1cda
fix(limited): silence deprecation warning for async pipe registration
senamakel 06e16f0
fix(egress): verify docker bridge link before installing firewall
senamakel 5ce2df0
test(egress): compare allowlist protocols by slice
senamakel 6e3226e
fix(egress): restrict allowlist protocols to tcp
senamakel b538f11
test: tighten host trait signatures and live docker test setup
senamakel c92d250
test(sandbox): annotate empty command vector type in assertion
senamakel 5e4efd2
test(egress): cover native controller allowlist prepare and cleanup
senamakel 9a91319
test(egress): assert prepare succeeds before unwrapping
senamakel 9ec20d5
test(egress): match docker subcommands by position-independent search
senamakel 1098304
fix(egress): route network inspect through rootful docker helper
senamakel 2feec32
test(sandbox): cover controller host forwarding and egress rollback
senamakel f3025bc
test(sandbox): tidy host capability assertions and egress rollback check
senamakel bd643a4
test(egress): rename docker args binding in fake host
senamakel 9cc4e45
feat(docker): pin egress hostnames via /etc/hosts
senamakel 4097e7a
feat(tinybox-docker): expose prepared egress network from sandbox
senamakel ad65298
test(egress): cover pinned host mappings and dns blocking
senamakel 83f0a58
docs(tinybox-docker): describe egress plan as consumed by the native …
senamakel a7fbda7
fix(sandbox): skip egress cleanup for non-allowlist boxes
senamakel 6b08860
test(sandbox): cover allowlist run args pinning resolved addresses
senamakel fa5d1a4
fix(egress): skip firewall cleanup when network creation fails
senamakel 276c2d7
refactor(sandbox): drop dns pinning and host mappings from docker args
senamakel 5aa6143
fix(sandbox): pin allowlist network dns to loopback
senamakel af47a8d
docs(specs): clarify docker dns upstream rationale
senamakel 2e00f4a
fix(egress): roll back network setup and allow IPv6 neighbour discovery
senamakel cf45605
test(docker): assert firewall rule ordering and published-port reacha…
senamakel e76e1eb
test(docker): cover ipv6 allowlist egress in live test
senamakel c6193aa
test(docker): fix live egress allowlist probe cleanup
senamakel 735bcae
docs: document allowlist bridge-to-host exceptions
senamakel 076be2d
refactor(tinybox-docker): extract pinned destination rules into helper
senamakel c5d229b
test(sandbox): assert rollback failure reports its own operation
senamakel 4f79487
test(sandbox): cover failed create cleanup retaining the record
senamakel e78512e
test(sandbox): update insert_new call in cleanup retry test
senamakel 505fdfb
test(sandbox): recover poisoned lock in failed create cleanup test
senamakel d1d3c9f
test(tinybox-docker): fix escaped quotes in live network inspect format
senamakel e310460
test(tinybox-docker): extract ipv6 inspect template helper
senamakel f48aeb9
test(tinybox-docker): read a single line from the published port
senamakel 8d39638
test(tinybox-docker): drop unused mut in live docker test
senamakel 9dd619d
test(live-docker): serve published port over http
senamakel 11a2901
test(tinybox-docker): make stream binding mutable in live test
senamakel 535cbd1
test(tinybox-docker): read published-port response incrementally
senamakel cbe0bc0
test(tinybox-docker): tolerate read timeouts while polling published …
senamakel 5c86897
test(tinybox-docker): collapse match arm onto one line
senamakel 27e867b
test(limited): cover local execution location reporting
senamakel f509d91
feat(limited): report execution location for limited local host
senamakel 9d758b9
test(egress): cover ipv4-mapped ipv6 answers
senamakel c256479
fix(egress): normalize ipv4-mapped addresses in allowlist
senamakel 87e7362
test(egress): cover ipv4-mapped answers in native controller
senamakel b697808
fix(egress): make ipv4 arm of normalize_ip_address exhaustive
senamakel 94f4bc3
test(docker): assert established input rule precedes drop rules
senamakel 6127f90
fix(egress): allow established return traffic to the host
senamakel c54c060
test(egress): extract input rule assertions into a helper
senamakel 50d033d
docs: clarify egress enforcement comments and contract wording
senamakel 704000d
test(tinybox-docker): retry reads on connection reset in live test
senamakel f75425b
test(tinybox-docker): start published-port httpd detached via docker …
senamakel 0ffed93
test(tinybox-docker): fix stderr_lossy ownership in live test
senamakel e3c2f8c
test(live-docker): serve published port with nc loop
senamakel 1eedbc9
test(tinybox-docker): simplify published-port probe payload
senamakel a292574
test(tinybox-docker): cover both listener probe ports in allowlist
senamakel 40e98f7
test(tinybox-docker): cover additional allowlist probe port
senamakel 42a115b
test(docker): cover cleanup refusing a foreign network owner
senamakel 8445400
test(egress): cover network scope and chain owner tokens
senamakel 510a171
fix(egress): scope firewall chain cleanup to the owning box
senamakel 3c8a1a5
test(docker): track deleted iptables chains in egress test host
senamakel b75f26c
test(egress): track created firewall chains in prepared host
senamakel d46f959
fix(tinybox-docker): scope owner tokens and tighten egress deny rules
senamakel 8ce6b3c
test(tinybox-docker): track firewall chains per iptables variant
senamakel 6fc2345
test(egress): import deny_rules in enforcement tests
senamakel 973d525
test(egress): simplify destination assertions in metadata deny test
senamakel cd2dfd5
test(egress): cover scope token sha256 identity
senamakel e3e777a
style: fix indentation and import ordering
senamakel c613673
refactor(egress): build scope tokens and fake output without intermed…
senamakel 4c0db33
refactor(egress): replace fmt::Write hex formatting with direct push
senamakel 96cd674
refactor(egress): hoist hex table to module scope
senamakel 8fe4d5c
test(tinybox-docker): cover busybox nc ipv6 flag handling
senamakel 69b5a7d
test(live-docker): drop ipv6 flag from listener probe
senamakel 9a1af48
test(egress): cover chain marker install failure rollback
senamakel 46b0dd1
test(egress): fix chain owner token comparison in native host
senamakel 2f39145
fix(egress): track chains created during a failed setup attempt
senamakel 4381551
test(docker): track owner-marked chains in egress enforcement fake
senamakel 14f9e9a
test(egress): clone firewall when removing chain in test host
senamakel 8c9ab9d
fix(egress): use cleanup_native on setup failure
senamakel 2b5bc49
fix(egress): clean up only chains owned by the failed attempt
senamakel 11c48e2
test(egress): gate native controller tests to linux
senamakel c6f01d0
chore(egress): allow too_many_lines on install_family
senamakel 67eb415
test(egress): gate linux-only helpers behind cfg
senamakel 51f20dc
fix(docker): reject IPv6 link-local egress targets and reconcile ambi…
senamakel bbc20ec
test(egress): cover ambiguous network create with absent or foreign n…
senamakel 95dcde9
test(tinybox-docker): model network create outcomes with an enum
senamakel 1e317f5
test(egress): reformat network create failure check
senamakel da175d8
test(egress): cover network inspect outcomes in rollback tests
senamakel 0995ddc
fix(egress): reconcile failed docker network creation
senamakel 800c922
fix(egress): report docker stderr when network inspection fails
senamakel ded8757
fix(egress): require the final drop rule in each chain
senamakel 42161c9
test(sandbox): cover docker argv rewriting for non-idempotent control…
senamakel eab6f87
refactor(sandbox): drop unused docker argv rewriting
senamakel 5473691
test(egress): cover pinned targets inside auto-selected subnets
senamakel 2407dd9
fix(egress): reject allowlist targets inside the docker network subnet
senamakel 4df125e
test(egress): tighten assertion for iptables rule commands
senamakel 281cc29
test(tinybox-docker): silence dead code warnings on non-linux
senamakel 48382a6
test(sandbox): use assert_ne for docker command count
senamakel 7706604
docs(egress): document ipam subnet refusal for pinned destinations
senamakel aa97407
test(egress): cover owner marker restore when chain delete fails
senamakel c30bcce
test(egress): guard fail_chain_delete_once with a mutex
senamakel 27fea97
fix(egress): restore ownership marker when chain deletion fails
senamakel 877357c
test(egress): fix host mutability in enforcement tests
senamakel 3d88625
style(tinybox-docker): reformat egress enforcement code
senamakel fb45030
test(egress): gate chain delete retry test to linux
senamakel fed0596
chore: add rustc ice reports
senamakel 7a33ef7
chore: remove rustc ice dump files
senamakel 1035a75
chore: add rustc ice report
senamakel 234e47b
chore: remove stray rustc ICE dump file
senamakel 8b01db2
test(limited): cover jailed local host execution location
senamakel 68ce742
feat(host): report local execution location for jailed host
senamakel df370e8
test(egress): assert same-owner network conflict is not removed
senamakel 74f7388
fix(egress): return original error on network create failure
senamakel 302ab4a
test(egress): capture iptables-restore scripts in prepared host
senamakel 1ec263e
test(egress): cover atomic chain creation and restart-safe cleanup
senamakel 8de0a4e
fix(egress): create firewall chains atomically with owner marker
senamakel d138253
fix(egress): append owner marker without flushing the chain
senamakel 88a2343
test(egress): assert per-chain restore scripts and binaries
senamakel dbcccc6
test(egress): reformat restore program assertion
senamakel d435d30
test(egress): assert no inspect runs on network name conflict
senamakel a7d4238
test(egress): reformat inspect assertion to match rustfmt
senamakel d517027
refactor(egress): key firewall chains by per-attempt token
senamakel d9fa023
fix(egress): label egress networks with the attempt token
senamakel f82ebf6
fix(egress): include attempt label in network inspect format
senamakel c15a250
fix(docker): verify egress network ownership before cleanup
senamakel 1efe331
refactor(egress): remove redundant network existence check
senamakel 087c771
test(egress): split restart cleanup coverage into empty and nonempty …
senamakel 2df862a
fix(egress): match attempt label when reconciling ambiguous network c…
senamakel 39fec21
test(egress): cover ambiguous create preserving older attempt network
senamakel 87febd7
test(egress): inline attempt label and mark prepared hosts mutable
senamakel 68d7897
test(egress): fix mutability of prepared host bindings
senamakel d19c9fd
test(egress): fix mutability of prepared host bindings in tests
senamakel 484de6d
docs(egress_enforcement): describe per-attempt chain ownership
senamakel a87f185
test(docker): track chains with rules in egress enforcement fake host
senamakel 813a341
test(egress): reuse resolved firewall binary in chain bookkeeping
senamakel dc13f6a
test(egress): reuse firewall value when clearing chain state
senamakel 9e089c6
style(tinybox-docker): reformat egress enforcement code
senamakel ab87d25
test(egress): remove duplicate firewall lookup in prepared host
senamakel df474af
test(egress): mark chains as owned in cleanup ownership test
senamakel fd6b891
test(egress): rename marker failure test to describe rollback
senamakel f60d878
test(egress): cover cleanup when no orphaned chains exist
senamakel c51b031
test(egress): relax iptables chain count assertion
senamakel e8023a0
test(egress): cover rollback failure when owned network removal fails
senamakel a2566e9
test(egress): inject one-shot network removal failure
senamakel ff5bbd6
test(egress): report prepare result and commands on rollback failure
senamakel a7daa81
test(egress): match simulated lost response in rollback assertion
senamakel aece4b6
test(egress): gate network removal assertion to linux
senamakel 3bd7f10
test(egress): fix indentation of linux cfg attribute
senamakel 1923fef
test(egress): gate no_matching_hooks field to linux
senamakel File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.