mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2026-09-23 16:00:52 +00:00
* 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
37 lines
995 B
Go
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
|
|
}
|