Я использую IP-коллекцию в настройке с балансировкой нагрузки, поэтому я хочу, чтобы mod_security действовал на заголовок x-forwarded for вместо REMOTE_ADDR. Вот мое правило:
SecAction "phase:1,nolog,pass,initcol:IP=%{REQUEST_HEADERS.x-forwarded-for}"
SecAction "nolog,phase:1,setvar:IP.hitcount=+1,deprecatevar:IP.hitcount=100/15"
SecRule IP:hitcount "@gt 600" "nolog,drop,phase:1,msg:'Possible DoS'"
Независимо от того, на что я установил ключ после IP =, я получаю IP-адрес балансировщика нагрузки, через который, очевидно, всех забанят. Это ошибка или я что-то не так? Я даже жестко закодировал ключ на 1.1.1.1, и он ВСЕ ЕЩЕ установил IP-адрес балансировщика нагрузки в файле ip.pag. ПОМОГИТЕ! :]
Я нашел проблему. Я помещал это правило в локальный файл правил, который нужно устанавливать в последнюю очередь. Коллекция IP уже была инициализирована другим правилом, имеющим приоритет.
Решением было переместить верхнюю строку (с initcol
in) в начало конфигурации mod_security, чтобы все ссылки на коллекцию IP использовали x-forwarded-for
ключ, который я установил, а не значение по умолчанию REMOTE_ADDR
.
Я надеюсь, что это спасет кого-то еще от утреннего выдергивания волос! :]
Я также исследовал проблему с mod_security за прокси / балансировщиком нагрузки. Вы могли бы попробовать mod_rpaf или mod_extract_forwarded2 так что вам не нужно корректировать свои правила.