|
@@ -2,6 +2,8 @@ package bridge
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ log "github.com/Sirupsen/logrus"
|
|
|
+ "github.com/docker/libnetwork/iptables"
|
|
|
"io/ioutil"
|
|
|
)
|
|
|
|
|
@@ -10,7 +12,15 @@ const (
|
|
|
ipv4ForwardConfPerm = 0644
|
|
|
)
|
|
|
|
|
|
-func setupIPForwarding() error {
|
|
|
+func configureIPForwarding(enable bool) error {
|
|
|
+ var val byte
|
|
|
+ if enable {
|
|
|
+ val = '1'
|
|
|
+ }
|
|
|
+ return ioutil.WriteFile(ipv4ForwardConf, []byte{val, '\n'}, ipv4ForwardConfPerm)
|
|
|
+}
|
|
|
+
|
|
|
+func setupIPForwarding(enableIPTables bool) error {
|
|
|
// Get current IPv4 forward setup
|
|
|
ipv4ForwardData, err := ioutil.ReadFile(ipv4ForwardConf)
|
|
|
if err != nil {
|
|
@@ -20,10 +30,26 @@ func setupIPForwarding() error {
|
|
|
// Enable IPv4 forwarding only if it is not already enabled
|
|
|
if ipv4ForwardData[0] != '1' {
|
|
|
// Enable IPv4 forwarding
|
|
|
- if err := ioutil.WriteFile(ipv4ForwardConf, []byte{'1', '\n'}, ipv4ForwardConfPerm); err != nil {
|
|
|
- return fmt.Errorf("Setup IP forwarding failed: %v", err)
|
|
|
+ if err := configureIPForwarding(true); err != nil {
|
|
|
+ return fmt.Errorf("Enabling IP forwarding failed: %v", err)
|
|
|
}
|
|
|
+ // When enabling ip_forward set the default policy on forward chain to
|
|
|
+ // drop only if the daemon option iptables is not set to false.
|
|
|
+ if !enableIPTables {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ if err := iptables.SetDefaultPolicy(iptables.Filter, "FORWARD", iptables.Drop); err != nil {
|
|
|
+ if err := configureIPForwarding(false); err != nil {
|
|
|
+ log.Errorf("Disabling IP forwarding failed, %v", err)
|
|
|
+ }
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ iptables.OnReloaded(func() {
|
|
|
+ log.Debugf("Setting the default DROP policy on firewall reload")
|
|
|
+ if err := iptables.SetDefaultPolicy(iptables.Filter, "FORWARD", iptables.Drop); err != nil {
|
|
|
+ log.Warnf("Settig the default DROP policy on firewall reload failed, %v", err)
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
-
|
|
|
return nil
|
|
|
}
|