From 4797bacb7c8188b59c57a3ceae9e6baa88d27baa Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Wed, 9 Nov 2022 21:05:52 -0800 Subject: [PATCH] ipn/ipnlocal: send RST when serving an actionless TCPPortHandler Updates tailscale/corp#7515 Change-Id: I790f1b5d1e8a887e39bb573b4610b8f37a3f5963 Signed-off-by: Brad Fitzpatrick --- ipn/ipnlocal/serve.go | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/ipn/ipnlocal/serve.go b/ipn/ipnlocal/serve.go index d0475e9e7..7818de7af 100644 --- a/ipn/ipnlocal/serve.go +++ b/ipn/ipnlocal/serve.go @@ -37,6 +37,24 @@ func (b *LocalBackend) HandleInterceptedTCPConn(dport uint16, srcAddr netip.Addr return } + if tcph.HTTPS() { + conn, ok := getConn() + if !ok { + b.logf("localbackend: getConn didn't complete from %v to port %v", srcAddr, dport) + return + } + + // TODO(bradfitz): look up how; sniff SNI if ambiguous + hs := &http.Server{ + TLSConfig: &tls.Config{ + GetCertificate: b.getTLSServeCert, + }, + Handler: http.HandlerFunc(b.serveWebHandler), + } + hs.ServeTLS(netutil.NewOneConnListener(conn, nil), "", "") + return + } + if backDst := tcph.TCPForward(); backDst != "" { if tcph.TerminateTLS() { b.logf("TODO(bradfitz): finish") @@ -76,19 +94,8 @@ func (b *LocalBackend) HandleInterceptedTCPConn(dport uint16, srcAddr netip.Addr return } - conn, ok := getConn() - if !ok { - return - } - - // TODO(bradfitz): look up how; sniff SNI if ambiguous - hs := &http.Server{ - TLSConfig: &tls.Config{ - GetCertificate: b.getTLSServeCert, - }, - Handler: http.HandlerFunc(b.serveWebHandler), - } - hs.ServeTLS(netutil.NewOneConnListener(conn, nil), "", "") + b.logf("closing TCP conn to port %v (from %v) with actionless TCPPortHandler", dport, srcAddr) + sendRST() } func (b *LocalBackend) getServeHandler(r *http.Request) (_ ipn.HTTPHandlerView, ok bool) {