parent
35a1a954b0
commit
9181ce19c9
@ -1,15 +1,15 @@ |
||||
build: |
||||
go build ./cmd/dentata
|
||||
go build ./cmd/landmine
|
||||
go build ./cmd/dblocker
|
||||
|
||||
clean: |
||||
rm dentata landmine
|
||||
rm -f dentata dblocker
|
||||
|
||||
run_server: build |
||||
run_dentata: build |
||||
./dentata
|
||||
|
||||
run_mine: build |
||||
./landmine
|
||||
run_blocker: build |
||||
./dblocker
|
||||
|
||||
docs: |
||||
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) |
||||
} |
||||
@ -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…
Reference in new issue