|
|
@@ -212,44 +212,44 @@ func TestFirewall_Drop(t *testing.T) {
|
|
|
cp := cert.NewCAPool()
|
|
|
|
|
|
// Drop outbound
|
|
|
- assert.Equal(t, ErrNoMatchingRule, fw.Drop(p, false, &h, cp, nil))
|
|
|
+ assert.Equal(t, ErrNoMatchingRule, fw.Drop(p, false, &h, cp, nil, nil))
|
|
|
// Allow inbound
|
|
|
resetConntrack(fw)
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
// Allow outbound because conntrack
|
|
|
- require.NoError(t, fw.Drop(p, false, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, false, &h, cp, nil, nil))
|
|
|
|
|
|
// test remote mismatch
|
|
|
oldRemote := p.RemoteAddr
|
|
|
p.RemoteAddr = netip.MustParseAddr("1.2.3.10")
|
|
|
- assert.Equal(t, fw.Drop(p, false, &h, cp, nil), ErrInvalidRemoteIP)
|
|
|
+ assert.Equal(t, fw.Drop(p, false, &h, cp, nil, nil), ErrInvalidRemoteIP)
|
|
|
p.RemoteAddr = oldRemote
|
|
|
|
|
|
// ensure signer doesn't get in the way of group checks
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "", "signer-shasum"))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "", "signer-shasum-bad"))
|
|
|
- assert.Equal(t, fw.Drop(p, true, &h, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, true, &h, cp, nil, nil), ErrNoMatchingRule)
|
|
|
|
|
|
// test caSha doesn't drop on match
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "", "signer-shasum-bad"))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "", "signer-shasum"))
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
|
|
|
// ensure ca name doesn't get in the way of group checks
|
|
|
cp.CAs["signer-shasum"] = &cert.CachedCertificate{Certificate: &dummyCert{name: "ca-good"}}
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "ca-good", ""))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "ca-good-bad", ""))
|
|
|
- assert.Equal(t, fw.Drop(p, true, &h, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, true, &h, cp, nil, nil), ErrNoMatchingRule)
|
|
|
|
|
|
// test caName doesn't drop on match
|
|
|
cp.CAs["signer-shasum"] = &cert.CachedCertificate{Certificate: &dummyCert{name: "ca-good"}}
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "ca-good-bad", ""))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "ca-good", ""))
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
}
|
|
|
|
|
|
func TestFirewall_DropV6(t *testing.T) {
|
|
|
@@ -291,44 +291,44 @@ func TestFirewall_DropV6(t *testing.T) {
|
|
|
cp := cert.NewCAPool()
|
|
|
|
|
|
// Drop outbound
|
|
|
- assert.Equal(t, ErrNoMatchingRule, fw.Drop(p, false, &h, cp, nil))
|
|
|
+ assert.Equal(t, ErrNoMatchingRule, fw.Drop(p, false, &h, cp, nil, nil))
|
|
|
// Allow inbound
|
|
|
resetConntrack(fw)
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
// Allow outbound because conntrack
|
|
|
- require.NoError(t, fw.Drop(p, false, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, false, &h, cp, nil, nil))
|
|
|
|
|
|
// test remote mismatch
|
|
|
oldRemote := p.RemoteAddr
|
|
|
p.RemoteAddr = netip.MustParseAddr("fd12::56")
|
|
|
- assert.Equal(t, fw.Drop(p, false, &h, cp, nil), ErrInvalidRemoteIP)
|
|
|
+ assert.Equal(t, fw.Drop(p, false, &h, cp, nil, nil), ErrInvalidRemoteIP)
|
|
|
p.RemoteAddr = oldRemote
|
|
|
|
|
|
// ensure signer doesn't get in the way of group checks
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "", "signer-shasum"))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "", "signer-shasum-bad"))
|
|
|
- assert.Equal(t, fw.Drop(p, true, &h, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, true, &h, cp, nil, nil), ErrNoMatchingRule)
|
|
|
|
|
|
// test caSha doesn't drop on match
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "", "signer-shasum-bad"))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "", "signer-shasum"))
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
|
|
|
// ensure ca name doesn't get in the way of group checks
|
|
|
cp.CAs["signer-shasum"] = &cert.CachedCertificate{Certificate: &dummyCert{name: "ca-good"}}
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "ca-good", ""))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "ca-good-bad", ""))
|
|
|
- assert.Equal(t, fw.Drop(p, true, &h, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, true, &h, cp, nil, nil), ErrNoMatchingRule)
|
|
|
|
|
|
// test caName doesn't drop on match
|
|
|
cp.CAs["signer-shasum"] = &cert.CachedCertificate{Certificate: &dummyCert{name: "ca-good"}}
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"nope"}, "", "", "", "ca-good-bad", ""))
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group"}, "", "", "", "ca-good", ""))
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
}
|
|
|
|
|
|
func BenchmarkFirewallTable_match(b *testing.B) {
|
|
|
@@ -536,10 +536,10 @@ func TestFirewall_Drop2(t *testing.T) {
|
|
|
cp := cert.NewCAPool()
|
|
|
|
|
|
// h1/c1 lacks the proper groups
|
|
|
- require.ErrorIs(t, fw.Drop(p, true, &h1, cp, nil), ErrNoMatchingRule)
|
|
|
+ require.ErrorIs(t, fw.Drop(p, true, &h1, cp, nil, nil), ErrNoMatchingRule)
|
|
|
// c has the proper groups
|
|
|
resetConntrack(fw)
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
}
|
|
|
|
|
|
func TestFirewall_Drop3(t *testing.T) {
|
|
|
@@ -617,18 +617,18 @@ func TestFirewall_Drop3(t *testing.T) {
|
|
|
cp := cert.NewCAPool()
|
|
|
|
|
|
// c1 should pass because host match
|
|
|
- require.NoError(t, fw.Drop(p, true, &h1, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h1, cp, nil, nil))
|
|
|
// c2 should pass because ca sha match
|
|
|
resetConntrack(fw)
|
|
|
- require.NoError(t, fw.Drop(p, true, &h2, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h2, cp, nil, nil))
|
|
|
// c3 should fail because no match
|
|
|
resetConntrack(fw)
|
|
|
- assert.Equal(t, fw.Drop(p, true, &h3, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, true, &h3, cp, nil, nil), ErrNoMatchingRule)
|
|
|
|
|
|
// Test a remote address match
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 1, 1, []string{}, "", "1.2.3.4/24", "", "", ""))
|
|
|
- require.NoError(t, fw.Drop(p, true, &h1, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h1, cp, nil, nil))
|
|
|
}
|
|
|
|
|
|
func TestFirewall_Drop3V6(t *testing.T) {
|
|
|
@@ -666,7 +666,7 @@ func TestFirewall_Drop3V6(t *testing.T) {
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
cp := cert.NewCAPool()
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 1, 1, []string{}, "", "fd12::34/120", "", "", ""))
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
}
|
|
|
|
|
|
func TestFirewall_DropConntrackReload(t *testing.T) {
|
|
|
@@ -708,12 +708,12 @@ func TestFirewall_DropConntrackReload(t *testing.T) {
|
|
|
cp := cert.NewCAPool()
|
|
|
|
|
|
// Drop outbound
|
|
|
- assert.Equal(t, fw.Drop(p, false, &h, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, false, &h, cp, nil, nil), ErrNoMatchingRule)
|
|
|
// Allow inbound
|
|
|
resetConntrack(fw)
|
|
|
- require.NoError(t, fw.Drop(p, true, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, true, &h, cp, nil, nil))
|
|
|
// Allow outbound because conntrack
|
|
|
- require.NoError(t, fw.Drop(p, false, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, false, &h, cp, nil, nil))
|
|
|
|
|
|
oldFw := fw
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
@@ -722,7 +722,7 @@ func TestFirewall_DropConntrackReload(t *testing.T) {
|
|
|
fw.rulesVersion = oldFw.rulesVersion + 1
|
|
|
|
|
|
// Allow outbound because conntrack and new rules allow port 10
|
|
|
- require.NoError(t, fw.Drop(p, false, &h, cp, nil))
|
|
|
+ require.NoError(t, fw.Drop(p, false, &h, cp, nil, nil))
|
|
|
|
|
|
oldFw = fw
|
|
|
fw = NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
@@ -731,7 +731,7 @@ func TestFirewall_DropConntrackReload(t *testing.T) {
|
|
|
fw.rulesVersion = oldFw.rulesVersion + 1
|
|
|
|
|
|
// Drop outbound because conntrack doesn't match new ruleset
|
|
|
- assert.Equal(t, fw.Drop(p, false, &h, cp, nil), ErrNoMatchingRule)
|
|
|
+ assert.Equal(t, fw.Drop(p, false, &h, cp, nil, nil), ErrNoMatchingRule)
|
|
|
}
|
|
|
|
|
|
func TestFirewall_DropIPSpoofing(t *testing.T) {
|
|
|
@@ -777,7 +777,7 @@ func TestFirewall_DropIPSpoofing(t *testing.T) {
|
|
|
Protocol: firewall.ProtoUDP,
|
|
|
Fragment: false,
|
|
|
}
|
|
|
- assert.Equal(t, fw.Drop(p, true, &h1, cp, nil), ErrInvalidRemoteIP)
|
|
|
+ assert.Equal(t, fw.Drop(p, true, &h1, cp, nil, nil), ErrInvalidRemoteIP)
|
|
|
}
|
|
|
|
|
|
func BenchmarkLookup(b *testing.B) {
|
|
|
@@ -1184,7 +1184,7 @@ func (c *testcase) Test(t *testing.T, fw *Firewall) {
|
|
|
t.Helper()
|
|
|
cp := cert.NewCAPool()
|
|
|
resetConntrack(fw)
|
|
|
- err := fw.Drop(c.p, true, c.h, cp, nil)
|
|
|
+ err := fw.Drop(c.p, true, c.h, cp, nil, nil)
|
|
|
if c.err == nil {
|
|
|
require.NoError(t, err, "failed to not drop remote address %s", c.p.RemoteAddr)
|
|
|
} else {
|