Какие методы и / или модули доступны для реализации надежного ограничения скорости (запросы | байты / IP / единица времени) в apache?
Ответы:
Лучшее
и остальное
mod_evasive
получает много онлайн-рекомендаций, но по состоянию на середину 2017 года его, похоже, забросил его автор, Джонатан Здзярски, который странным образом удалил все ссылки на него из своего блога - хотя исходный код все еще доступен для загрузки . Ни один из других проектов не обновлялся за последние 6 лет (или 15 лет в случае mod_limitipconn
).
Как указано в этом сообщении в блоге, кажется возможным использовать mod_security для реализации ограничения скорости в секунду.
Конфигурация примерно такая:
SecRuleEngine On
<LocationMatch "^/somepath">
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>
ErrorDocument 509 "Rate Limit Exceeded"
mod_security
- это не проект Apache.
Существует множество способов, включая брандмауэры веб-приложений, но проще всего реализовать их с помощью мода Apache.
Один из таких модов, который я рекомендую, - это mod_qos . Это бесплатный модуль, который очень эффективен против атак типа Certin DOS, Bruteforce и Slowloris. Это немного снизит нагрузку на ваш сервер.
Это очень мощно .
Текущая версия модуля mod_qos реализует механизмы контроля для управления:
Максимальное количество одновременных запросов к местоположению / ресурсу (URL) или виртуальному хосту.
Ограничение пропускной способности, например максимально допустимое количество запросов в секунду к URL-адресу или максимальное / минимальное количество загружаемых килобайт в секунду.
Ограничивает количество событий запроса в секунду (особые условия запроса).
Общая строка запроса и фильтр заголовка для запрета несанкционированных операций.
Ограничение и фильтрация данных тела запроса (требуется mod_parp).
Ограничивает количество событий запроса для отдельных клиентов (IP).
Ограничения на уровне TCP-соединения, например, максимальное количество разрешенных соединений с одного IP-адреса источника или динамический контроль активности.
Это образец конфигурации того, для чего вы можете ее использовать. Существуют сотни возможных конфигураций, соответствующих вашим потребностям. Посетите сайт для получения дополнительной информации об элементах управления.
Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate 120
# limits the connections for this virtual host:
QS_SrvMaxConn 800
# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose 600
# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP 50
# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10.
В Apache 2.4 есть новый стандартный модуль под названием mod_ratelimit . Для эмуляции скорости модема вы можете использовать mod_dialup . Хотя я не понимаю, почему вы просто не можете использовать mod_ratelimit для всего.
SUSPENDED
состояние, не тратя потоки на ожидание, тогда как mod_ratelimit, на данный момент, строго зависит от количества потоков на соединение. ср. thread.gmane.org/gmane.comp.apache.cvs/20490
Зависит от того, почему вы хотите установить ограничение скорости.
Если это необходимо для защиты от перегрузки сервера, на самом деле имеет смысл поставить перед ним NGINX и настроить ограничение скорости. там . Это имеет смысл, потому что NGINX использует гораздо меньше ресурсов, примерно несколько МБ на десять тысяч соединений. Итак, если сервер переполнен, NGINX будет ограничивать скорость (используя незначительное количество ресурсов) и передавать только разрешенный трафик в Apache.
Если все, что вам нужно, это простота, используйте что-нибудь вроде mod_evasive.
Как обычно, если это необходимо для защиты от DDoS- или DoS-атак, используйте такую службу, как Cloudflare, которая также имеет ограничение скорости.