Changeset 418 in code for trunk/cmd/soju/main.go


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

File:
1 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}
Note: See TracChangeset for help on using the changeset viewer.