Цель: Снижение нагрузки на сервер из-за вредоносных запросов
Иногда серверы получают большое количество запросов на несуществующие страницы. Обычно запросы носят злонамеренный характер, потому что злоумышленник ищет админку или другие файлы с помощью грубой силы.
Эти запросы могут серьезно снизить производительность сервера, потому что Apache раскручивает так много соединений. Когда такие инструменты, как Fail2ban не могут их остановить (т.е. атаки с использованием нескольких подсетей вместо одного IP-адреса), каковы варианты?
Есть ли способ настроить Apache или другой дополнительный инструмент для переопределения веб-приложения и возврата не загруженной страницы 404 (статический .html и т. Д.)?
Есть ли способ настроить Apache или другой дополнительный инструмент для переопределения веб-приложения и возврата не загруженной страницы 404 (статический .html и т. Д.)?
Это довольно специфично для вашего веб-приложения.
Если он использует шаблон фронт-контроллера, например один index.php
обработка практически неограниченного количества различных URL-адресов SEO, например /foo/bar
, и слишком много разных страниц "категорий" (первого уровня) для включения в конфигурацию, и там нет удачи.
Однако предположим, что ваш веб-сайт обрабатывает только /
(домашняя страница), затем некоторые /shop/<product name>
и /blog/<name-of-the-article>
.
Вы можете создать простое правило (не Apache man здесь, извините) в NGINX, например, следующее:
location ~ ^/(?!($|shop/|blog/)) {
return 404;
}
Что заставит веб-сервер выдать прямую ошибку «не обнаружено», вообще не вызывая PHP, для запросов, которые, как известно, не являются частью «схемы» URL-адресов вашего приложения.
В этом отношении эффективен еще один метод: приманки.
Обычно боты пытаются проверить уязвимые программы / плагины, но даже не присутствует на вашем сайте с самого начала.
Вы можете использовать тот факт, что знаете, что у вас их нет. А потом мгновенно запретить всем, кто пытается загрузить эти конечные точки. (например, см. это приманка для NGINX техника).
Вы можете реализовать то же самое с Apache. По сути, вам необходимо указать местоположения, которые не принадлежат вашему веб-сайту и обычно используются для эксплойтов.
Например. вы знаете, что у вас есть сайт Magento, но многие боты будут пытаться увидеть / войти в систему как Wordpress. Так /wp-login.php
- одно из мест расположения ваших приманок.
После определения в конфигурации вам необходимо передать эти запросы в сценарий FastCGI, который взаимодействует с вашим брандмауэром, чтобы немедленно запретить.
Это не только не вызовет загрузки PHP, но и вызовет мгновенный бан в брандмауэре.
Таким образом, это сработает намного быстрее по сравнению с Fail2ban (который отслеживает журналы, например, на предмет повторных неудачных попыток входа в систему), потому что бан происходит, как только поступает запрос. Однако это может работать как дополнительная мера к Fail2ban.
Выгрузка страницы для подкачки губительна для производительности. Настройте Apache MPM так, чтобы максимально возможное количество обслуживаемых одновременных подключений удобно размещалось в памяти. Примечательно, что MaxRequestWorkers
директива.
Подобное планирование емкости помогает как при резких скачках трафика, так и при злонамеренных.
Следите за временем отклика. Количество поддельных запросов не имеет большого значения, если ни один из них не нарушает вашу безопасность, а производительность остается приемлемой.
Запрет IP помогает рецидивистам. Однако вряд ли будет много повторов, что снижает эффективность fail2ban. Взрыв всего Интернета в поисках уязвимости веб-приложения месяца часто более полезен для злоумышленника, чем тщательное сканирование вас. Кроме того, один злоумышленник может прийти с нескольких адресов источника.
Если веб-сервер все еще не работает, подумайте о том, чтобы разместить его за безопасным прокси-сервером.
Перенесите оценку в свой брандмауэр. То, что вы ищете, - это частота 404 для URL верхнего уровня по IP. Изучите свои текущие журналы, чтобы понять скорость появления этих существ, а затем адаптируйте свое правило к их поведению.
На этом этапе у вас есть несколько вариантов: * отправить их в медленную приманку, затем на бесплатный уровень облака, где страницы случайным образом 503. * В брандмауэре 503 IP на время от 5 до 30 минут. Что вы хотите сделать, так это загнать бота в загон и не дать им изменить код бота. Разработчику сложнее всего проверить код, который иногда работает ... а 503 - это допустимый код возврата.