firewall_linux.go 1008 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package libnetwork
  2. import (
  3. "github.com/docker/libnetwork/iptables"
  4. "github.com/sirupsen/logrus"
  5. )
  6. const userChain = "DOCKER-USER"
  7. func (c *controller) arrangeUserFilterRule() {
  8. c.Lock()
  9. arrangeUserFilterRule()
  10. c.Unlock()
  11. iptables.OnReloaded(func() {
  12. c.Lock()
  13. arrangeUserFilterRule()
  14. c.Unlock()
  15. })
  16. }
  17. // This chain allow users to configure firewall policies in a way that persists
  18. // docker operations/restarts. Docker will not delete or modify any pre-existing
  19. // rules from the DOCKER-USER filter chain.
  20. func arrangeUserFilterRule() {
  21. _, err := iptables.NewChain(userChain, iptables.Filter, false)
  22. if err != nil {
  23. logrus.Warnf("Failed to create %s chain: %v", userChain, err)
  24. return
  25. }
  26. if err = iptables.AddReturnRule(userChain); err != nil {
  27. logrus.Warnf("Failed to add the RETURN rule for %s: %v", userChain, err)
  28. return
  29. }
  30. err = iptables.EnsureJumpRule("FORWARD", userChain)
  31. if err != nil {
  32. logrus.Warnf("Failed to ensure the jump rule for %s: %v", userChain, err)
  33. }
  34. }