@@ -59,31 +59,32 @@ type Bouncer struct {
5959 name string
6060 template * template.Template
6161
62- enabled bool
63- appsecEnabled bool
64- appsecHost string
65- appsecFailureBlock bool
66- appsecUnreachableBlock bool
67- crowdsecScheme string
68- crowdsecHost string
69- crowdsecKey string
70- crowdsecMode string
71- crowdsecMachineID string
72- crowdsecPassword string
73- crowdsecScenarios []string
74- updateInterval int64
75- updateMaxFailure int
76- defaultDecisionTimeout int64
77- customHeader string
78- crowdsecStreamRoute string
79- crowdsecHeader string
80- banTemplateString string
81- clientPoolStrategy * ip.PoolStrategy
82- serverPoolStrategy * ip.PoolStrategy
83- httpClient * http.Client
84- cacheClient * cache.Client
85- captchaClient * captcha.Client
86- log * logger.Log
62+ enabled bool
63+ appsecEnabled bool
64+ appsecHost string
65+ appsecFailureBlock bool
66+ appsecUnreachableBlock bool
67+ crowdsecScheme string
68+ crowdsecHost string
69+ crowdsecKey string
70+ crowdsecMode string
71+ crowdsecMachineID string
72+ crowdsecPassword string
73+ crowdsecScenarios []string
74+ updateInterval int64
75+ updateMaxFailure int
76+ defaultDecisionTimeout int64
77+ remediationCustomHeader string
78+ forwardedCustomHeader string
79+ crowdsecStreamRoute string
80+ crowdsecHeader string
81+ banTemplateString string
82+ clientPoolStrategy * ip.PoolStrategy
83+ serverPoolStrategy * ip.PoolStrategy
84+ httpClient * http.Client
85+ cacheClient * cache.Client
86+ captchaClient * captcha.Client
87+ log * logger.Log
8788}
8889
8990// New creates the crowdsec bouncer plugin.
@@ -142,26 +143,27 @@ func New(_ context.Context, next http.Handler, config *configuration.Config, nam
142143 name : name ,
143144 template : template .New ("CrowdsecBouncer" ).Delims ("[[" , "]]" ),
144145
145- enabled : config .Enabled ,
146- crowdsecMode : config .CrowdsecMode ,
147- appsecEnabled : config .CrowdsecAppsecEnabled ,
148- appsecHost : config .CrowdsecAppsecHost ,
149- appsecFailureBlock : config .CrowdsecAppsecFailureBlock ,
150- appsecUnreachableBlock : config .CrowdsecAppsecUnreachableBlock ,
151- crowdsecScheme : config .CrowdsecLapiScheme ,
152- crowdsecHost : config .CrowdsecLapiHost ,
153- crowdsecKey : config .CrowdsecLapiKey ,
154- crowdsecMachineID : config .CrowdsecCapiMachineID ,
155- crowdsecPassword : config .CrowdsecCapiPassword ,
156- crowdsecScenarios : config .CrowdsecCapiScenarios ,
157- updateInterval : config .UpdateIntervalSeconds ,
158- updateMaxFailure : config .UpdateMaxFailure ,
159- customHeader : config .ForwardedHeadersCustomName ,
160- defaultDecisionTimeout : config .DefaultDecisionSeconds ,
161- banTemplateString : banTemplateString ,
162- crowdsecStreamRoute : crowdsecStreamRoute ,
163- crowdsecHeader : crowdsecHeader ,
164- log : log ,
146+ enabled : config .Enabled ,
147+ crowdsecMode : config .CrowdsecMode ,
148+ appsecEnabled : config .CrowdsecAppsecEnabled ,
149+ appsecHost : config .CrowdsecAppsecHost ,
150+ appsecFailureBlock : config .CrowdsecAppsecFailureBlock ,
151+ appsecUnreachableBlock : config .CrowdsecAppsecUnreachableBlock ,
152+ crowdsecScheme : config .CrowdsecLapiScheme ,
153+ crowdsecHost : config .CrowdsecLapiHost ,
154+ crowdsecKey : config .CrowdsecLapiKey ,
155+ crowdsecMachineID : config .CrowdsecCapiMachineID ,
156+ crowdsecPassword : config .CrowdsecCapiPassword ,
157+ crowdsecScenarios : config .CrowdsecCapiScenarios ,
158+ updateInterval : config .UpdateIntervalSeconds ,
159+ updateMaxFailure : config .UpdateMaxFailure ,
160+ remediationCustomHeader : config .RemediationHeadersCustomName ,
161+ forwardedCustomHeader : config .ForwardedHeadersCustomName ,
162+ defaultDecisionTimeout : config .DefaultDecisionSeconds ,
163+ banTemplateString : banTemplateString ,
164+ crowdsecStreamRoute : crowdsecStreamRoute ,
165+ crowdsecHeader : crowdsecHeader ,
166+ log : log ,
165167 serverPoolStrategy : & ip.PoolStrategy {
166168 Checker : serverChecker ,
167169 },
@@ -202,6 +204,7 @@ func New(_ context.Context, next http.Handler, config *configuration.Config, nam
202204 config .CaptchaProvider ,
203205 config .CaptchaSiteKey ,
204206 config .CaptchaSecretKey ,
207+ config .RemediationHeadersCustomName ,
205208 config .CaptchaHTMLFilePath ,
206209 config .CaptchaGracePeriodSeconds ,
207210 )
@@ -236,8 +239,8 @@ func (bouncer *Bouncer) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
236239 return
237240 }
238241
239- // Here we check for the trusted IPs in the customHeader
240- remoteIP , err := ip .GetRemoteIP (req , bouncer .serverPoolStrategy , bouncer .customHeader )
242+ // Here we check for the trusted IPs in the forwardedCustomHeader
243+ remoteIP , err := ip .GetRemoteIP (req , bouncer .serverPoolStrategy , bouncer .forwardedCustomHeader )
241244 if err != nil {
242245 bouncer .log .Error (fmt .Sprintf ("ServeHTTP:getRemoteIp ip:%s %s" , remoteIP , err .Error ()))
243246 handleBanServeHTTP (bouncer , rw )
@@ -337,6 +340,9 @@ func handleBanServeHTTP(bouncer *Bouncer, rw http.ResponseWriter) {
337340 return
338341 }
339342 rw .Header ().Set ("Content-Type" , "text/html; charset=utf-8" )
343+ if bouncer .remediationCustomHeader != "" {
344+ rw .Header ().Set (bouncer .remediationCustomHeader , "ban" )
345+ }
340346 rw .WriteHeader (http .StatusForbidden )
341347 fmt .Fprint (rw , bouncer .banTemplateString )
342348}
0 commit comments