client -> haproxy -> mod_security boxes -> backends
Проблема: блоки mod_security используют mod_rpaf с ip haproxy в 'RPAFproxy_ips'. В журнале Apache отображается реальный ip клиентов, но mod_security по-прежнему сообщает ip haproxy, как показано ниже.
Клиентский IP-адрес найден в журнале Apache для mod_sec-боксов
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>..
Похоже, что пользователи сети запускают rpaf с mod_sec. Может, я что-то не так делаю?
Кто-нибудь знает другой хороший подход? Я видел некоторые правила mod_sec, которые в основном используют значение из заголовка, если оно есть, в противном случае возвращаются к remote_addr, но мне не удалось заставить их работать.
решение1
mod_rpaf работает только с Apache < 2.4, mod_remoteip работает с 2.4, а mod_security теперь сообщает IP-адрес клиента, а не IP-адрес балансировщика нагрузки/прокси.
На убунту 14.04
a2enmod remoteip
echo "RemoteIPHeader X-Client-Ip" > /etc/apache2/mods-enabled/remoteip.conf
service apache2 restart