Mod_Security предотвращает брутфорс для Joomla

Mod_Security предотвращает брутфорс для Joomla

Я пытаюсь найти/создать правило Mod_Security для обнаружения и блокировки множественных неудачных попыток входа в последней версии Joomla. Я нашел ответ от марта 2015 года здесь:https://serverfault.com/a/646608/960638но в моих собственных тестах он не обнаруживает неудачных попыток входа. Даже при включенном ведении журнала он ничего не обнаруживает. Подозреваю, что код устарел.

Я нашел еще одно правило ModSec, опубликованное IT Octopus наhttps://www.itoctopus.com/a-modsecurity-rule-to-block-brute-force-attacks-on-a-joomla-website Код ниже. Я протестировал его на сервере, но обнаружил, что он слишком чувствителен и заблокировал меня после того, как я вошел и вышел из Joomla (справильныйреквизиты для входа).

<Location /administrator>
    SecDefaultAction phase:2,deny,status:403,log,auditlog
    SecRule IP:bf_counter "@eq 5" "id:1000002,phase:2,log,block,expirevar:IP.bf_counter=3600,msg:'IP address blocked because of a suspected brute force attack on the Joomla website'"
    SecRule ARGS:option "@streq com_login" "id:1000000,phase:2,chain,t:none,log,pass,msg:'Multiple Joomla authentication failures from IP address', setvar:IP.bf_counter=+1"
</Location>

Далее я нашел правило ModSecurity вhttp://artefact.io/brute-force-protection-modsecurity/и это тот, который я использую на своих серверах уже много месяцев. Он работал очень хорошо, пока вчера мы не обнаружили ошибку. У клиента есть 10 сайтов Joomla, и он обнаружил, что при входе на них (с правильными учетными данными) его IP-адрес был ограничен. Мне удалось повторить это во время собственного тестирования. Поэтому код ниже — лучший код, который мы когда-либо находили, но строки com_login / login, похоже, не различают неудачные и успешные входы. Он работает для предотвращения общего перебора, но не работает, когда у клиента много сайтов Joomla и он законно получает доступ к нескольким установкам одновременно. Вот код:

# Joomla Brute Force
SecAction "phase:1,pass,setvar:TX.max_requests=6,setvar:TX.requests_ttl=180,setvar:TX.block_ttl=900,initcol:ip=%{REMOTE_ADDR},nolog,id:5001000"
<LocationMatch "/administrator/index.php">
SecAction "phase:2,chain,nolog,id:5001022"
SecRule REQUEST_METHOD "^POST$" "chain"
SecRule ARGS_POST_NAMES "^username$" "chain"
SecRule ARGS_POST_NAMES "^passwd$" "chain"
SecRule ARGS_POST:option "^com_login$" "chain"
SecRule ARGS_POST:task "^login$" "chain"
SecAction "setvar:ip.request_count=+1,expirevar:ip.request_count=%{TX.requests_ttl}"

SecRule IP:request_count "@ge %{TX.max_requests}" "phase:2,drop,setvar:ip.blocked=1,expirevar:ip.blocked=%{TX.block_ttl},log,msg:'Joomla brute force. Blocking for %{TX.block_ttl} seconds',id:5001023"

</LocationMatch>

Наконец, я прочитал несколько постов, в которых предлагалось "заголовок P3P возвращается после успешного входа", и это можно использовать в правиле ModSecurity. Это было предложено @godzillante здесь:https://serverfault.com/a/646608/960638

Он использует ModSecurity phase 5 (анализирует файлы журнала), поэтому я не уверен, является ли это недостатком. И что еще важнее, в моем тестировании я не смог заставить его работать. Даже при включенном журналировании он не обнаружил неудачные попытки входа и не ограничил доступ. Вот код:

SecAction phase:1,nolog,pass,initcol:ip=%{REMOTE_ADDR},id:5000144
<Locationmatch "/administrator/index.php">
    SecRule ip:bf_block "@gt 0" "deny,status:401,log,id:5000145,msg:'ip address blocked for 5 minutes, more than 5 login attempts in 3 minutes.'"
    SecRule RESPONSE_HEADERS:P3P "streq 0" "phase:5,t:none,nolog,pass,setvar:ip.bf_counter=0,id:5000146"
    SecRule RESPONSE_HEADERS:P3P "!streq 0" "phase:5,chain,t:none,nolog,pass,setvar:ip.bf_counter=+1,deprecatevar:ip.bf_counter=1/180,id:5000147"
    SecRule ip:bf_counter "@gt 5" "t:none,setvar:ip.bf_block=1,expirevar:ip.bf_block=300,setvar:ip.bf_counter=0"
</locationmatch>

Моя цель здесь - улучшить код "Joomla Brute Force" (выше), потому что он блокирует флуд методом подбора, но, к сожалению, он также блокирует пользователей, когда они законно входят в Joomla много раз. Мне нужен код, который может определить разницу между неудачным входом и успешным входом в Joomla. Я работаю над этим уже некоторое время, поэтому я обращаюсь к сообществу здесь. Заранее спасибо!

Связанный контент