mod_security hinter Reverse-Proxy und Client-IP

mod_security hinter Reverse-Proxy und Client-IP
client -> haproxy -> mod_security boxes -> backends

Problem: Mod_security-Boxen verwenden mod_rpaf mit der IP von Haproxy in „RPAFproxy_ips“. Die Apache-Protokollierung zeigt die echte IP der Clients, aber mod_security meldet trotzdem die IP von Haproxy, wie unten zu sehen.

Client-IP im Apache-Protokoll von Mod_Sec-Boxen gefunden

x.93.129.90 - - [14/Oct/2015:08:35:56 +0200] "GET /MYTEST HTTP/1.1" 301 524 "-" "curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5"

Mod_security meldet Proxy-IP (Client x.21.107.165)

 ==> /var/log/apache2/site.se_error.log <==
[Wed Oct 14 08:36:12.584500 2015] [:error] [pid 10264:tid 139895758558976]  [client x.21.107.165] ModSecurity: Access denied with code 403 (phase 2). 
Pattern match "\\\\balert\\\\b[^a-zA-Z0-9_]{0,}?\\\\(" at ARGS_NAMES:
<script>alert(1)</script>. [file "/usr/share/cwaf/rules/07_XSS_XSS.conf"] <etc>..

Die Leute im Internet scheinen rpaf mit mod_sec auszuführen. Mache ich etwas falsch?

Kennt jemand einen anderen guten Ansatz? Ich habe einige mod_sec-Regeln gesehen, die grundsätzlich einen Wert aus einem Header verwenden, sofern dieser vorhanden ist, andernfalls wird auf remote_addr zurückgegriffen, aber ich habe diese nicht zum Laufen gebracht.

Antwort1

mod_rpaf funktioniert nur mit Apache < 2.4, mod_remoteip funktioniert mit 2.4 und mod_security meldet jetzt die IP des Clients, nicht die des Load Balancers/Proxys

Unter Ubuntu 14.04

a2enmod remoteip
echo "RemoteIPHeader X-Client-Ip" > /etc/apache2/mods-enabled/remoteip.conf
service apache2 restart

verwandte Informationen