Skip to content

Commit 1dbfb17

Browse files
author
Santhosh Manohar
authored
Merge pull request #961 from JrCs/fix-iptables-order
Fix bad order of iptables filter rules
2 parents 1a01921 + d0ca14b commit 1dbfb17

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

drivers/bridge/setup_ip_tables.go

-6
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ func setupIPTablesInternal(bridgeIface string, addr net.Addr, icc, ipmasq, hairp
140140
hpNatRule = iptRule{table: iptables.Nat, chain: "POSTROUTING", preArgs: []string{"-t", "nat"}, args: []string{"-m", "addrtype", "--src-type", "LOCAL", "-o", bridgeIface, "-j", "MASQUERADE"}}
141141
skipDNAT = iptRule{table: iptables.Nat, chain: DockerChain, preArgs: []string{"-t", "nat"}, args: []string{"-i", bridgeIface, "-j", "RETURN"}}
142142
outRule = iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-i", bridgeIface, "!", "-o", bridgeIface, "-j", "ACCEPT"}}
143-
inRule = iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-o", bridgeIface, "-m", "conntrack", "--ctstate", "RELATED,ESTABLISHED", "-j", "ACCEPT"}}
144143
)
145144

146145
// Set NAT.
@@ -173,11 +172,6 @@ func setupIPTablesInternal(bridgeIface string, addr net.Addr, icc, ipmasq, hairp
173172
return err
174173
}
175174

176-
// Set Accept on incoming packets for existing connections.
177-
if err := programChainRule(inRule, "ACCEPT INCOMING", enable); err != nil {
178-
return err
179-
}
180-
181175
return nil
182176
}
183177

drivers/bridge/setup_ip_tables_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ func TestProgramIPTable(t *testing.T) {
3232
}{
3333
{iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-d", "127.1.2.3", "-i", "lo", "-o", "lo", "-j", "DROP"}}, "Test Loopback"},
3434
{iptRule{table: iptables.Nat, chain: "POSTROUTING", preArgs: []string{"-t", "nat"}, args: []string{"-s", iptablesTestBridgeIP, "!", "-o", DefaultBridgeName, "-j", "MASQUERADE"}}, "NAT Test"},
35-
{iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-i", DefaultBridgeName, "!", "-o", DefaultBridgeName, "-j", "ACCEPT"}}, "Test ACCEPT NON_ICC OUTGOING"},
3635
{iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-o", DefaultBridgeName, "-m", "conntrack", "--ctstate", "RELATED,ESTABLISHED", "-j", "ACCEPT"}}, "Test ACCEPT INCOMING"},
36+
{iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-i", DefaultBridgeName, "!", "-o", DefaultBridgeName, "-j", "ACCEPT"}}, "Test ACCEPT NON_ICC OUTGOING"},
3737
{iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-i", DefaultBridgeName, "-o", DefaultBridgeName, "-j", "ACCEPT"}}, "Test enable ICC"},
3838
{iptRule{table: iptables.Filter, chain: "FORWARD", args: []string{"-i", DefaultBridgeName, "-o", DefaultBridgeName, "-j", "DROP"}}, "Test disable ICC"},
3939
}

iptables/iptables.go

+20
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,26 @@ func ProgramChain(c *ChainInfo, bridgeName string, hairpinMode, enable bool) err
189189
}
190190

191191
}
192+
establish := []string{
193+
"-o", bridgeName,
194+
"-m", "conntrack",
195+
"--ctstate", "RELATED,ESTABLISHED",
196+
"-j", "ACCEPT"}
197+
if !Exists(Filter, "FORWARD", establish...) && enable {
198+
insert := append([]string{string(Insert), "FORWARD"}, establish...)
199+
if output, err := Raw(insert...); err != nil {
200+
return err
201+
} else if len(output) != 0 {
202+
return fmt.Errorf("Could not create establish rule to %s: %s", c.Table, output)
203+
}
204+
} else if Exists(Filter, "FORWARD", establish...) && !enable {
205+
del := append([]string{string(Delete), "FORWARD"}, establish...)
206+
if output, err := Raw(del...); err != nil {
207+
return err
208+
} else if len(output) != 0 {
209+
return fmt.Errorf("Could not delete establish rule from %s: %s", c.Table, output)
210+
}
211+
}
192212
}
193213
return nil
194214
}

0 commit comments

Comments
 (0)