diff --git a/firewall/firewall.go b/firewall/firewall.go index ac3e85d8..51f06886 100644 --- a/firewall/firewall.go +++ b/firewall/firewall.go @@ -136,11 +136,14 @@ func handlePacket(pkt packet.Packet) { // return // } + // for UX and performance + meta := pkt.Info() + // allow local dns - if (pkt.Info().DstPort == 53 || pkt.Info().SrcPort == 53) && - (pkt.Info().Src.Equal(pkt.Info().Dst) || // Windows redirects back to same interface - pkt.Info().Src.Equal(localhost4) || // Linux sometimes does 127.0.0.1->127.0.0.53 - pkt.Info().Dst.Equal(localhost4)) { + if (meta.DstPort == 53 || meta.SrcPort == 53) && + (meta.Src.Equal(meta.Dst) || // Windows redirects back to same interface + meta.Src.Equal(localhost4) || // Linux sometimes does 127.0.0.1->127.0.0.53 + meta.Dst.Equal(localhost4)) { log.Debugf("accepting local dns: %s", pkt) _ = pkt.PermanentAccept() return @@ -148,7 +151,7 @@ func handlePacket(pkt packet.Packet) { // allow api access, if address was parsed successfully if apiPortSet { - if (pkt.Info().DstPort == apiPort || pkt.Info().SrcPort == apiPort) && pkt.Info().Src.Equal(pkt.Info().Dst) { + if (meta.DstPort == apiPort || meta.SrcPort == apiPort) && meta.Src.Equal(meta.Dst) { log.Debugf("accepting api connection: %s", pkt) _ = pkt.PermanentAccept() return @@ -163,7 +166,7 @@ func handlePacket(pkt packet.Packet) { // allow ICMP, IGMP and DHCP // TODO: actually handle these - switch pkt.Info().Protocol { + switch meta.Protocol { case packet.ICMP: log.Debugf("accepting ICMP: %s", pkt) _ = pkt.PermanentAccept() @@ -177,7 +180,7 @@ func handlePacket(pkt packet.Packet) { _ = pkt.PermanentAccept() return case packet.UDP: - if pkt.Info().DstPort == 67 || pkt.Info().DstPort == 68 { + if meta.DstPort == 67 || meta.DstPort == 68 { log.Debugf("accepting DHCP: %s", pkt) _ = pkt.PermanentAccept() return @@ -194,11 +197,11 @@ func handlePacket(pkt packet.Packet) { // check if packet is destined for tunnel // switch pkt.IPVersion() { // case packet.IPv4: - // if TunnelNet4 != nil && TunnelNet4.Contains(pkt.Info().Dst) { + // if TunnelNet4 != nil && TunnelNet4.Contains(meta.Dst) { // tunnelHandler(pkt) // } // case packet.IPv6: - // if TunnelNet6 != nil && TunnelNet6.Contains(pkt.Info().Dst) { + // if TunnelNet6 != nil && TunnelNet6.Contains(meta.Dst) { // tunnelHandler(pkt) // } // } diff --git a/firewall/master.go b/firewall/master.go index ccac9664..c5731a37 100644 --- a/firewall/master.go +++ b/firewall/master.go @@ -51,14 +51,15 @@ func DecideOnConnection(conn *network.Connection, pkt packet.Packet) { //nolint: // check if process is communicating with itself if pkt != nil { // TODO: evaluate the case where different IPs in the 127/8 net are used. - if conn.Process().Pid >= 0 && pkt.Info().Src.Equal(pkt.Info().Dst) { + pktInfo := pkt.Info() + if conn.Process().Pid >= 0 && pktInfo.Src.Equal(pktInfo.Dst) { // get PID otherPid, _, err := process.GetPidByEndpoints( - pkt.Info().RemoteIP(), - pkt.Info().RemotePort(), - pkt.Info().LocalIP(), - pkt.Info().LocalPort(), - pkt.Info().Protocol, + pktInfo.RemoteIP(), + pktInfo.RemotePort(), + pktInfo.LocalIP(), + pktInfo.LocalPort(), + pktInfo.Protocol, ) if err != nil { log.Warningf("filter: failed to find local peer process PID: %s", err)