1Panel/agent/utils/firewall/client.go

45 lines
1.1 KiB
Go

package firewall
import (
"errors"
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
"github.com/1Panel-dev/1Panel/agent/utils/firewall/client"
)
type FirewallClient interface {
Name() string // ufw firewalld
Start() error
Stop() error
Restart() error
Reload() error
Status() (bool, error)
Version() (string, error)
ListPort() ([]client.FireInfo, error)
ListForward() ([]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
EnableForward() error
}
func NewFirewallClient() (FirewallClient, error) {
firewalld := cmd.Which("firewalld")
ufw := cmd.Which("ufw")
if firewalld && ufw {
return nil, errors.New("It is detected that the system has both firewalld and ufw services. To avoid conflicts, please uninstall and try again!")
}
if firewalld {
return client.NewFirewalld()
}
if ufw {
return client.NewUfw()
}
return nil, errors.New("No system firewalld or ufw service detected, please check and try again!")
}