commit 8d76c480e890d03b03f2a8a2580a3fa8ab5844dc Author: Christine Dodrill Date: Sat Nov 23 15:00:02 2019 +0000 initial commit diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c0143d9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM xena/go:1.13.3 AS build +ENV PORT 2222 +ENV TARGET 127.0.0.1:22 +ENV GOPROXY https://cache.greedo.xeserv.us +ENV CGO_ENABLED 0 +WORKDIR /within/proxystrip +COPY . . +RUN GOBIN=/usr/local/bin go install + +FROM gitea/gitea:1.10.0 +COPY --from=build /usr/local/bin/proxystrip /usr/local/bin/proxystrip +COPY run.sh /etc/s6/proxystrip/run diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..87df039 --- /dev/null +++ b/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2019 Christine Dodrill + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e6ae0f --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# proxystrip + +A hack to make my gitea instance work over SSH+PROXY protocol. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7101226 --- /dev/null +++ b/go.mod @@ -0,0 +1,12 @@ +module tulpa.dev/within/proxystrip + +go 1.13 + +require ( + github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 // indirect + github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 + github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect + github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..236e556 --- /dev/null +++ b/go.sum @@ -0,0 +1,12 @@ +github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e h1:h0gP0hBU6DsA5IQduhLWGOEfIUKzJS5hhXQBSgHuF/g= +github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 h1:CkmB2l68uhvRlwOTPrwnuitSxi/S3Cg4L5QYOcL9MBc= +github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456/go.mod h1:zFhibDvPDWmtk4dAQ05sRobtyoffEHygEt3wSNuAzz8= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= diff --git a/main.go b/main.go new file mode 100644 index 0000000..4f9ae42 --- /dev/null +++ b/main.go @@ -0,0 +1,51 @@ +package main + +import ( + "flag" + "io" + "log" + "net" + + "github.com/armon/go-proxyproto" + "github.com/facebookgo/flagenv" +) + +var ( + target = flag.String("target-host", "127.0.0.1:22", "target TCP host:port") + port = flag.String("port", "2222", "TCP port to listen on") +) + +func main() { + flagenv.Parse() + flag.Parse() + + list, err := net.Listen("tcp", ":"+*port) + if err != nil { + panic(err) + } + + log.Printf("now listening on port %s, forwarding traffic to %s", *port, *target) + + proxyList := &proxyproto.Listener{Listener: list} + + for { + conn, err := proxyList.Accept() + if err != nil { + log.Println(err) + continue + } + go dataTo(conn) + } +} + +func dataTo(conn net.Conn) { + defer conn.Close() + peer, err := net.Dial("tcp", *target) + if err != nil { + log.Println(*target, err) + } + defer peer.Close() + + go io.Copy(conn, peer) + io.Copy(peer, conn) +} diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..1d1198f --- /dev/null +++ b/run.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +proxystrip