Fix: fix init nftables, fix logic ban/unban command
All checks were successful
build / build (push) Successful in 2m39s

This commit is contained in:
d3m0k1d
2026-01-20 23:41:22 +03:00
parent e275a73460
commit 16a174cf56
4 changed files with 37 additions and 5 deletions

View File

@@ -7,6 +7,7 @@ import (
"github.com/d3m0k1d/BanForge/internal/blocker" "github.com/d3m0k1d/BanForge/internal/blocker"
"github.com/d3m0k1d/BanForge/internal/config" "github.com/d3m0k1d/BanForge/internal/config"
"github.com/d3m0k1d/BanForge/internal/storage"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -17,6 +18,11 @@ var UnbanCmd = &cobra.Command{
Use: "unban", Use: "unban",
Short: "Unban IP", Short: "Unban IP",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
db, err := storage.NewDB()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
cfg, err := config.LoadConfig() cfg, err := config.LoadConfig()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
@@ -41,6 +47,11 @@ var UnbanCmd = &cobra.Command{
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)
} }
err = db.RemoveBan(ip)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("IP unblocked successfully!") fmt.Println("IP unblocked successfully!")
}, },
} }
@@ -49,7 +60,11 @@ var BanCmd = &cobra.Command{
Use: "ban", Use: "ban",
Short: "Ban IP", Short: "Ban IP",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
db, err := storage.NewDB()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
cfg, err := config.LoadConfig() cfg, err := config.LoadConfig()
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
@@ -74,7 +89,12 @@ var BanCmd = &cobra.Command{
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)
} }
fmt.Println("IP unblocked successfully!") err = db.AddBan(ip, "1y")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("IP blocked successfully!")
}, },
} }

View File

@@ -104,15 +104,14 @@ func (n *Nftables) Setup(config string) error {
nftConfig := `table inet banforge { nftConfig := `table inet banforge {
chain input { chain input {
type filter hook input priority 0 type filter hook input priority filter; policy accept;
policy accept jump banned
} }
chain banned { chain banned {
} }
} }
` `
cmd := exec.Command("sudo", "tee", config) cmd := exec.Command("sudo", "tee", config)
stdin, err := cmd.StdinPipe() stdin, err := cmd.StdinPipe()
if err != nil { if err != nil {

View File

@@ -129,6 +129,10 @@ func (j *Judge) UnbanChecker() {
} }
for _, ip := range ips { for _, ip := range ips {
err = j.db.RemoveBan(ip)
if err != nil {
j.logger.Error(fmt.Sprintf("Failed to remove ban: %v", err))
}
if err := j.Blocker.Unban(ip); err != nil { if err := j.Blocker.Unban(ip); err != nil {
j.logger.Error(fmt.Sprintf("Failed to unban IP %s: %v", ip, err)) j.logger.Error(fmt.Sprintf("Failed to unban IP %s: %v", ip, err))
continue continue

View File

@@ -111,6 +111,15 @@ func (d *DB) AddBan(ip string, ttl string) error {
return nil return nil
} }
func (d *DB) RemoveBan(ip string) error {
_, err := d.db.Exec("DELETE FROM bans WHERE ip = ?", ip)
if err != nil {
d.logger.Error("Failed to remove ban", "error", err)
return err
}
return nil
}
func (d *DB) BanList() error { func (d *DB) BanList() error {
var count int var count int