diff --git a/agent/init/firewall/firwall.go b/agent/init/firewall/firewall.go similarity index 94% rename from agent/init/firewall/firwall.go rename to agent/init/firewall/firewall.go index fdb695b5d..a1a7005db 100644 --- a/agent/init/firewall/firwall.go +++ b/agent/init/firewall/firewall.go @@ -7,6 +7,7 @@ import ( "github.com/1Panel-dev/1Panel/agent/app/service" "github.com/1Panel-dev/1Panel/agent/global" "github.com/1Panel-dev/1Panel/agent/utils/firewall" + firewallClient "github.com/1Panel-dev/1Panel/agent/utils/firewall/client" "github.com/1Panel-dev/1Panel/agent/utils/firewall/client/iptables" ) @@ -29,6 +30,10 @@ func Init() { global.LOG.Errorf("load postrouting rules from file failed, err: %v", err) return } + if err := firewallClient.EnableIptablesForward(); err != nil { + global.LOG.Errorf("enable iptables forward failed, err: %v", err) + return + } global.LOG.Infof("loaded iptables rules for forward from file successfully") } if clientName == "ufw" { diff --git a/agent/utils/firewall/client/iptables/common.go b/agent/utils/firewall/client/iptables/common.go index e066833ea..225dbb84a 100644 --- a/agent/utils/firewall/client/iptables/common.go +++ b/agent/utils/firewall/client/iptables/common.go @@ -45,7 +45,7 @@ const ( func RunWithStd(tab, rule string) (string, error) { cmdMgr := cmd.NewCommandMgr(cmd.WithIgnoreExist1(), cmd.WithTimeout(20*time.Second)) - stdout, err := cmdMgr.RunWithStdoutBashCf("%s iptables -t %s %s", cmd.SudoHandleCmd(), tab, rule) + stdout, err := cmdMgr.RunWithStdoutBashCf("%s iptables -w -t %s %s", cmd.SudoHandleCmd(), tab, rule) if err != nil { global.LOG.Errorf("iptables command failed [table=%s, rule=%s]: %v", tab, rule, err) return stdout, err diff --git a/agent/utils/firewall/client/iptables/persistence.go b/agent/utils/firewall/client/iptables/persistence.go index d5380794f..41f11bada 100644 --- a/agent/utils/firewall/client/iptables/persistence.go +++ b/agent/utils/firewall/client/iptables/persistence.go @@ -60,15 +60,14 @@ func SaveRulesToFile(tab, chain, fileName string) error { } func LoadRulesFromFile(tab, chain, fileName string) error { - rulesFile := path.Join(global.Dir.FirewallDir, fileName) - if _, err := os.Stat(rulesFile); os.IsNotExist(err) { - return nil - } - if err := AddChain(tab, chain); err != nil { global.LOG.Errorf("create chain %s failed: %v", chain, err) return err } + rulesFile := path.Join(global.Dir.FirewallDir, fileName) + if _, err := os.Stat(rulesFile); os.IsNotExist(err) { + return nil + } data, err := os.ReadFile(rulesFile) if err != nil { global.LOG.Errorf("read rules from file %s failed, err: %v", rulesFile, err) diff --git a/frontend/src/views/host/firewall/advance/index.vue b/frontend/src/views/host/firewall/advance/index.vue index cfb5b9330..4a255e00c 100644 --- a/frontend/src/views/host/firewall/advance/index.vue +++ b/frontend/src/views/host/firewall/advance/index.vue @@ -17,7 +17,7 @@