Skip to content

Commit ac95251

Browse files
committed
Add FilterSpam option
1 parent 3361b44 commit ac95251

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ SSH.Enabled = false # Default true
8585
# Used if target not specifies in some [[Domains]] section
8686
# And for direct access via IP address in manual or self-signed mode
8787
DefaultTarget = "8080"
88+
# If true, will filter spam to stdout from http/https servers.
89+
# Messages like`http: TLS handshake error ...` occur due to
90+
# bots/crawlers checking all public addresses.
91+
FilterSpam = true
8892
# If true will drop privileges if started from root.
8993
# Will not be able to save state(tokens) between restarts.
9094
DropPrivileges = false

logger.go

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package main
2+
3+
import (
4+
"log"
5+
"strings"
6+
)
7+
8+
type filteredLogger struct {
9+
Logger *log.Logger
10+
}
11+
12+
func (fl *filteredLogger) Write(p []byte) (n int, err error) {
13+
msg := string(p)
14+
15+
// https://github.com/golang/go/issues/26918
16+
if strings.HasPrefix(msg, "http: TLS handshake error") {
17+
return len(p), nil
18+
}
19+
20+
return fl.Logger.Writer().Write(p)
21+
}
22+
23+
// Less spam from bots/crawlers
24+
func newServerErrorLog() *log.Logger {
25+
if cfg.FilterSpam {
26+
return log.New(&filteredLogger{log.Default()}, "", 0)
27+
} else {
28+
return log.Default()
29+
}
30+
}

main.go

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ type Config struct {
4444
Cert string
4545
Key string
4646
}
47+
FilterSpam bool
4748
DropPrivileges bool
4849
Listen string // Interface to listen
4950
DefaultTarget string
@@ -101,6 +102,7 @@ func main() {
101102
cfg.SSH.AuthorizedKeys = "~/.ssh/authorized_keys"
102103
cfg.Certificate.Type = "self-signed"
103104
cfg.DefaultTarget = "8080"
105+
cfg.FilterSpam = true // Less spam like `http: TLS handshake error...`
104106
cfg.DropPrivileges = false // Drop privileges if started from root
105107
cfg.Listen = "0.0.0.0"
106108
cfg.RedirectHTTP = true // Start server on 80 port that will redirect all to 443 port

ssl-proxy.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,13 @@ func startWebServer() {
138138
http.Redirect(w, r, "https://"+r.Host+r.RequestURI, http.StatusMovedPermanently)
139139
}
140140
go func() {
141-
err := http.ListenAndServe(cfg.Listen+":80", http.HandlerFunc(redirectTLS))
141+
// TODO MaxHeaderBytes and timeouts to read/write/idle
142+
httpServer := http.Server{
143+
Addr: cfg.Listen + ":80",
144+
Handler: http.HandlerFunc(redirectTLS),
145+
ErrorLog: newServerErrorLog(),
146+
}
147+
err := httpServer.ListenAndServe()
142148
if err != nil {
143149
log.Fatal("HTTP redirection server failure", err)
144150
}
@@ -159,6 +165,7 @@ func startWebServer() {
159165
Addr: address,
160166
TLSConfig: m.TLSConfig(),
161167
Handler: mux,
168+
ErrorLog: newServerErrorLog(),
162169
}
163170
err = s.ListenAndServeTLS("", "")
164171
} else {

0 commit comments

Comments
 (0)