Renamed the processes to more match what they do.

master
Zed A. Shaw 3 days ago
parent 35a1a954b0
commit 9181ce19c9
  1. 2
      .gitignore
  2. 10
      Makefile
  3. 77
      cmd/dblocker/main.go
  4. 74
      cmd/dentata/main.go
  5. 89
      cmd/landmine/main.go

2
.gitignore vendored

@ -31,4 +31,4 @@ public
ffmpeg* ffmpeg*
renders renders
dentata dentata
landmine dblocker

@ -1,15 +1,15 @@
build: build:
go build ./cmd/dentata go build ./cmd/dentata
go build ./cmd/landmine go build ./cmd/dblocker
clean: clean:
rm dentata landmine rm -f dentata dblocker
run_server: build run_dentata: build
./dentata ./dentata
run_mine: build run_blocker: build
./landmine ./dblocker
docs: docs:
pkgsite -open pkgsite -open

@ -0,0 +1,77 @@
package main
import (
"fmt"
"net"
"log"
"bufio"
"flag"
"os/exec"
)
type Options struct {
Addr string
}
func ParseOptions() Options {
var opts Options
flag.StringVar(&opts.Addr, "addr", "127.0.0.1:9001", "address to bind to recv blocks")
flag.Parse()
return opts
}
func handleConnection(conn net.Conn) {
defer conn.Close()
scan := bufio.NewScanner(conn)
for scan.Scan() {
addr, _, err := net.SplitHostPort(scan.Text())
if err != nil {
fmt.Println("Invalid host:port")
continue
}
if addr == "127.0.0.1" {
fmt.Println("IGNORE", addr)
continue
}
fmt.Println("BLOCK: ", addr)
cmd := exec.Command("nft",
"add", "rule", "inet",
"dentata", "input",
"ip", "saddr",
addr, "drop")
err = cmd.Run()
if err != nil {
panic(err)
}
}
}
func listener(addr string) {
server, err := net.Listen("tcp", addr)
if err != nil { panic(err) }
for {
conn, err := server.Accept()
if err != nil {
log.Println("ACCEPT ERROR", err)
} else {
go handleConnection(conn)
}
}
}
func main() {
opts := ParseOptions()
listener(opts.Addr)
}

@ -4,56 +4,42 @@ import (
"fmt" "fmt"
"net" "net"
"log" "log"
"bufio" "sync"
"syscall"
"flag" "flag"
"os/exec"
) )
type Options struct { type Options struct {
Addr string ConfigPath string
Jail bool
} }
func ParseOptions() Options { func ParseOptions() Options {
var opts Options var opts Options
flag.StringVar(&opts.Addr, "addr", "127.0.0.1:9001", "address to bind to recv blocks") flag.StringVar(&opts.ConfigPath, "config", "dentata.json", "config.json to load")
flag.BoolVar(&opts.Jail, "jail", false, "drop to low priv jail")
flag.Parse() flag.Parse()
return opts return opts
} }
func handleConnection(conn net.Conn) { func handleConnection(conn net.Conn) {
defer conn.Close() defer conn.Close()
addr := conn.RemoteAddr()
fmt.Println("Connect from", addr.Network(), addr.String())
scan := bufio.NewScanner(conn) // send explosion notice to dentata
report, err := net.Dial("tcp","127.0.0.1:9001")
for scan.Scan() { if err != nil { panic(err) }
addr, _, err := net.SplitHostPort(scan.Text()) defer report.Close()
if err != nil {
fmt.Println("Invalid host:port")
continue
}
if addr == "127.0.0.1" {
fmt.Println("IGNORE", addr)
continue
}
fmt.Println("BLOCK: ", addr)
cmd := exec.Command("nft",
"add", "rule", "inet",
"dentata", "input",
"ip", "saddr",
addr, "drop")
err = cmd.Run() report.Write([]byte(addr.String()))
if err != nil {
panic(err)
}
}
} }
func listener(addr string) { func listener(addr string) {
server, err := net.Listen("tcp", addr) server, err := net.Listen("tcp", addr)
@ -70,8 +56,34 @@ func listener(addr string) {
} }
} }
func ChrootJailLOL() {
err := syscall.Chdir("tmp")
if err != nil { panic(err) }
err = syscall.Chroot(".")
if err != nil { panic(err) }
err = syscall.Setuid(1000)
if err != nil { panic(err) }
syscall.Setgid(1000)
if err != nil { panic(err) }
}
func main() { func main() {
opts := ParseOptions() opts := ParseOptions()
listener(opts.Addr) var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Go(func () {
listener(fmt.Sprintf("0.0.0.0:%d", 8000 + i))
})
}
if opts.Jail {
ChrootJailLOL()
}
wg.Wait()
} }

@ -1,89 +0,0 @@
package main
import (
"fmt"
"net"
"log"
"sync"
"syscall"
"flag"
)
type Options struct {
ConfigPath string
Jail bool
}
func ParseOptions() Options {
var opts Options
flag.StringVar(&opts.ConfigPath, "config", "dentata.json", "config.json to load")
flag.BoolVar(&opts.Jail, "jail", false, "drop to low priv jail")
flag.Parse()
return opts
}
func handleConnection(conn net.Conn) {
defer conn.Close()
addr := conn.RemoteAddr()
fmt.Println("Connect from", addr.Network(), addr.String())
// send explosion notice to dentata
report, err := net.Dial("tcp","127.0.0.1:9001")
if err != nil { panic(err) }
defer report.Close()
report.Write([]byte(addr.String()))
}
func listener(addr string) {
server, err := net.Listen("tcp", addr)
if err != nil { panic(err) }
for {
conn, err := server.Accept()
if err != nil {
log.Println("ACCEPT ERROR", err)
} else {
go handleConnection(conn)
}
}
}
func ChrootJailLOL() {
err := syscall.Chdir("tmp")
if err != nil { panic(err) }
err = syscall.Chroot(".")
if err != nil { panic(err) }
err = syscall.Setuid(1000)
if err != nil { panic(err) }
syscall.Setgid(1000)
if err != nil { panic(err) }
}
func main() {
opts := ParseOptions()
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Go(func () {
listener(fmt.Sprintf("0.0.0.0:%d", 8000 + i))
})
}
if opts.Jail {
ChrootJailLOL()
}
wg.Wait()
}
Loading…
Cancel
Save