diff --git a/examples/foundation-first-node.lock b/examples/foundation-first-node.lock index 5903648..860ac91 100644 --- a/examples/foundation-first-node.lock +++ b/examples/foundation-first-node.lock @@ -56,7 +56,10 @@ // enrols over, the registry a node pulls from), and let the container runtime's own // networks through the forward chain so containers keep working. A published container port // is forwarded, never input (issue 047), which is why the forward chain is where the store's - // and broker's ports are refused from outside. + // and broker's ports are refused from outside — and a container on this machine dialling a + // port this machine publishes reaches it through the runtime's proxy, which IS input, which + // is why the bus and the registry are opened in both chains, exactly as the derived ruleset + // does. { "id": "base-filter-package", "type": "package", @@ -67,7 +70,7 @@ "type": "file", "path": "/etc/nftables.conf", "mode": "0644", - "content": "#!/usr/sbin/nft -f\n# the foundation's own filter, until the mesh derives one (novox/hq issue 054)\ntable inet mesh {}\ndelete table inet mesh\n\ntable inet mesh {\n\tchain input {\n\t\ttype filter hook input priority filter; policy drop;\n\t\tct state established,related accept\n\t\tct state invalid drop\n\t\tiif lo accept\n\t\ticmp type echo-request accept\n\t\ticmpv6 type { echo-request, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert } accept\n\t\t# ssh, from anywhere — never closed\n\t\ttcp dport 22 accept\n\t}\n\tchain output {\n\t\ttype filter hook output priority filter; policy accept;\n\t}\n\tchain forward {\n\t\ttype filter hook forward priority filter; policy drop;\n\t\tct state established,related accept\n\t\tct state invalid drop\n\t\t# the container runtime's bridge networks, and the networks its compose files are given\n\t\tip saddr 172.16.0.0/12 accept\n\t\tip saddr 192.168.128.0/17 accept\n\t\t# the mesh's own: the bus a node enrols over, the registry a node pulls from\n\t\tct original proto-dst 5671 accept\n\t\tct original proto-dst 5000 accept\n\t}\n}\n" + "content": "#!/usr/sbin/nft -f\n# the foundation's own filter, until the mesh derives one (novox/hq issue 054)\ntable inet mesh {}\ndelete table inet mesh\n\ntable inet mesh {\n\tchain input {\n\t\ttype filter hook input priority filter; policy drop;\n\t\tct state established,related accept\n\t\tct state invalid drop\n\t\tiif lo accept\n\t\ticmp type echo-request accept\n\t\ticmpv6 type { echo-request, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert } accept\n\t\t# ssh, from anywhere — never closed\n\t\ttcp dport 22 accept\n\t\t# the mesh's own, from anywhere: the bus a node enrols over and a container on this machine reaches through the proxy, the registry a node pulls from\n\t\ttcp dport 5671 accept\n\t\ttcp dport 5000 accept\n\t}\n\tchain output {\n\t\ttype filter hook output priority filter; policy accept;\n\t}\n\tchain forward {\n\t\ttype filter hook forward priority filter; policy drop;\n\t\tct state established,related accept\n\t\tct state invalid drop\n\t\t# the container runtime's bridge networks, and the networks its compose files are given\n\t\tip saddr 172.16.0.0/12 accept\n\t\tip saddr 192.168.128.0/17 accept\n\t\t# the mesh's own: the bus a node enrols over, the registry a node pulls from\n\t\tct original proto-dst 5671 accept\n\t\tct original proto-dst 5000 accept\n\t}\n}\n" }, { "id": "base-filter-loaded", diff --git a/internal/bootstrap/rootsecrets_test.go b/internal/bootstrap/rootsecrets_test.go index e31814f..d64379b 100644 --- a/internal/bootstrap/rootsecrets_test.go +++ b/internal/bootstrap/rootsecrets_test.go @@ -200,7 +200,8 @@ func TestTheFoundationFiltersBeforeAnythingListens(t *testing.T) { t.Fatalf("order: filter %d loaded %d store %d broker %d", filterAt, loadedAt, storeAt, brokerAt) } for _, want := range []string{"policy drop", "tcp dport 22 accept", "ct original proto-dst 5671 accept", - "ct original proto-dst 5000 accept", "ip saddr 172.16.0.0/12 accept", "table inet mesh"} { + "ct original proto-dst 5000 accept", "tcp dport 5671 accept", "tcp dport 5000 accept", + "ip saddr 172.16.0.0/12 accept", "table inet mesh"} { if !strings.Contains(rules, want) { t.Errorf("the base filter lacks %q", want) }