package firewall import ( "os" "github.com/1Panel-dev/1Panel/backend/buserr" "github.com/1Panel-dev/1Panel/backend/constant" "github.com/1Panel-dev/1Panel/backend/utils/firewall/client" ) type FirewallClient interface { Name() string // ufw firewalld Start() error Stop() error Reload() error Status() (string, error) // running not running Version() (string, error) ListPort() ([]client.FireInfo, error) ListAddress() ([]client.FireInfo, error) Port(port client.FireInfo, operation string) error RichRules(rule client.FireInfo, operation string) error PortForward(info client.Forward, operation string) error } func NewFirewallClient() (FirewallClient, error) { if _, err := os.Stat("/usr/sbin/firewalld"); err == nil { return client.NewFirewalld() } if _, err := os.Stat("/usr/sbin/ufw"); err == nil { return client.NewUfw() } return nil, buserr.New(constant.ErrFirewall) }