client -> haproxy -> mod_security boxes -> backends
问题:mod_security 框使用 mod_rpaf 和 haproxy 的 ip(在“RPAFproxy_ips”中)。Apache 日志显示客户端真实 ip,但 mod_security 仍报告 haproxys ip,如下所示。
在 mod_sec 框的 apache 日志中找到客户端 ip
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 报告代理 ip(客户端 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>..
网络上的人们似乎都使用 mod_sec 来运行 rpaf,我做错了什么吗?
有人知道其他好方法吗?我见过一些 mod_sec 规则,它们基本上使用标头中的值(如果存在),否则回退到 remote_addr,但我没有让它们工作。
答案1
mod_rpaf 仅适用于 apache < 2.4,mod_remoteip 适用于 2.4,mod_security 现在报告客户端 ip,而不是负载平衡器/代理的 ip
在 Ubuntu 14.04 上
a2enmod remoteip
echo "RemoteIPHeader X-Client-Ip" > /etc/apache2/mods-enabled/remoteip.conf
service apache2 restart