Files
ssongliu 7915230121 refactor: rebuild firewall management (#13628)
* refactor(firewall): rebuild rule management foundation

* refactor(firewall): streamline rule checks and inventory

* feat(firewall): improve native rule inventory

* refactor(firewall): refine rule management

* feat: add Docker port guard

* feat(firewall): support native nftables

* feat(firewall): add configurable firewall selection

* feat(firewall): support nftables docker port guard

* refactor(firewall): complete v2 rule management and migration

* refactor(firewall): align state and API contracts

* refactor(firewall): unify rule management operations

* feat: refine firewall v2 rules and forwarding

* fix(firewall): harden dual-stack rule management

* refactor(firewall): consolidate rule validation and persistence
2026-08-24 12:51:34 +08:00

37 lines
995 B
Go

package providers
import (
"fmt"
"strings"
"time"
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
)
type Nftables struct{}
func NewNftables() (*Nftables, error) { return &Nftables{}, nil }
func (n *Nftables) Name() string { return "nftables" }
func (n *Nftables) Status() (bool, error) {
_, err := cmd.NewCommandMgr(cmd.WithTimeout(20*time.Second)).RunWithOptionalSudoAndStdout("nft", "list", "tables")
return err == nil, err
}
func (n *Nftables) Start() error { return nil }
func (n *Nftables) Stop() error { return nil }
func (n *Nftables) Restart() error { return nil }
func (n *Nftables) Version() (string, error) {
stdout, err := cmd.NewCommandMgr(cmd.WithTimeout(20*time.Second)).RunWithStdout("nft", "--version")
if err != nil {
return "", fmt.Errorf("failed to get nftables version: %w", err)
}
fields := strings.Fields(strings.TrimSpace(stdout))
if len(fields) >= 2 {
return strings.TrimPrefix(fields[1], "v"), nil
}
return strings.TrimSpace(stdout), nil
}