|
@@ -8,6 +8,7 @@ import (
|
|
|
"testing"
|
|
|
"time"
|
|
|
|
|
|
+ "github.com/gaissmai/bart"
|
|
|
"github.com/slackhq/nebula/cert"
|
|
|
"github.com/slackhq/nebula/config"
|
|
|
"github.com/slackhq/nebula/firewall"
|
|
@@ -149,7 +150,8 @@ func TestFirewall_Drop(t *testing.T) {
|
|
|
l := test.NewLogger()
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
-
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("1.1.1.1/8"))
|
|
|
p := firewall.Packet{
|
|
|
LocalAddr: netip.MustParseAddr("1.2.3.4"),
|
|
|
RemoteAddr: netip.MustParseAddr("1.2.3.4"),
|
|
@@ -174,7 +176,7 @@ func TestFirewall_Drop(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{netip.MustParseAddr("1.2.3.4")},
|
|
|
}
|
|
|
- h.buildNetworks(c.networks, c.unsafeNetworks)
|
|
|
+ h.buildNetworks(myVpnNetworksTable, c.networks, c.unsafeNetworks)
|
|
|
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"any"}, "", netip.Prefix{}, netip.Prefix{}, "", ""))
|
|
@@ -226,6 +228,9 @@ func TestFirewall_DropV6(t *testing.T) {
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("fd00::/7"))
|
|
|
+
|
|
|
p := firewall.Packet{
|
|
|
LocalAddr: netip.MustParseAddr("fd12::34"),
|
|
|
RemoteAddr: netip.MustParseAddr("fd12::34"),
|
|
@@ -250,7 +255,7 @@ func TestFirewall_DropV6(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{netip.MustParseAddr("fd12::34")},
|
|
|
}
|
|
|
- h.buildNetworks(c.networks, c.unsafeNetworks)
|
|
|
+ h.buildNetworks(myVpnNetworksTable, c.networks, c.unsafeNetworks)
|
|
|
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, &c)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"any"}, "", netip.Prefix{}, netip.Prefix{}, "", ""))
|
|
@@ -453,6 +458,8 @@ func TestFirewall_Drop2(t *testing.T) {
|
|
|
l := test.NewLogger()
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("1.1.1.1/8"))
|
|
|
|
|
|
p := firewall.Packet{
|
|
|
LocalAddr: netip.MustParseAddr("1.2.3.4"),
|
|
@@ -478,7 +485,7 @@ func TestFirewall_Drop2(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{network.Addr()},
|
|
|
}
|
|
|
- h.buildNetworks(c.Certificate.Networks(), c.Certificate.UnsafeNetworks())
|
|
|
+ h.buildNetworks(myVpnNetworksTable, c.Certificate.Networks(), c.Certificate.UnsafeNetworks())
|
|
|
|
|
|
c1 := cert.CachedCertificate{
|
|
|
Certificate: &dummyCert{
|
|
@@ -493,7 +500,7 @@ func TestFirewall_Drop2(t *testing.T) {
|
|
|
peerCert: &c1,
|
|
|
},
|
|
|
}
|
|
|
- h1.buildNetworks(c1.Certificate.Networks(), c1.Certificate.UnsafeNetworks())
|
|
|
+ h1.buildNetworks(myVpnNetworksTable, c1.Certificate.Networks(), c1.Certificate.UnsafeNetworks())
|
|
|
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"default-group", "test-group"}, "", netip.Prefix{}, netip.Prefix{}, "", ""))
|
|
@@ -510,6 +517,8 @@ func TestFirewall_Drop3(t *testing.T) {
|
|
|
l := test.NewLogger()
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("1.1.1.1/8"))
|
|
|
|
|
|
p := firewall.Packet{
|
|
|
LocalAddr: netip.MustParseAddr("1.2.3.4"),
|
|
@@ -541,7 +550,7 @@ func TestFirewall_Drop3(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{network.Addr()},
|
|
|
}
|
|
|
- h1.buildNetworks(c1.Certificate.Networks(), c1.Certificate.UnsafeNetworks())
|
|
|
+ h1.buildNetworks(myVpnNetworksTable, c1.Certificate.Networks(), c1.Certificate.UnsafeNetworks())
|
|
|
|
|
|
c2 := cert.CachedCertificate{
|
|
|
Certificate: &dummyCert{
|
|
@@ -556,7 +565,7 @@ func TestFirewall_Drop3(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{network.Addr()},
|
|
|
}
|
|
|
- h2.buildNetworks(c2.Certificate.Networks(), c2.Certificate.UnsafeNetworks())
|
|
|
+ h2.buildNetworks(myVpnNetworksTable, c2.Certificate.Networks(), c2.Certificate.UnsafeNetworks())
|
|
|
|
|
|
c3 := cert.CachedCertificate{
|
|
|
Certificate: &dummyCert{
|
|
@@ -571,7 +580,7 @@ func TestFirewall_Drop3(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{network.Addr()},
|
|
|
}
|
|
|
- h3.buildNetworks(c3.Certificate.Networks(), c3.Certificate.UnsafeNetworks())
|
|
|
+ h3.buildNetworks(myVpnNetworksTable, c3.Certificate.Networks(), c3.Certificate.UnsafeNetworks())
|
|
|
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 1, 1, []string{}, "host1", netip.Prefix{}, netip.Prefix{}, "", ""))
|
|
@@ -597,6 +606,8 @@ func TestFirewall_Drop3V6(t *testing.T) {
|
|
|
l := test.NewLogger()
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("fd00::/7"))
|
|
|
|
|
|
p := firewall.Packet{
|
|
|
LocalAddr: netip.MustParseAddr("fd12::34"),
|
|
@@ -620,7 +631,7 @@ func TestFirewall_Drop3V6(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{network.Addr()},
|
|
|
}
|
|
|
- h.buildNetworks(c.Certificate.Networks(), c.Certificate.UnsafeNetworks())
|
|
|
+ h.buildNetworks(myVpnNetworksTable, c.Certificate.Networks(), c.Certificate.UnsafeNetworks())
|
|
|
|
|
|
// Test a remote address match
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
@@ -633,6 +644,8 @@ func TestFirewall_DropConntrackReload(t *testing.T) {
|
|
|
l := test.NewLogger()
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("1.1.1.1/8"))
|
|
|
|
|
|
p := firewall.Packet{
|
|
|
LocalAddr: netip.MustParseAddr("1.2.3.4"),
|
|
@@ -659,7 +672,7 @@ func TestFirewall_DropConntrackReload(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{network.Addr()},
|
|
|
}
|
|
|
- h.buildNetworks(c.Certificate.Networks(), c.Certificate.UnsafeNetworks())
|
|
|
+ h.buildNetworks(myVpnNetworksTable, c.Certificate.Networks(), c.Certificate.UnsafeNetworks())
|
|
|
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
require.NoError(t, fw.AddRule(true, firewall.ProtoAny, 0, 0, []string{"any"}, "", netip.Prefix{}, netip.Prefix{}, "", ""))
|
|
@@ -696,6 +709,8 @@ func TestFirewall_DropIPSpoofing(t *testing.T) {
|
|
|
l := test.NewLogger()
|
|
|
ob := &bytes.Buffer{}
|
|
|
l.SetOutput(ob)
|
|
|
+ myVpnNetworksTable := new(bart.Lite)
|
|
|
+ myVpnNetworksTable.Insert(netip.MustParsePrefix("192.0.2.1/24"))
|
|
|
|
|
|
c := cert.CachedCertificate{
|
|
|
Certificate: &dummyCert{
|
|
@@ -717,7 +732,7 @@ func TestFirewall_DropIPSpoofing(t *testing.T) {
|
|
|
},
|
|
|
vpnAddrs: []netip.Addr{c1.Certificate.Networks()[0].Addr()},
|
|
|
}
|
|
|
- h1.buildNetworks(c1.Certificate.Networks(), c1.Certificate.UnsafeNetworks())
|
|
|
+ h1.buildNetworks(myVpnNetworksTable, c1.Certificate.Networks(), c1.Certificate.UnsafeNetworks())
|
|
|
|
|
|
fw := NewFirewall(l, time.Second, time.Minute, time.Hour, c.Certificate)
|
|
|
|