Conexiones a Mod Security a través de un proxy o balanceador

Cuando tenemos un servidor web con modSecurity y recibimos peticiones que pasan a través de un proxy o un balanceador, nos encontramos con el problema de que si queremos manipular la gestión de esas peticiones según la IP de origen y el balanceador la sobreescribe, no es posible hacerlo con el método habitual.

El método habitual es utilizar la directiva REMOTE_ADDR ya que contiene la IP origen desde la que se está realizando la solicitud. Si el proxy la sobreescribe esta IP será siempre la del proxy por lo que no podemos filtrarla o ponerla en lista blanca pues afectaría a todas las peticiones, no sólo a la del cliente final.

En estos casos, hay que fijarse en las cabeceras/headers de la petición, pues probablemente nos encontremos con una llamada X-Forwarded-For que contendrá la IP original del cliente que ha realizado la petición. La IP de la esta cabecera es la que usaremos para establecer la regla de modSecurity.

SecRule REQUEST_HEADERS:X-Forwarded-For "@Contains XX.XX.XX.XX"....

Como veis, podemos trabajar en función de cualquiera de las cabeceras que trae la petición web simplemente especificando la etiqueta de la cabecera y su valor. Si por ejemplo, quisieramos deshabilitar modSecurity para una IP:

SecRule REQUEST_HEADERS:X-Forwarded-For "@Contains 10.10.102.3" phase:1,log,allow,ctl:ruleEngine=off,id:99999

Recordad que el ID de regla debe ser único para evitar el siguiente error al reiniciar Apache:

Syntax error on line 30 of /etc/httpd/conf.d/mod_security.conf:
ModSecurity: No action id present within the rule
Action 'configtest' failed.