Защита от F5. Настраиваем Apache правильно.
Раздел(ы): GNU Linux - CentOS / Debian
Просмотры: 24372
Комментарии: 6
Нажав клавишу F5 в окне браузера и удерживая ее в течении нескольких минут вы можете устроить легкую DDOS атаку на сайт. Функциональная клавиша F5 дает команду браузеру перезагрузить страницу.
Если вы ее нажали и удерживаете длительное время, то ваш компьютер пытается загрузить ее (страницу) много и много раз, чем создает нагрузку на сервер в виде множественных запросов. А так как возможности любого сервера не безграничны, то от переизбытка «чувств» запросов он может перестать работать.
Зависнет сервер или нет зависит от технических характеристик и настроек самого сервера, сайта и используемой CMS. В этой статье я опишу как правильно настроить вэб-сервер Apache2 чтобы даже самый скромный сервер VDS с 512 МБ памяти справлялся с большим количеством запросов, в том числе вызванных клавишей F5.
Подготовка к настройке сервера
Определим какой модуль MPM использует Apache2. Для CentOS это выглядит так:
# httpd -V | grep MPM
Получаем ответ:
Server MPM: Prefork -D APACHE_MPM_DIR="server/mpm/prefork"
Отлично, у нас Server MPM: Prefork
Настройка Apache, что бы не было проблем с жором памяти
В CentOS надо отредактировать файл /etc/httpd/conf/httpd.conf.
Который по-умолчанию может иметь следующее содержание:
<IfModule mpm_prefork_module> StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 200 MaxRequestsPerChild 4000 </IfModule>
Краткое описание параметров модуля Apache MPM Prefork
- StartServers — число дочерних процессов, создаваемых при запуске сервера.
- MinSpareServers — минимальное число неиспользуемых (запасных) дочерних процессов сервера, ожидающих потенциальные запросы.
- MaxSpareServers — максимальное число запасных процессов, ожидающих потенциальные запросы. Если это число будет превышено, лишние процессы будут убиты.
- MaxClients — самый важный параметр модуля MPM prefork, устанавливает верхний предел количества одновременно активных процессов. Именно от него зависит потребление памяти. Его значение перекрывает значение предыдущих параметров.
- ServerLimit обычно равен MaxClients.
- MaxRequestsPerChild — как часто сервер перерабатывает процессы, убивая старые и начиная (запуская) новые. Полезен при утечках памяти Apache и его библиотек.
- KeepAlive — обеспечивает долгоживущие сессии HTTP, позволяющие отправлять несколько запросов через одно и то же соединение. Полезно включить, если страницы содержат много изображений. Но если используете NGINX как проксисервер, то оставьте значение OFF.
Самый важный параметр = MaxClients, он как раз и говорит о количестве одновременных процессов вебсервера Apache.
Как узнать значение MaxClients
Определить его значение не сложно. Расчет значения приведу для сервера с размером оперативной памяти 512 МБ. Решаем, что отдаем для ресурсов Apache 50% оперативной памяти, то есть в нашем случае 256 МБ.
Определяем сколько памяти отжирает один процесс:
# ps -ylC httpd | awk '{x += $8;y += 1} END {print "Average Proccess Size (MB): "x/((y-1)*1024)}'
Получаем следующие значения:
Average Proccess Size (MB): 21.5185
Получается, что в среднем один процесс Apache потребляет 21 МБ. Соответственно в отведенном объеме 256 МБ мы можем запустить 12 процессов.
Исправим файл конфигурации под новое значение:
<IfModule mpm_prefork_module> StartServers 3 MinSpareServers 3 MaxSpareServers 9 ServerLimit 256 MaxClients 12 MaxRequestsPerChild 3000 </IfModule>
Остальные параметры поправил исходя из рекомендаций в интернете для сервера с ОЗУ 512 МБ.
После внесения изменений в файл конфигурации не забудьте перезагрузить Appache:
# service httpd restart
Благодарности
При написании статьи были использованы следующие источники:
А как перегрузить апач с ISPmanager?
Максим, в зависимости от используемой операционной системы команды могут быть разными. Для CentOS пример написан в статье: «service httpd restart». Так же это можно сделать из самой панели управления ISPmanager. Например в версии 4 ISPmanager в меню «Инструменты->Сервисы» выбираете HTTP и нажимаете кнопку [Перезапуск].
У меня ISPmanager Lite 5.51 Там Инструменты->Службы->httpd. А я изначально хотел через командную строку Инструменты->Выполнить команду, а там надо задавать полностью путь к службе иначе не прокатывает
Добрый день!
Хотел внести данные рекомендации, но в своем /etc/httpd/conf/httpd.conf такого не обнаружил, т.е. этих значений там нет.
CentOS 7.1 64bit. Панель Vesta.
Хотя у меня
Average Proccess Size (MB): 9.97266
Беслан, в CentOS 7, чтобы настроить параметры использования ресурсов Apache добавьте недостающий код (приведенный ниже) в файл httpd.conf:
Эти параметры также могут быть добавлены в виде отдельного файла, в директории /etc/httpd/conf.d Файл должен иметь расширение .conf
Не забудьте перезагрузить Apache
Согласен