aboutsummaryrefslogtreecommitdiff
path: root/cmd/anubis/internal
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2025-04-26 19:45:45 -0400
committerXe Iaso <me@xeiaso.net>2025-04-26 19:45:45 -0400
commit929e2debb8b9a63c44e3bb02387a6774821ccb99 (patch)
treeb593e0beeaf17de681403a96c3d3bc84cfeefd62 /cmd/anubis/internal
parent08dd2fce0f46670d146da5748d46ddaa88897098 (diff)
downloadx-929e2debb8b9a63c44e3bb02387a6774821ccb99.tar.xz
x-929e2debb8b9a63c44e3bb02387a6774821ccb99.zip
feat(anubis): replace with tombstone
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd/anubis/internal')
-rw-r--r--cmd/anubis/internal/config/config.go58
-rw-r--r--cmd/anubis/internal/dnsbl/dnsbl.go95
-rw-r--r--cmd/anubis/internal/dnsbl/dnsbl_test.go55
-rw-r--r--cmd/anubis/internal/dnsbl/droneblresponse_string.go54
4 files changed, 0 insertions, 262 deletions
diff --git a/cmd/anubis/internal/config/config.go b/cmd/anubis/internal/config/config.go
deleted file mode 100644
index 8a86eef..0000000
--- a/cmd/anubis/internal/config/config.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package config
-
-import (
- "errors"
- "fmt"
-)
-
-type Rule string
-
-const (
- RuleUnknown = ""
- RuleAllow = "ALLOW"
- RuleDeny = "DENY"
- RuleChallenge = "CHALLENGE"
-)
-
-type Bot struct {
- Name string `json:"name"`
- UserAgentRegex *string `json:"user_agent_regex"`
- PathRegex *string `json:"path_regex"`
- Action Rule `json:"action"`
-}
-
-var (
- ErrBotMustHaveName = errors.New("config.Bot: must set name")
- ErrBotMustHaveUserAgentPathOrBoth = errors.New("config.Bot: must set either user_agent_regex, path_regex, or both")
- ErrUnknownAction = errors.New("config.Bot: unknown action")
-)
-
-func (b Bot) Valid() error {
- var errs []error
-
- if b.Name == "" {
- errs = append(errs, ErrBotMustHaveName)
- }
-
- if b.UserAgentRegex == nil && b.PathRegex == nil {
- errs = append(errs, ErrBotMustHaveUserAgentPathOrBoth)
- }
-
- switch b.Action {
- case RuleAllow, RuleChallenge, RuleDeny:
- // okay
- default:
- errs = append(errs, fmt.Errorf("%w: %q", ErrUnknownAction, b.Action))
- }
-
- if errs != nil {
- return fmt.Errorf("config: bot entry for %q is not valid: %w", b.Name, errors.Join(errs...))
- }
-
- return nil
-}
-
-type Config struct {
- Bots []Bot `json:"bots"`
- DNSBL bool `json:"dnsbl"`
-}
diff --git a/cmd/anubis/internal/dnsbl/dnsbl.go b/cmd/anubis/internal/dnsbl/dnsbl.go
deleted file mode 100644
index 60edd5c..0000000
--- a/cmd/anubis/internal/dnsbl/dnsbl.go
+++ /dev/null
@@ -1,95 +0,0 @@
-package dnsbl
-
-import (
- "errors"
- "fmt"
- "net"
- "strings"
-)
-
-//go:generate go tool golang.org/x/tools/cmd/stringer -type=DroneBLResponse
-
-type DroneBLResponse byte
-
-const (
- AllGood DroneBLResponse = 0
- IRCDrone DroneBLResponse = 3
- Bottler DroneBLResponse = 5
- UnknownSpambotOrDrone DroneBLResponse = 6
- DDOSDrone DroneBLResponse = 7
- SOCKSProxy DroneBLResponse = 8
- HTTPProxy DroneBLResponse = 9
- ProxyChain DroneBLResponse = 10
- OpenProxy DroneBLResponse = 11
- OpenDNSResolver DroneBLResponse = 12
- BruteForceAttackers DroneBLResponse = 13
- OpenWingateProxy DroneBLResponse = 14
- CompromisedRouter DroneBLResponse = 15
- AutoRootingWorms DroneBLResponse = 16
- AutoDetectedBotIP DroneBLResponse = 17
- Unknown DroneBLResponse = 255
-)
-
-func Reverse(ip net.IP) string {
- if ip.To4() != nil {
- return reverse4(ip)
- }
-
- return reverse6(ip)
-}
-
-func reverse4(ip net.IP) string {
- splitAddress := strings.Split(ip.String(), ".")
-
- // swap first and last octet
- splitAddress[0], splitAddress[3] = splitAddress[3], splitAddress[0]
- // swap middle octets
- splitAddress[1], splitAddress[2] = splitAddress[2], splitAddress[1]
-
- return strings.Join(splitAddress, ".")
-}
-
-func reverse6(ip net.IP) string {
- ipBytes := []byte(ip)
- var sb strings.Builder
-
- for i := len(ipBytes) - 1; i >= 0; i-- {
- // Split the byte into two nibbles
- highNibble := ipBytes[i] >> 4
- lowNibble := ipBytes[i] & 0x0F
-
- // Append the nibbles in reversed order
- sb.WriteString(fmt.Sprintf("%x.%x.", lowNibble, highNibble))
- }
-
- return sb.String()[:len(sb.String())-1]
-}
-
-func Lookup(ipStr string) (DroneBLResponse, error) {
- ip := net.ParseIP(ipStr)
- if ip == nil {
- return Unknown, errors.New("dnsbl: input is not an IP address")
- }
-
- revIP := Reverse(ip) + ".dnsbl.dronebl.org"
-
- ips, err := net.LookupIP(revIP)
- if err != nil {
- var dnserr *net.DNSError
- if errors.As(err, &dnserr) {
- if dnserr.IsNotFound {
- return AllGood, nil
- }
- }
-
- return Unknown, err
- }
-
- if len(ips) != 0 {
- for _, ip := range ips {
- return DroneBLResponse(ip.To4()[3]), nil
- }
- }
-
- return UnknownSpambotOrDrone, nil
-}
diff --git a/cmd/anubis/internal/dnsbl/dnsbl_test.go b/cmd/anubis/internal/dnsbl/dnsbl_test.go
deleted file mode 100644
index 9bcf0e7..0000000
--- a/cmd/anubis/internal/dnsbl/dnsbl_test.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package dnsbl
-
-import (
- "fmt"
- "net"
- "testing"
-)
-
-func TestReverse4(t *testing.T) {
- cases := []struct {
- inp, out string
- }{
- {"1.2.3.4", "4.3.2.1"},
- }
-
- for _, cs := range cases {
- t.Run(fmt.Sprintf("%s->%s", cs.inp, cs.out), func(t *testing.T) {
- out := reverse4(net.ParseIP(cs.inp))
-
- if out != cs.out {
- t.Errorf("wanted %s\ngot: %s", cs.out, out)
- }
- })
- }
-}
-
-func TestReverse6(t *testing.T) {
- cases := []struct {
- inp, out string
- }{
- {
- inp: "1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0",
- out: "0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1",
- },
- }
-
- for _, cs := range cases {
- t.Run(fmt.Sprintf("%s->%s", cs.inp, cs.out), func(t *testing.T) {
- out := reverse6(net.ParseIP(cs.inp))
-
- if out != cs.out {
- t.Errorf("wanted %s, got: %s", cs.out, out)
- }
- })
- }
-}
-
-func TestLookup(t *testing.T) {
- resp, err := Lookup("27.65.243.194")
- if err != nil {
- t.Fatalf("it broked: %v", err)
- }
-
- t.Logf("response: %x", resp)
-} \ No newline at end of file
diff --git a/cmd/anubis/internal/dnsbl/droneblresponse_string.go b/cmd/anubis/internal/dnsbl/droneblresponse_string.go
deleted file mode 100644
index 5104dda..0000000
--- a/cmd/anubis/internal/dnsbl/droneblresponse_string.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// Code generated by "stringer -type=DroneBLResponse"; DO NOT EDIT.
-
-package dnsbl
-
-import "strconv"
-
-func _() {
- // An "invalid array index" compiler error signifies that the constant values have changed.
- // Re-run the stringer command to generate them again.
- var x [1]struct{}
- _ = x[AllGood-0]
- _ = x[IRCDrone-3]
- _ = x[Bottler-5]
- _ = x[UnknownSpambotOrDrone-6]
- _ = x[DDOSDrone-7]
- _ = x[SOCKSProxy-8]
- _ = x[HTTPProxy-9]
- _ = x[ProxyChain-10]
- _ = x[OpenProxy-11]
- _ = x[OpenDNSResolver-12]
- _ = x[BruteForceAttackers-13]
- _ = x[OpenWingateProxy-14]
- _ = x[CompromisedRouter-15]
- _ = x[AutoRootingWorms-16]
- _ = x[AutoDetectedBotIP-17]
- _ = x[Unknown-255]
-}
-
-const (
- _DroneBLResponse_name_0 = "AllGood"
- _DroneBLResponse_name_1 = "IRCDrone"
- _DroneBLResponse_name_2 = "BottlerUnknownSpambotOrDroneDDOSDroneSOCKSProxyHTTPProxyProxyChainOpenProxyOpenDNSResolverBruteForceAttackersOpenWingateProxyCompromisedRouterAutoRootingWormsAutoDetectedBotIP"
- _DroneBLResponse_name_3 = "Unknown"
-)
-
-var (
- _DroneBLResponse_index_2 = [...]uint8{0, 7, 28, 37, 47, 56, 66, 75, 90, 109, 125, 142, 158, 175}
-)
-
-func (i DroneBLResponse) String() string {
- switch {
- case i == 0:
- return _DroneBLResponse_name_0
- case i == 3:
- return _DroneBLResponse_name_1
- case 5 <= i && i <= 17:
- i -= 5
- return _DroneBLResponse_name_2[_DroneBLResponse_index_2[i]:_DroneBLResponse_index_2[i+1]]
- case i == 255:
- return _DroneBLResponse_name_3
- default:
- return "DroneBLResponse(" + strconv.FormatInt(int64(i), 10) + ")"
- }
-}