@@ -95,9 +95,14 @@ func (s *Server) listen(ctx context.Context) error {
95
95
}
96
96
97
97
if s .Config .Server .ProxyProtocol {
98
+ policy , err := s .proxyPolicy ()
99
+ if err != nil {
100
+ return fmt .Errorf ("invalid policy configuration: %w" , err )
101
+ }
102
+
98
103
sshListener = & proxyproto.Listener {
99
104
Listener : sshListener ,
100
- Policy : s . requirePolicy () ,
105
+ Policy : policy ,
101
106
ReadHeaderTimeout : time .Duration (s .Config .Server .ProxyHeaderTimeout ),
102
107
}
103
108
@@ -200,22 +205,22 @@ func (s *Server) handleConn(ctx context.Context, nconn net.Conn) {
200
205
})
201
206
}
202
207
203
- func (s * Server ) requirePolicy () proxyproto.PolicyFunc {
208
+ func (s * Server ) proxyPolicy () ( proxyproto.PolicyFunc , error ) {
204
209
if len (s .Config .Server .ProxyAllowed ) > 0 {
205
- return proxyproto .MustStrictWhiteListPolicy (s .Config .Server .ProxyAllowed )
210
+ return proxyproto .StrictWhiteListPolicy (s .Config .Server .ProxyAllowed )
206
211
}
207
212
208
213
// Set the Policy value based on config
209
214
// Values are taken from https://github.com/pires/go-proxyproto/blob/195fedcfbfc1be163f3a0d507fac1709e9d81fed/policy.go#L20
210
215
switch strings .ToLower (s .Config .Server .ProxyPolicy ) {
211
216
case "require" :
212
- return staticProxyPolicy (proxyproto .REQUIRE )
217
+ return staticProxyPolicy (proxyproto .REQUIRE ), nil
213
218
case "ignore" :
214
- return staticProxyPolicy (proxyproto .IGNORE )
219
+ return staticProxyPolicy (proxyproto .IGNORE ), nil
215
220
case "reject" :
216
- return staticProxyPolicy (proxyproto .REJECT )
221
+ return staticProxyPolicy (proxyproto .REJECT ), nil
217
222
default :
218
- return staticProxyPolicy (proxyproto .USE )
223
+ return staticProxyPolicy (proxyproto .USE ), nil
219
224
}
220
225
}
221
226
0 commit comments