-
Notifications
You must be signed in to change notification settings - Fork 125
Add UID-based nftables firewall for NATS and monit connections #399
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
Open
rkoster
wants to merge
7
commits into
cloudfoundry:main
Choose a base branch
from
rkoster:feature/uid-based-firewall
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
bb50a79
Add UID-based nftables firewall for NATS connections
rkoster c9fcfe3
Add unit tests for nftables firewall and NATS handler integration
rkoster e923ebf
Fix linter and cross-platform build issues
rkoster e03855d
Address PR review feedback for nftables firewall
rkoster ca5711e
Remove unused error returns from internal firewall helper methods
rkoster be350d9
Add two-chain architecture for monit firewall to preserve job rules
rkoster a0f7661
Rename linux_header.txt to clarify its purpose
rkoster 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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| // Package firewall provides nftables-based firewall management for the BOSH agent. | ||
| // | ||
| // The firewall protects access to: | ||
| // - Monit (port 2822 on localhost): Used by the agent to manage job processes | ||
| // - NATS (director's message bus): Used for agent-director communication | ||
| // | ||
| // Security Model: | ||
| // The firewall uses UID-based matching (meta skuid 0) to allow only root processes | ||
| // to access these services. This blocks non-root BOSH job workloads (vcap user) | ||
| // while allowing the agent and operators to access monit/NATS. | ||
| // | ||
| // This approach is simpler and more reliable than cgroup-based matching, which | ||
| // fails in nested container environments due to cgroup filesystem bind-mount issues. | ||
| package firewall | ||
|
|
||
| // Manager handles firewall setup | ||
| // | ||
| //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate | ||
| //counterfeiter:generate . Manager | ||
| type Manager interface { | ||
| // SetupMonitFirewall creates firewall rules to protect monit (port 2822). | ||
| // Only root (UID 0) is allowed to connect. | ||
| SetupMonitFirewall() error | ||
|
|
||
| // SetupNATSFirewall creates firewall rules to protect NATS. | ||
| // Only root (UID 0) is allowed to connect to the resolved NATS address. | ||
| // This method resolves DNS and should be called before each connection attempt. | ||
| SetupNATSFirewall(mbusURL string) error | ||
| } | ||
|
|
||
| // NatsFirewallHook is called by the NATS handler before connection/reconnection. | ||
| // This allows DNS to be re-resolved, supporting HA failover scenarios. | ||
| // | ||
| //counterfeiter:generate . NatsFirewallHook | ||
| type NatsFirewallHook interface { | ||
| // BeforeConnect is called before each NATS connection/reconnection attempt. | ||
| // It resolves the NATS URL and updates firewall rules with the resolved IP. | ||
| BeforeConnect(mbusURL string) error | ||
| } |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| //go:build linux | ||
|
|
||
| package firewall_test | ||
|
|
||
| import ( | ||
| "testing" | ||
|
|
||
| . "github.com/onsi/ginkgo/v2" | ||
| . "github.com/onsi/gomega" | ||
| ) | ||
|
|
||
| func TestFirewall(t *testing.T) { | ||
| RegisterFailHandler(Fail) | ||
| RunSpecs(t, "Firewall Suite") | ||
| } |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
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.