From 424f5db9af82b5785e2e6aa4df40ca5f2f024e8f Mon Sep 17 00:00:00 2001 From: d3m0k1d Date: Sun, 11 Jan 2026 17:56:19 +0300 Subject: [PATCH] Update ufw --- internal/blocker/ufw.go | 20 ++++++++++++++++---- internal/blocker/validators.go | 18 ++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 internal/blocker/validators.go diff --git a/internal/blocker/ufw.go b/internal/blocker/ufw.go index 8d5f915..f019f2b 100644 --- a/internal/blocker/ufw.go +++ b/internal/blocker/ufw.go @@ -16,13 +16,25 @@ func NewUfw(logger *logger.Logger) *Ufw { } func (ufw *Ufw) Ban(ip string) error { + validateIP(ip) cmd := exec.Command("sudo", "ufw", "--force", "deny", "from", ip) - ufw.logger.Info("Banning " + ip) - return cmd.Run() + output, err := cmd.CombinedOutput() + if err != nil { + ufw.logger.Error(err.Error()) + return err + } + ufw.logger.Info("Banning " + ip + " " + string(output)) + return nil } func (ufw *Ufw) Unban(ip string) error { + validateIP(ip) cmd := exec.Command("sudo", "ufw", "--force", "delete", "deny", "from", ip) - ufw.logger.Info("Unbanning " + ip) - return cmd.Run() + output, err := cmd.CombinedOutput() + if err != nil { + ufw.logger.Error(err.Error()) + return err + } + ufw.logger.Info("Unbanning " + ip + " " + string(output)) + return nil } diff --git a/internal/blocker/validators.go b/internal/blocker/validators.go new file mode 100644 index 0000000..1aaa6f3 --- /dev/null +++ b/internal/blocker/validators.go @@ -0,0 +1,18 @@ +package blocker + +import ( + "fmt" + "net" +) + +func validateIP(ip string) error { + if ip == "" { + return fmt.Errorf("empty IP") + } + + if net.ParseIP(ip) == nil { + return fmt.Errorf("invalid IP: %s", ip) + } + + return nil +}