Apache-модуль mod_qos (http://mod-qos.sourceforge.net/) позволяет организовать разделение запросов по приоритетам и обеспечить выполнение только приоритетных запросов при таких нештатных ситуациях, как перегрузка сервера. В качестве реакции при нехватке серверных ресурсов mod_qos может блокировать неприоритетные запросы, динамически изменять значения таймаутов, добавлять искусственную задержку перед выполнением запроса и принудительно завершать TCP-соединения.++ Примеры ситуация, когда можно использовать mod_qos:
* Управление интенсивностью выполнения длительных по времени и ресурсоемких запросов, предотвращение одновременного выполнения большого числа таких запросов;
* Защита от исчерпания пропускной способности канала связи из-за слишком большого числа одновременных обращений к определенным данным (например, когда пользователь сделал доступным для загрузки файл большого размера и широко его разрекламировал)
* Защита от простейших DDoS-атак.
++ Некоторые примеры ограничений, реализуемых через mod_qos ограничений:
* Ограничение максимального числа одновременных соединений для заданной части сайта, URL или виртуального хоста.
* Ограничение пропускной способности, числа запросов в секунду или объема трафика в секунду для любой части сайта;
* Ограничение числа выполнения определенных типов запросов в секунду;
* Не применение ограничений для определенных адресов или пользователей;
* Фильтрация по совпадению маски в HTTP-заголовке или теле запроса;
* Ограничение размера передаваемых в рамках запроса данных;
* Ограничение на уровне параметров TCP-соединений, например, ограничение максимального числа запросов с одного IP, динамическое изменение keep-alive и т.п.
* Обеспечение доступа с заданных IP в случае исчерпания свободных сокетов.
++ Пример установки и настройки типовой конфигурации в Debian/GNU Linux
На сайте http://mod-qos.sourceforge.net/ приведен большой набор практических примеров конфигурации mod_qos. Рассмотрим типовой вариант.
Так как mod_qos нет в стандартных репозиториях, установим данный модуль из исходных текстов.
Устанавливаем пакеты, необходимые для сборки модулей Apache:
apt-get install apache2-threaded-dev gcc
Загружаем архив с исходными текстами mod_qos с сайта ttp://sourceforge.net/projects/mod-qos/
wget http://downloads.sourceforge.net/project/mod-qos/9.9/mod_qos...
tar xvfz mod_qos-9.9.tar.gzСобираем и устанавливаем:
cd mod_qos-9.9/apache2/
apxs2 -i -c mod_qos.cПосле этого модуль будет установлен как /usr/lib/apache2/modules/mod_qos.so
Активируем модуль в Apache. В директории /etc/apache2/mods-available создаем два файла qos.load и qos.conf
В qos.load добавляем строку для загрузки модуля:
LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
В qos.conf определяем конфигурацию модуля (подобные блоки конфигурации можно привязывать к отдельным блокам Location и VirtualHost):
## Настройка QoS
<IfModule mod_qos.c>
# Размер буфера обрабатываемых IP-адресов клиентов.
# По умолчанию 50 тыс. На каждый IP тратится 63 байта
QS_ClientEntries 100000# Максимальное число одновременных соединений с одного IP
QS_SrvMaxConnPerIP 50# Общее максимальное число одновременных обращений к серверу
MaxClients 256
# Понижаем лимит для отдельных URL
QS_LocRequestLimit /aaa 100
QS_LocRequestLimit /bbb 10
QS_LocRequestLimit /ccc 5
QS_LocRequestLimitMatch "^(/dd1/|/dd2/).*$" 100# Недопускаем более 50 запросов в секунду для заданного URL
QS_LocRequestPerSecLimit /download/file.iso 50# Не распространять правила блокировки на запросы, пришедшие с заголовком mod-qos-login
QS_VipIPHeaderName mod-qos-login
# Отключаем keep-alive когда достигнуто значение в 70% от максимального лимита соединений
QS_SrvMaxConnClose 180# Минимальная скорость поступления запросов и генерации ответов,
# позволяет защитить сервер от наводнения медленными запросами, которые длительное время висят без передачи данных
QS_SrvMinDataRate 150 1200# Ограничение размера заголовков и тела запроса (следует изменить в соответствии со спецификой сайта)
# LimitRequestFields 30
# QS_LimitRequestBody 102400# Отключаем лимит для заданных подсетей
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10.# События, связанные с блокировками сохраняем в отдельном логе
CustomLog logs/qsaudit_log "%{qos-path}n%{qos-query}n"# Ограничиваем размер тела запроса в зависимости от mime-типа (для работы требуется модуль mod_parp):
SetEnvIfNoCase Content-Type application/x-www-form-urlencoded QS_LimitRequestBody=131072
SetEnvIfNoCase Content-Type multipart/form-data QS_LimitRequestBody=131072
SetEnvIfNoCase Content-Type multipart/mixed QS_LimitRequestBody=131072# Для заданного Location блокируем запросы по масками, для защиты от подстановки SQL запросов
<Location /app>
QS_DenyQueryBody on
QS_DenyQuery +s01 deny "(EXEC|SELECT|INSERT|UPDATE|DELETE)"
</Location># Пример установки разных лимитов в зависимости от типа браузера, для ботов ставим более жесткие лимиты
BrowserMatch "slurp" QS_Cond=spider
BrowserMatch "googlebot" QS_Cond=spiderQS_LocRequestLimitMatch "^(/app/b/|/app/c/).*$" 300
QS_CondLocRequestLimitMatch "^(/app/b/|/app/c/).*$" 10 spider</IfModule>
Активируем модуль и перезапускаем apache:
a2enmod qos
/etc/init.d/apache2 restartПри просмотре статистики через открытие http://ваш_сайт/server-status можно посмотреть дополнительную информацию о работе и настройках mod_qos.
URL: http://www.howtoforge.com/how-to-defend-slowloris-ddos-with-...
Обсуждается: http://www.opennet.me/tips/info/2308.shtml
пока юзеры опача бодаются с этой хренью, юзеры нжынксы просто обслуживают всех клиентов без проблем.
>пока юзеры опача бодаются с этой хренью, юзеры нжынксы просто обслуживают всех
>клиентов без проблем.И что юзеры nginx только статику отдают или какие-то особенные СУБД и скрипты на сатах используют, выдерживающие тысячи одновременных запросов ? Или вы вывод надписи "сервер перегружен" тоже за обслуживание принимайте ?
некоторым очень хочется чем-то выделиться. Цветом майки, формой шапки, используемым ПО ...
Ага, настрогав весь сайт в статику :)Опять же, сколько стОит каждый клиент? Есть такие клиенты, ради которых не жалко по целому серверу физическому поставить - пусть хоть так, но крутится тот "волшебный" софт, что так нужен такому замечательному (и выгодному) клиенту.
>Ага, настрогав весь сайт в статику :)Вообще, есть такая штука - кеширование называется. Зачастую - тупо дергать скрипт 1000 раз в секунду при том что результат все 1000 раз одинаковый. Можно, разумеется, отапливать воздух и делать мартышкину работу. Но вот нафига? По сути отдача статики и получается.
>Опять же, сколько стОит каждый клиент? Есть такие клиенты, ради которых не
>жалко по целому серверу физическому поставитьДа... а если вас посетит ботнет из нескольких тысяч ботов - вы, очевидно, отгрохаете по этому поводу пачку датацентров? А пупок не развяжется? :)
>- пусть хоть так, но крутится тот "волшебный" софт, что так нужен такому
>замечательному (и выгодному) клиенту.Кроме замечательного клиента может припереться несколько тысяч гораздо менее замечательных ботов, например. Особенно если конкуренты решат что было бы хорошо увеличить ваши затраты до небес или сделать так чтобы ценный клиент ни за что не смог достучаться до супер-пупер сервера.
># Отключаем keep-alive когда достигнуто значение в 70% от максимального лимита соединений
>QS_SrvMaxConnClose 180интересная фича!
Получил вот такую ошибкуmod_qos(003): request level rule httpd://www.lala.org.ua has no concurrent request limitations
Чтоб ето значило?...
use source
Скажите как запустить этот фаил mod_qos-9.10.tar.gz.