1

Я хочу запретить IP-адреса, которые вызывают ошибки mupltiple 404 на моем веб-сайте. Я много искал и нашел несколько сценариев, которые дали мне идеи для начала. И я их объединил. Вот мой сценарий:mod_secure скрипт для блокирования IP-адресов, вызывающих несколько 404s

# Determining temp data dir  
SecDataDir "C:\logs\datastore" 
# 
# Loading previous data for the IP request 
SecAction "phase:1,initcol:ip=%{REMOTE_ADDR},id:'1006'" 
# 
# Incrementing block_script counter if client caused status #404 
SecRule RESPONSE_STATUS "@streq 404" "phase:2,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=30,id:'1007'" 
# 
# Denying the request if the block_script counter is greater than 3 
SecRule IP:BLOCK_SCRIPT "@gt 3" "phase:2,deny,status:403,id:'1008'" 

По какой-то причине он не работает. Я считаю, что есть некоторая ошибка. Мне очень жаль, я не программирующий гуру или даже программист. Я просто играю с моим домашним проектом, когда у меня есть время. Я надеюсь, что кто-то поможет мне, и моя ошибка легко найти и исправить.

Заранее благодарен!

«datastore» dir создан, доступен, и я там могу видеть 2 файла размером 0 байт.

Спасибо!

+0

Может ли это быть связано с ограничением разбора ошибки 404? «Обратите внимание, что некоторые коды состояния ответа (например, 404) обрабатываются ранее в цикле запросов Apache, и я не могу быть вызван, как ожидалось." " ** SecAuditEngine ** ModSecurity в настоящее время может регистрировать большинство, но не все транзакции. Транзакции, связанные с ошибками (например, транзакции 400 и 404), используют другой путь выполнения, который ModSecurity не поддерживает. » – EIKA

ответ

0

Вы пытаетесь прочитать статус ответа в правиле фазы 2. Это не будет установлен до фазы 3 так изменить правила 1007 в фазу 3.

Не уверен, что это отличная идея, хотя по ряду причин:

  • Сначала постоянные коллекции в ModSecurity, как известно, нестабильны при любой загрузке, и вы отслеживаете каждый IP-адрес, который попадает на ваш сервер, каждый раз, когда он попадает. Это много отслеживания и большой доступ к этой коллекции. Лично до тех пор, пока ModSecurity не включит систему хранения в памяти, а не на основе диска, я не рекомендую их использовать, а вместо этого настоятельно рекомендую, чтобы ModSecurity использовался только с теми же правилами транзакций, которые не требуют постоянного хранения.

  • Далее вы блокируете три 404s в том же 30-секундном окне. Одна плохо настроенная веб-страница с несколькими недостающими изображениями вы блокируете законный трафик. Кроме того, если в поисковой системе есть 3 пропущенных страницы, вы блокируете поисковые роботы (например, GoogleBot), что может привести к значительному повреждению вашего сайта.

  • И наконец, в чем смысл? Вероятно, вы не сохраняете нагрузку на свой веб-сервер, так как накладные расходы при запуске этого правила ModSecurity и возврат 403, скорее всего, значительно превысят накладные расходы при возврате простого старого 404. 30-секундный тайм-аут кажется произвольным, легко обойти (либо намеренно или нет), и это приведет к странности, которая будет просто запутаться позже («Эй, странная ошибка, некоторые ответы работают, некоторые возвращаются 403 - казалось бы, наугад. Я не могу понять»), и анализ реальных 404 или веб-трафика станет сложно по мере изменения классификации.

Не уверен, что вы хотели получить этот совет, а не только ответ, но подумали, что я предупредил бы вас, если бы вы не подумали об этом!

+0

Спасибо за ваш ответ. Теперь, с измененной фазой, он начинает работать! Но для этого требуется 4 из 404 обращений Но не 3. Вы знаете, почему? Я хочу это исправить. О ваших проблемах. Пожалуйста, не волнуйтесь об этом вообще! Это тестовые значения, я буду использовать другой. И это для какого-то специального проекта с достоверным низкий трафик и очень высокая активность хакеров. Здесь всего 20-50 посетителей в день как максимум. И, наконец, я настрою запрет на неделю и увеличу 404 против 5 или что-то в этом роде. FYI: это Apache на базе Windows и решения например, Fail2Ban не будет работать. – EIKA

+0

Действительно ли фаза 3 основывалась на вашем ответе ниже? –

+0

Да, спасибо! Я опубликовал окончательный рабочий код. – EIKA

1

Похоже, окончательный и точно рабочая версия:

SecAction "phase:1,initcol:ip=%{REMOTE_ADDR},id:'1006'" 
SecRule RESPONSE_STATUS "@streq 404" "phase:3,pass,setvar:ip.block_script=+1,expirevar:ip.block_script=600,id:'1007'" 
SecRule IP:BLOCK_SCRIPT "@ge 3" "phase:2,deny,status:403,id:'1008'" 

Вы должны изменить ip.block_script вар (время запрета) и после GE (Счетчик ошибок) к требуемым значениям. Например. 3600 и 5 соответственно.

 Смежные вопросы

  • Нет связанных вопросов^_^