diff --git a/npm/iptm/iptm.go b/npm/iptm/iptm.go index 757a4efa2d..2827c1ba9c 100644 --- a/npm/iptm/iptm.go +++ b/npm/iptm/iptm.go @@ -4,6 +4,7 @@ package iptm import ( + "fmt" "os" "os/exec" "strconv" @@ -114,11 +115,65 @@ func (iptMgr *IptablesManager) InitNpmChains() error { } } + // Insert a RETURN on MARK rule for INGRESS in in AZURE-NPM-INGRESS-PORT chain + entry.Chain = util.IptablesAzureIngressPortChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesReturn, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureIngressMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("RETURN-on-INGRESS-mark-%s", util.IptablesAzureIngressMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesInsertionFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on INGRESS mark in AZURE-NPM-INGRESS-PORT chain.") + return err + } + } + // Create AZURE-NPM-INGRESS-FROM chain. if err = iptMgr.AddChain(util.IptablesAzureIngressFromChain); err != nil { return err } + // Insert a RETURN on MARK rule for INGRESS in in AZURE-NPM-INGRESS-FROM chain + entry.Chain = util.IptablesAzureIngressFromChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesReturn, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureIngressMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("RETURN-on-INGRESS-mark-%s", util.IptablesAzureIngressMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesInsertionFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on INGRESS mark in AZURE-NPM-INGRESS-FROM chain.") + return err + } + } + // Create AZURE-NPM-EGRESS-PORT chain. if err := iptMgr.AddChain(util.IptablesAzureEgressPortChain); err != nil { return err @@ -135,7 +190,61 @@ func (iptMgr *IptablesManager) InitNpmChains() error { if !exists { iptMgr.OperationFlag = util.IptablesAppendFlag if _, err := iptMgr.Run(entry); err != nil { - metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add AZURE-NPM-INGRESS-PORT chain to AZURE-NPM chain.") + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add AZURE-NPM-EGRESS-PORT chain to AZURE-NPM chain.") + return err + } + } + + // Insert a RETURN on MARK rule for EGRESS in AZURE-NPM-EGRESS-PORT + entry.Chain = util.IptablesAzureEgressPortChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesReturn, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureEgressMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("RETURN-on-EGRESS-mark-%s", util.IptablesAzureEgressMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesInsertionFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS mark in AZURE-NPM-EGRESS-PORT chain.") + return err + } + } + + // Insert a RETURN on MARK rule for EGRESS + INGRESS in AZURE-NPM-EGRESS-PORT + entry.Chain = util.IptablesAzureEgressPortChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesReturn, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureAcceptMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("RETURN-on-EGRESS-and-INGRESS-mark-%s", util.IptablesAzureAcceptMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesInsertionFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS and INGRESS mark in AZURE-NPM-EGRESS-PORT chain.") return err } } @@ -150,6 +259,142 @@ func (iptMgr *IptablesManager) InitNpmChains() error { return err } + // Insert a RETURN on MARK rule for EGRESS in AZURE-NPM-EGRESS-TO + entry.Chain = util.IptablesAzureEgressToChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesReturn, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureEgressMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("RETURN-on-EGRESS-mark-%s", util.IptablesAzureEgressMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesInsertionFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS mark in AZURE-NPM-EGRESS-TO chain.") + return err + } + } + + // Insert a RETURN on MARK rule for EGRESS + INGRESS in AZURE-NPM-EGRESS-TO + entry.Chain = util.IptablesAzureEgressToChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesReturn, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureAcceptMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("RETURN-on-EGRESS-and-INGRESS-mark-%s", util.IptablesAzureAcceptMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesInsertionFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add default RETURN on EGRESS and INGRESS mark in AZURE-NPM-EGRESS-TO chain.") + return err + } + } + + // TODO move this in to a function for readability + // Insert a ACCEPT rule for INGRESS-and-EGRESS marked packets + entry.Chain = util.IptablesAzureChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesAccept, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureAcceptMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("ACCEPT-on-INGRESS-and-EGRESS-mark-%s", util.IptablesAzureAcceptMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesAppendFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add marked ACCEPT rule to AZURE-NPM chain.") + return err + } + } + + // Insert a ACCEPT rule for INGRESS marked packets + entry.Chain = util.IptablesAzureChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesAccept, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureIngressMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("ACCEPT-on-INGRESS-mark-%s", util.IptablesAzureIngressMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesAppendFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add marked ACCEPT rule for INGRESS mark to AZURE-NPM chain.") + return err + } + } + + // Insert a ACCEPT rule for EGRESS marked packets + entry.Chain = util.IptablesAzureChain + entry.Specs = []string{ + util.IptablesJumpFlag, + util.IptablesAccept, + util.IptablesModuleFlag, + util.IptablesMarkVerb, + util.IptablesMarkFlag, + util.IptablesAzureEgressMarkHex, + util.IptablesModuleFlag, + util.IptablesCommentModuleFlag, + util.IptablesCommentFlag, + fmt.Sprintf("ACCEPT-on-EGRESS-mark-%s", util.IptablesAzureEgressMarkHex), + } + exists, err = iptMgr.Exists(entry) + if err != nil { + return err + } + + if !exists { + iptMgr.OperationFlag = util.IptablesAppendFlag + if _, err := iptMgr.Run(entry); err != nil { + metrics.SendErrorLogAndMetric(util.IptmID, "Error: failed to add marked ACCEPT rule for EGRESS mark to AZURE-NPM chain.") + return err + } + } + // Append AZURE-NPM-TARGET-SETS chain to AZURE-NPM chain. entry.Chain = util.IptablesAzureChain entry.Specs = []string{util.IptablesJumpFlag, util.IptablesAzureTargetSetsChain} diff --git a/npm/translatePolicy.go b/npm/translatePolicy.go index 3c70cc835c..7e8cc24ec7 100644 --- a/npm/translatePolicy.go +++ b/npm/translatePolicy.go @@ -224,7 +224,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -256,7 +258,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS util.GetHashedName(portName), util.IptablesDstFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -274,7 +278,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -333,7 +339,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS util.GetHashedName(portName), util.IptablesDstFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -362,7 +370,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -388,7 +398,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS util.GetHashedName(cidrIpsetName), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -448,7 +460,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS util.GetHashedName(portName), util.IptablesDstFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -473,7 +487,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -498,7 +514,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -545,7 +563,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS util.GetHashedName(portName), util.IptablesDstFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -570,7 +590,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -595,7 +617,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -659,7 +683,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS util.GetHashedName(portName), util.IptablesDstFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -689,7 +715,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -719,7 +747,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -740,7 +770,9 @@ func translateIngress(ns string, policyName string, targetSelector metav1.LabelS entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -877,7 +909,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe util.GetHashedName(util.KubeAllNamespacesFlag), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -909,7 +943,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe util.GetHashedName(portName), util.IptablesSrcFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -927,7 +963,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -986,7 +1024,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe util.GetHashedName(portName), util.IptablesSrcFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1015,7 +1055,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1047,7 +1089,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1107,7 +1151,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe util.GetHashedName(portName), util.IptablesSrcFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1132,7 +1178,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1157,7 +1205,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1204,7 +1254,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe util.GetHashedName(portName), util.IptablesSrcFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1229,7 +1281,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1254,7 +1308,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1318,7 +1374,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe util.GetHashedName(portName), util.IptablesSrcFlag+","+util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1348,7 +1406,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1378,7 +1438,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1399,7 +1461,9 @@ func translateEgress(ns string, policyName string, targetSelector metav1.LabelSe entry.Specs = append( entry.Specs, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, diff --git a/npm/translatePolicy_test.go b/npm/translatePolicy_test.go index 66e09c398e..1cb614b4da 100644 --- a/npm/translatePolicy_test.go +++ b/npm/translatePolicy_test.go @@ -710,7 +710,9 @@ func TestTranslateIngress(t *testing.T) { util.IptablesDstPortFlag, "6783", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -751,7 +753,9 @@ func TestTranslateIngress(t *testing.T) { util.IptablesDstPortFlag, "6783", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -803,7 +807,9 @@ func TestTranslateIngress(t *testing.T) { util.IptablesDstPortFlag, "6783", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1015,7 +1021,9 @@ func TestTranslateEgress(t *testing.T) { util.GetHashedName("testNotIn:frontend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1056,7 +1064,9 @@ func TestTranslateEgress(t *testing.T) { util.GetHashedName("testNotIn:frontend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1108,7 +1118,9 @@ func TestTranslateEgress(t *testing.T) { util.IptablesDstPortFlag, "6783", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1252,7 +1264,9 @@ func TestAllowBackendToFrontend(t *testing.T) { util.GetHashedName("app:backend"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1379,7 +1393,9 @@ func TestAllowAllToAppFrontend(t *testing.T) { util.GetHashedName("app:frontend"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1480,7 +1496,9 @@ func TestNamespaceToFrontend(t *testing.T) { util.GetHashedName("app:frontend"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1613,7 +1631,9 @@ func TestAllowAllNamespacesToAppFrontend(t *testing.T) { util.GetHashedName("app:frontend"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1761,7 +1781,9 @@ func TestAllowNamespaceDevToAppFrontend(t *testing.T) { util.GetHashedName("app:frontend"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -1913,7 +1935,9 @@ func TestAllowAllToK0AndK1AndAppFrontend(t *testing.T) { util.GetHashedName("k1:v1"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2103,7 +2127,9 @@ func TestAllowNsDevAndAppBackendToAppFrontend(t *testing.T) { util.GetHashedName("app:backend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2231,7 +2257,9 @@ func TestAllowInternalAndExternal(t *testing.T) { util.GetHashedName("app:backdoor"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2305,7 +2333,9 @@ func TestAllowBackendToFrontendPort8000(t *testing.T) { util.IptablesDstPortFlag, "8000", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2420,7 +2450,9 @@ func TestAllowBackendToFrontendWithMissingPort(t *testing.T) { util.GetHashedName("app:backend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2549,7 +2581,9 @@ func TestAllowMultipleLabelsToMultipleLabels(t *testing.T) { util.GetHashedName("team:aks"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2590,7 +2624,9 @@ func TestAllowMultipleLabelsToMultipleLabels(t *testing.T) { util.GetHashedName("team:aks"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2768,7 +2804,9 @@ func TestAllowAllFromAppBackend(t *testing.T) { util.GetHashedName("app:backend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2890,7 +2928,9 @@ func TestAllowAppFrontendToTCPPort53UDPPort53Policy(t *testing.T) { util.GetHashedName("app:frontend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2915,7 +2955,9 @@ func TestAllowAppFrontendToTCPPort53UDPPort53Policy(t *testing.T) { util.GetHashedName("app:frontend"), util.IptablesSrcFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -2941,7 +2983,9 @@ func TestAllowAppFrontendToTCPPort53UDPPort53Policy(t *testing.T) { util.GetHashedName(util.KubeAllNamespacesFlag), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3104,7 +3148,9 @@ func TestComplexPolicy(t *testing.T) { util.IptablesDstPortFlag, "6379", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3134,7 +3180,9 @@ func TestComplexPolicy(t *testing.T) { util.IptablesDstPortFlag, "6379", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3169,7 +3217,9 @@ func TestComplexPolicy(t *testing.T) { util.IptablesDstPortFlag, "6379", util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3243,7 +3293,9 @@ func TestComplexPolicy(t *testing.T) { util.GetHashedName(cidrEgressIpsetName), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3534,7 +3586,9 @@ func TestDropPrecedenceOverAllow(t *testing.T) { util.GetHashedName("testIn:pod-A"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3575,7 +3629,9 @@ func TestDropPrecedenceOverAllow(t *testing.T) { util.GetHashedName("testIn:pod-A"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3660,7 +3716,9 @@ func TestDropPrecedenceOverAllow(t *testing.T) { util.GetHashedName("all-namespaces"), util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureEgressXMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, @@ -3843,7 +3901,9 @@ func TestNamedPorts(t *testing.T) { util.GetHashedName("namedport:serve-80"), util.IptablesDstFlag + "," + util.IptablesDstFlag, util.IptablesJumpFlag, - util.IptablesAccept, + util.IptablesMark, + util.IptablesSetMarkFlag, + util.IptablesAzureIngressMarkHex, util.IptablesModuleFlag, util.IptablesCommentModuleFlag, util.IptablesCommentFlag, diff --git a/npm/util/const.go b/npm/util/const.go index 0e0e9319ab..f80aa6afc3 100644 --- a/npm/util/const.go +++ b/npm/util/const.go @@ -40,6 +40,8 @@ const ( IptablesAccept string = "ACCEPT" IptablesReject string = "REJECT" IptablesDrop string = "DROP" + IptablesReturn string = "RETURN" + IptablesMark string = "MARK" IptablesSrcFlag string = "src" IptablesDstFlag string = "dst" IptablesNotFlag string = "!" @@ -50,6 +52,9 @@ const ( IptablesModuleFlag string = "-m" IptablesSetModuleFlag string = "set" IptablesMatchSetFlag string = "--match-set" + IptablesSetMarkFlag string = "--set-mark" + IptablesMarkFlag string = "--mark" + IptablesMarkVerb string = "mark" IptablesStateModuleFlag string = "state" IptablesStateFlag string = "--state" IptablesMultiportFlag string = "multiport" @@ -75,6 +80,15 @@ const ( IptablesAzureIngressFromPodChain string = "AZURE-NPM-INGRESS-FROM-POD" IptablesAzureEgressToNsChain string = "AZURE-NPM-EGRESS-TO-NS" IptablesAzureEgressToPodChain string = "AZURE-NPM-EGRESS-TO-POD" + // Below are the skb->mark NPM will use for different criteria + IptablesAzureIngressMarkHex string = "0x2000" + // IptablesAzureEgressXMarkHex is used for us to not override but append to the existing MARK + // https://unix.stackexchange.com/a/283455 comment contains the explanation on + // MARK manipulations with offset. + IptablesAzureEgressXMarkHex string = "0x1000/0x1000" + // IptablesAzureEgressMarkHex is for checking the absolute value of the mark + IptablesAzureEgressMarkHex string = "0x1000" + IptablesAzureAcceptMarkHex string = "0x3000" ) //ipset related constants.