Changeset 418 in code


Ignore:
Timestamp:
Sep 7, 2020, 7:28:24 PM (5 years ago)
Author:
contact
Message:

Add support for the PROXY protocol

IPs whitelisted in accept-proxy-ip can now use the PROXY protocol to
indicate the original source/destination addresses.

Closes: https://todo.sr.ht/~emersion/soju/81

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/cmd/soju/main.go

    r417 r418  
    99        "net/url"
    1010        "strings"
     11
     12        "github.com/pires/go-proxyproto"
    1113
    1214        "git.sr.ht/~emersion/soju"
     
    8688                                log.Fatalf("failed to start TLS listener on %q: %v", listen, err)
    8789                        }
     90                        ln = proxyProtoListener(ln, srv)
    8891                        go func() {
    8992                                log.Fatal(srv.Serve(ln))
     
    98101                                log.Fatalf("failed to start listener on %q: %v", listen, err)
    99102                        }
     103                        ln = proxyProtoListener(ln, srv)
    100104                        go func() {
    101105                                log.Fatal(srv.Serve(ln))
     
    139143                                log.Fatalf("failed to start listener on %q: %v", listen, err)
    140144                        }
     145                        ln = proxyProtoListener(ln, srv)
    141146                        go func() {
    142147                                log.Fatal(srv.Identd.Serve(ln))
     
    150155        log.Fatal(srv.Run())
    151156}
     157
     158func proxyProtoListener(ln net.Listener, srv *soju.Server) net.Listener {
     159        return &proxyproto.Listener{
     160                Listener: ln,
     161                Policy: func(upstream net.Addr) (proxyproto.Policy, error) {
     162                        tcpAddr, ok := upstream.(*net.TCPAddr)
     163                        if !ok {
     164                                return proxyproto.IGNORE, nil
     165                        }
     166                        if srv.AcceptProxyIPs.Contains(tcpAddr.IP) {
     167                                return proxyproto.USE, nil
     168                        }
     169                        return proxyproto.IGNORE, nil
     170                },
     171        }
     172}
  • trunk/go.mod

    r410 r418  
    88        github.com/klauspost/compress v1.10.11 // indirect
    99        github.com/mattn/go-sqlite3 v1.14.1
     10        github.com/pires/go-proxyproto v0.1.3
    1011        golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a
    1112        golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8 // indirect
  • trunk/go.sum

    r410 r418  
    5151github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
    5252github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
     53github.com/pires/go-proxyproto v0.1.3 h1:2XEuhsQluSNA5QIQkiUv8PfgZ51sNYIQkq/yFquiSQM=
     54github.com/pires/go-proxyproto v0.1.3/go.mod h1:Odh9VFOZJCf9G8cLW5o435Xf1J95Jw9Gw5rnCjcwzAY=
    5355github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
    5456github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
Note: See TracChangeset for help on using the changeset viewer.