From aec8a8286fe293ef03b7d198af8532120b5f0978 Mon Sep 17 00:00:00 2001 From: d3m0k1d Date: Sun, 11 Jan 2026 16:27:45 +0300 Subject: [PATCH] Add base interface and ufw realisation --- internal/blocker/interface.go | 8 ++++++++ internal/blocker/ufw.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 internal/blocker/interface.go create mode 100644 internal/blocker/ufw.go diff --git a/internal/blocker/interface.go b/internal/blocker/interface.go new file mode 100644 index 0000000..3404063 --- /dev/null +++ b/internal/blocker/interface.go @@ -0,0 +1,8 @@ +package blocker + +type BlockerEngine interface { + Ban(ip string) error + Unban(ip string) error + IsBanned(ip string) (bool, error) + Flush() error +} diff --git a/internal/blocker/ufw.go b/internal/blocker/ufw.go new file mode 100644 index 0000000..8d5f915 --- /dev/null +++ b/internal/blocker/ufw.go @@ -0,0 +1,28 @@ +package blocker + +import ( + "github.com/d3m0k1d/BanForge/internal/logger" + "os/exec" +) + +type Ufw struct { + logger *logger.Logger +} + +func NewUfw(logger *logger.Logger) *Ufw { + return &Ufw{ + logger: logger, + } +} + +func (ufw *Ufw) Ban(ip string) error { + cmd := exec.Command("sudo", "ufw", "--force", "deny", "from", ip) + ufw.logger.Info("Banning " + ip) + return cmd.Run() +} + +func (ufw *Ufw) Unban(ip string) error { + cmd := exec.Command("sudo", "ufw", "--force", "delete", "deny", "from", ip) + ufw.logger.Info("Unbanning " + ip) + return cmd.Run() +}